entity_actions_test.go

  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}