entity_test.go

  1package dag
  2
  3import (
  4	"testing"
  5
  6	"github.com/stretchr/testify/require"
  7)
  8
  9func TestWriteRead(t *testing.T) {
 10	repo, id1, id2, def := makeTestContext()
 11
 12	entity := New(def)
 13	require.False(t, entity.NeedCommit())
 14
 15	entity.Append(newOp1(id1, "foo"))
 16	entity.Append(newOp2(id1, "bar"))
 17
 18	require.True(t, entity.NeedCommit())
 19	require.NoError(t, entity.CommitAdNeeded(repo))
 20	require.False(t, entity.NeedCommit())
 21
 22	entity.Append(newOp2(id2, "foobar"))
 23	require.True(t, entity.NeedCommit())
 24	require.NoError(t, entity.CommitAdNeeded(repo))
 25	require.False(t, entity.NeedCommit())
 26
 27	read, err := Read(def, repo, entity.Id())
 28	require.NoError(t, err)
 29
 30	assertEqualEntities(t, entity, read)
 31}
 32
 33func assertEqualEntities(t *testing.T, a, b *Entity) {
 34	// testify doesn't support comparing functions and systematically fail if they are not nil
 35	// so we have to set them to nil temporarily
 36
 37	backOpUnA := a.Definition.operationUnmarshaler
 38	backOpUnB := b.Definition.operationUnmarshaler
 39
 40	a.Definition.operationUnmarshaler = nil
 41	b.Definition.operationUnmarshaler = nil
 42
 43	backIdResA := a.Definition.identityResolver
 44	backIdResB := b.Definition.identityResolver
 45
 46	a.Definition.identityResolver = nil
 47	b.Definition.identityResolver = nil
 48
 49	defer func() {
 50		a.Definition.operationUnmarshaler = backOpUnA
 51		b.Definition.operationUnmarshaler = backOpUnB
 52		a.Definition.identityResolver = backIdResA
 53		b.Definition.identityResolver = backIdResB
 54	}()
 55
 56	require.Equal(t, a, b)
 57}
 58
 59// // Merge
 60//
 61// merge1 := makeCommit(t, repo)
 62// merge1 = makeCommit(t, repo, merge1)
 63// err = repo.UpdateRef("merge1", merge1)
 64// require.NoError(t, err)
 65//
 66// err = repo.UpdateRef("merge2", merge1)
 67// require.NoError(t, err)
 68//
 69// // identical merge
 70// err = repo.MergeRef("merge1", "merge2")
 71// require.NoError(t, err)
 72//
 73// refMerge1, err := repo.ResolveRef("merge1")
 74// require.NoError(t, err)
 75// require.Equal(t, merge1, refMerge1)
 76// refMerge2, err := repo.ResolveRef("merge2")
 77// require.NoError(t, err)
 78// require.Equal(t, merge1, refMerge2)
 79//
 80// // fast-forward merge
 81// merge2 := makeCommit(t, repo, merge1)
 82// merge2 = makeCommit(t, repo, merge2)
 83//
 84// err = repo.UpdateRef("merge2", merge2)
 85// require.NoError(t, err)
 86//
 87// err = repo.MergeRef("merge1", "merge2")
 88// require.NoError(t, err)
 89//
 90// refMerge1, err = repo.ResolveRef("merge1")
 91// require.NoError(t, err)
 92// require.Equal(t, merge2, refMerge1)
 93// refMerge2, err = repo.ResolveRef("merge2")
 94// require.NoError(t, err)
 95// require.Equal(t, merge2, refMerge2)
 96//
 97// // merge commit
 98// merge1 = makeCommit(t, repo, merge1)
 99// err = repo.UpdateRef("merge1", merge1)
100// require.NoError(t, err)
101//
102// merge2 = makeCommit(t, repo, merge2)
103// err = repo.UpdateRef("merge2", merge2)
104// require.NoError(t, err)
105//
106// err = repo.MergeRef("merge1", "merge2")
107// require.NoError(t, err)
108//
109// refMerge1, err = repo.ResolveRef("merge1")
110// require.NoError(t, err)
111// require.NotEqual(t, merge1, refMerge1)
112// commitRefMerge1, err := repo.ReadCommit(refMerge1)
113// require.NoError(t, err)
114// require.ElementsMatch(t, commitRefMerge1.Parents, []Hash{merge1, merge2})
115// refMerge2, err = repo.ResolveRef("merge2")
116// require.NoError(t, err)
117// require.Equal(t, merge2, refMerge2)