1package cache
2
3import (
4 "testing"
5
6 "github.com/MichaelMure/git-bug/util/test"
7 "github.com/stretchr/testify/require"
8)
9
10func TestCache(t *testing.T) {
11 repo := test.CreateRepo(false)
12
13 cache, err := NewRepoCache(repo)
14 require.NoError(t, err)
15
16 // Create, set and get user identity
17 iden1, err := cache.NewIdentity("René Descartes", "rene@descartes.fr")
18 require.NoError(t, err)
19 err = cache.SetUserIdentity(iden1)
20 require.NoError(t, err)
21 userIden, err := cache.GetUserIdentity()
22 require.NoError(t, err)
23 require.Equal(t, iden1.Id(), userIden.Id())
24
25 // it's possible to create two identical identities
26 iden2, err := cache.NewIdentity("René Descartes", "rene@descartes.fr")
27 require.NoError(t, err)
28
29 // Two identical identities yield a different id
30 require.NotEqual(t, iden1.Id(), iden2.Id())
31
32 // There is now two identities in the cache
33 require.Len(t, cache.AllIdentityIds(), 2)
34 require.Len(t, cache.identitiesExcerpts, 2)
35 require.Len(t, cache.identities, 2)
36
37 // Create a bug
38 bug1, err := cache.NewBug("title", "message")
39 require.NoError(t, err)
40
41 // It's possible to create two identical bugs
42 bug2, err := cache.NewBug("title", "message")
43 require.NoError(t, err)
44
45 // two identical bugs yield a different id
46 require.NotEqual(t, bug1.Id(), bug2.Id())
47
48 // There is now two bugs in the cache
49 require.Len(t, cache.AllBugsIds(), 2)
50 require.Len(t, cache.bugExcerpts, 2)
51 require.Len(t, cache.bugs, 2)
52
53 // Resolving
54 _, err = cache.ResolveIdentity(iden1.Id())
55 require.NoError(t, err)
56 _, err = cache.ResolveIdentityExcerpt(iden1.Id())
57 require.NoError(t, err)
58 _, err = cache.ResolveIdentityPrefix(iden1.Id()[:10])
59 require.NoError(t, err)
60
61 _, err = cache.ResolveBug(bug1.Id())
62 require.NoError(t, err)
63 _, err = cache.ResolveBugExcerpt(bug1.Id())
64 require.NoError(t, err)
65 _, err = cache.ResolveBugPrefix(bug1.Id()[:10])
66 require.NoError(t, err)
67
68 // Querying
69 query, err := ParseQuery("status:open author:descartes sort:edit-asc")
70 require.NoError(t, err)
71 require.Len(t, cache.QueryBugs(query), 2)
72
73 // Close
74 require.NoError(t, cache.Close())
75 require.Empty(t, cache.bugs)
76 require.Empty(t, cache.bugExcerpts)
77 require.Empty(t, cache.identities)
78 require.Empty(t, cache.identitiesExcerpts)
79
80 // Reload, only excerpt are loaded
81 require.NoError(t, cache.load())
82 require.Empty(t, cache.bugs)
83 require.Empty(t, cache.identities)
84 require.Len(t, cache.bugExcerpts, 2)
85 require.Len(t, cache.identitiesExcerpts, 2)
86
87 // Resolving load from the disk
88 _, err = cache.ResolveIdentity(iden1.Id())
89 require.NoError(t, err)
90 _, err = cache.ResolveIdentityExcerpt(iden1.Id())
91 require.NoError(t, err)
92 _, err = cache.ResolveIdentityPrefix(iden1.Id()[:10])
93 require.NoError(t, err)
94
95 _, err = cache.ResolveBug(bug1.Id())
96 require.NoError(t, err)
97 _, err = cache.ResolveBugExcerpt(bug1.Id())
98 require.NoError(t, err)
99 _, err = cache.ResolveBugPrefix(bug1.Id()[:10])
100 require.NoError(t, err)
101}
102
103func TestPushPull(t *testing.T) {
104 repoA, repoB, remote := test.SetupReposAndRemote(t)
105 defer test.CleanupRepos(repoA, repoB, remote)
106
107 cacheA, err := NewRepoCache(repoA)
108 require.NoError(t, err)
109
110 cacheB, err := NewRepoCache(repoB)
111 require.NoError(t, err)
112
113 // Create, set and get user identity
114 reneA, err := cacheA.NewIdentity("René Descartes", "rene@descartes.fr")
115 require.NoError(t, err)
116 err = cacheA.SetUserIdentity(reneA)
117 require.NoError(t, err)
118
119 // distribute the identity
120 _, err = cacheA.Push("origin")
121 require.NoError(t, err)
122 err = cacheB.Pull("origin")
123 require.NoError(t, err)
124
125 // Create a bug in A
126 _, err = cacheA.NewBug("bug1", "message")
127 require.NoError(t, err)
128
129 // A --> remote --> B
130 _, err = cacheA.Push("origin")
131 require.NoError(t, err)
132
133 err = cacheB.Pull("origin")
134 require.NoError(t, err)
135
136 require.Len(t, cacheB.AllBugsIds(), 1)
137
138 // retrieve and set identity
139 reneB, err := cacheB.ResolveIdentity(reneA.Id())
140 require.NoError(t, err)
141
142 err = cacheB.SetUserIdentity(reneB)
143 require.NoError(t, err)
144
145 // B --> remote --> A
146 _, err = cacheB.NewBug("bug2", "message")
147 require.NoError(t, err)
148
149 _, err = cacheB.Push("origin")
150 require.NoError(t, err)
151
152 err = cacheA.Pull("origin")
153 require.NoError(t, err)
154
155 require.Len(t, cacheA.AllBugsIds(), 2)
156}