repo_cache_test.go

  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}