1package dag
2
3import (
4 "testing"
5
6 "github.com/stretchr/testify/require"
7
8 "github.com/MichaelMure/git-bug/identity"
9 "github.com/MichaelMure/git-bug/repository"
10)
11
12func allEntities(t testing.TB, bugs <-chan StreamedEntity) []*Entity {
13 var result []*Entity
14 for streamed := range bugs {
15 if streamed.Err != nil {
16 t.Fatal(streamed.Err)
17 }
18 result = append(result, streamed.Entity)
19 }
20 return result
21}
22
23func TestPushPull(t *testing.T) {
24 repoA, repoB, remote, id1, id2, def := makeTestContextRemote()
25 defer repository.CleanupTestRepos(repoA, repoB, remote)
26
27 // distribute the identities
28 _, err := identity.Push(repoA, "origin")
29 require.NoError(t, err)
30 err = identity.Pull(repoB, "origin")
31 require.NoError(t, err)
32
33 // A --> remote --> B
34 entity := New(def)
35 entity.Append(newOp1(id1, "foo"))
36
37 err = entity.Commit(repoA)
38 require.NoError(t, err)
39
40 _, err = Push(def, repoA, "origin")
41 require.NoError(t, err)
42
43 err = Pull(def, repoB, "origin")
44 require.NoError(t, err)
45
46 entities := allEntities(t, ReadAll(def, repoB))
47 require.Len(t, entities, 1)
48
49 // B --> remote --> A
50 entity = New(def)
51 entity.Append(newOp2(id2, "bar"))
52
53 err = entity.Commit(repoB)
54 require.NoError(t, err)
55
56 _, err = Push(def, repoB, "origin")
57 require.NoError(t, err)
58
59 err = Pull(def, repoA, "origin")
60 require.NoError(t, err)
61
62 entities = allEntities(t, ReadAll(def, repoB))
63 require.Len(t, entities, 2)
64}
65
66func TestListLocalIds(t *testing.T) {
67 repoA, repoB, remote, id1, id2, def := makeTestContextRemote()
68 defer repository.CleanupTestRepos(repoA, repoB, remote)
69
70 // distribute the identities
71 _, err := identity.Push(repoA, "origin")
72 require.NoError(t, err)
73 err = identity.Pull(repoB, "origin")
74 require.NoError(t, err)
75
76 // A --> remote --> B
77 entity := New(def)
78 entity.Append(newOp1(id1, "foo"))
79 err = entity.Commit(repoA)
80 require.NoError(t, err)
81
82 entity = New(def)
83 entity.Append(newOp2(id2, "bar"))
84 err = entity.Commit(repoA)
85 require.NoError(t, err)
86
87 listLocalIds(t, def, repoA, 2)
88 listLocalIds(t, def, repoB, 0)
89
90 _, err = Push(def, repoA, "origin")
91 require.NoError(t, err)
92
93 _, err = Fetch(def, repoB, "origin")
94 require.NoError(t, err)
95
96 listLocalIds(t, def, repoA, 2)
97 listLocalIds(t, def, repoB, 0)
98
99 err = Pull(def, repoB, "origin")
100 require.NoError(t, err)
101
102 listLocalIds(t, def, repoA, 2)
103 listLocalIds(t, def, repoB, 2)
104}
105
106func listLocalIds(t *testing.T, def Definition, repo repository.RepoData, expectedCount int) {
107 ids, err := ListLocalIds(def, repo)
108 require.NoError(t, err)
109 require.Len(t, ids, expectedCount)
110}