repo_cache_test.go

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