package allowed

import (
	"fmt"
	"testing"

	"github.com/stretchr/testify/assert"
	"go.skia.org/infra/go/mockhttpclient"
	"go.skia.org/infra/go/testutils"
)

func TestInfraConvert(t *testing.T) {
	testutils.SmallTest(t)
	infra := []string{
		"user:*@google.com",
		"user:test@example.com",
		"anonymous:anonymous",
		"bot:foo",
		"service:bar",
		"user:",
		"user:last@example.org",
	}

	expected := []string{
		"google.com",
		"test@example.com",
		"last@example.org",
	}

	assert.Equal(t, expected, infraAuthToAllowFromList(infra))
	assert.Equal(t, []string{}, infraAuthToAllowFromList([]string{}))
}

const JSON = `{
  "group": {
    "members": [
      "user:test@example.org",
      "user:*@chromium.org"
    ]
  }
}`

func TestWithClientMock(t *testing.T) {
	testutils.SmallTest(t)
	m := mockhttpclient.NewURLMock()
	m.Mock(fmt.Sprintf(GROUP_URL_TEMPLATE, "test"), mockhttpclient.MockGetDialogue([]byte(JSON)))
	i, err := NewAllowedFromChromeInfraAuth(m.Client(), "test")
	assert.NoError(t, err)
	assert.True(t, i.Member("foo@chromium.org"))
	assert.True(t, i.Member("test@example.org"))
	assert.False(t, i.Member("example.org"))
	assert.False(t, i.Member("bar@example.org"))
}
