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