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}