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}