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