credential_test.go

  1package auth
  2
  3import (
  4	"testing"
  5
  6	"github.com/stretchr/testify/assert"
  7	"github.com/stretchr/testify/require"
  8
  9	"github.com/MichaelMure/git-bug/entity"
 10	"github.com/MichaelMure/git-bug/repository"
 11)
 12
 13func TestCredential(t *testing.T) {
 14	repo := repository.NewMockRepoForTest()
 15
 16	storeToken := func(val string, target string) *Token {
 17		token := NewToken(val, target)
 18		err := Store(repo, token)
 19		require.NoError(t, err)
 20		return token
 21	}
 22
 23	token := storeToken("foobar", "github")
 24
 25	// Store + Load
 26	err := Store(repo, token)
 27	assert.NoError(t, err)
 28
 29	token2, err := LoadWithId(repo, token.ID())
 30	assert.NoError(t, err)
 31	assert.Equal(t, token.createTime.Unix(), token2.CreateTime().Unix())
 32	token.createTime = token2.CreateTime()
 33	assert.Equal(t, token, token2)
 34
 35	prefix := string(token.ID())[:10]
 36
 37	// LoadWithPrefix
 38	token3, err := LoadWithPrefix(repo, prefix)
 39	assert.NoError(t, err)
 40	assert.Equal(t, token.createTime.Unix(), token3.CreateTime().Unix())
 41	token.createTime = token3.CreateTime()
 42	assert.Equal(t, token, token3)
 43
 44	token4 := storeToken("foo", "gitlab")
 45	token5 := storeToken("bar", "github")
 46
 47	// List + options
 48	creds, err := List(repo, WithTarget("github"))
 49	assert.NoError(t, err)
 50	sameIds(t, creds, []Credential{token, token5})
 51
 52	creds, err = List(repo, WithTarget("gitlab"))
 53	assert.NoError(t, err)
 54	sameIds(t, creds, []Credential{token4})
 55
 56	creds, err = List(repo, WithKind(KindToken))
 57	assert.NoError(t, err)
 58	sameIds(t, creds, []Credential{token, token4, token5})
 59
 60	creds, err = List(repo, WithKind(KindLoginPassword))
 61	assert.NoError(t, err)
 62	sameIds(t, creds, []Credential{})
 63
 64	// Metadata
 65
 66	token4.SetMetadata("key", "value")
 67	err = Store(repo, token4)
 68	assert.NoError(t, err)
 69
 70	creds, err = List(repo, WithMeta("key", "value"))
 71	assert.NoError(t, err)
 72	sameIds(t, creds, []Credential{token4})
 73
 74	// Exist
 75	exist := IdExist(repo, token.ID())
 76	assert.True(t, exist)
 77
 78	exist = PrefixExist(repo, prefix)
 79	assert.True(t, exist)
 80
 81	// Remove
 82	err = Remove(repo, token.ID())
 83	assert.NoError(t, err)
 84
 85	creds, err = List(repo)
 86	assert.NoError(t, err)
 87	sameIds(t, creds, []Credential{token4, token5})
 88}
 89
 90func sameIds(t *testing.T, a []Credential, b []Credential) {
 91	t.Helper()
 92
 93	ids := func(creds []Credential) []entity.Id {
 94		result := make([]entity.Id, len(creds))
 95		for i, cred := range creds {
 96			result[i] = cred.ID()
 97		}
 98		return result
 99	}
100
101	assert.ElementsMatch(t, ids(a), ids(b))
102}