From ecee52638a40aced7b8d04b4ec71c72b2f8ea811 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Mon, 2 Jun 2025 11:14:16 +0200 Subject: [PATCH] Add tests --- .../object/tree/objecttree/objecttree_test.go | 80 +++++++++++++++++++ .../object/tree/objecttree/treebuilder.go | 2 +- 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/commonspace/object/tree/objecttree/objecttree_test.go b/commonspace/object/tree/objecttree/objecttree_test.go index fa10c354..bee8dc0d 100644 --- a/commonspace/object/tree/objecttree/objecttree_test.go +++ b/commonspace/object/tree/objecttree/objecttree_test.go @@ -928,6 +928,86 @@ func TestObjectTree(t *testing.T) { } }) + t.Run("test fix incorrect changes added", func(t *testing.T) { + treeCtx := prepareTreeContext(t, aclList) + treeStorage := treeCtx.treeStorage + changeCreator := treeCtx.changeCreator + objTree := treeCtx.objTree + + rawChangesFirst := []*treechangeproto.RawTreeChangeWithId{ + changeCreator.CreateRoot("0", aclList.Head().Id), + changeCreator.CreateRaw("1", aclList.Head().Id, "0", true, "0"), + } + rawChangesSecond := []*treechangeproto.RawTreeChangeWithId{ + changeCreator.CreateRoot("0", aclList.Head().Id), + changeCreator.CreateRaw("2", aclList.Head().Id, "0", true, "0"), + } + payloadFirst := RawChangesPayload{ + NewHeads: []string{"1"}, + RawChanges: rawChangesFirst, + } + payloadSecond := RawChangesPayload{ + NewHeads: []string{"2"}, + RawChanges: rawChangesSecond, + } + + res, err := objTree.AddRawChanges(context.Background(), payloadFirst) + require.NoError(t, err, "adding changes should be without error") + require.Equal(t, []string{"1"}, res.Heads) + + res, err = objTree.AddRawChanges(context.Background(), payloadSecond) + require.NoError(t, err, "adding changes should be without error") + require.Equal(t, []string{"1", "2"}, res.Heads) + + for _, ch := range append(rawChangesFirst, rawChangesSecond...) { + raw, err := treeStorage.Get(context.Background(), ch.Id) + assert.NoError(t, err, "storage should have all the changes") + assert.Equal(t, ch.Id, raw.RawTreeChangeWithId().Id, "the changes in the storage should be the same") + assert.Equal(t, ch.RawChange, raw.RawTreeChangeWithId().RawChange, "the changes in the storage should be the same") + } + }) + + t.Run("test fix incorrect changes added with snapshot path", func(t *testing.T) { + treeCtx := prepareTreeContext(t, aclList) + treeStorage := treeCtx.treeStorage + changeCreator := treeCtx.changeCreator + objTree := treeCtx.objTree + + rawChangesFirst := []*treechangeproto.RawTreeChangeWithId{ + changeCreator.CreateRoot("0", aclList.Head().Id), + changeCreator.CreateRaw("1", aclList.Head().Id, "0", true, "0"), + } + rawChangesSecond := []*treechangeproto.RawTreeChangeWithId{ + changeCreator.CreateRoot("0", aclList.Head().Id), + changeCreator.CreateRaw("2", aclList.Head().Id, "0", true, "0"), + } + payloadFirst := RawChangesPayload{ + NewHeads: []string{"1"}, + RawChanges: rawChangesFirst, + SnapshotPath: []string{"0", "1"}, + } + payloadSecond := RawChangesPayload{ + NewHeads: []string{"2"}, + RawChanges: rawChangesSecond, + SnapshotPath: []string{"0", "2"}, + } + + res, err := objTree.AddRawChanges(context.Background(), payloadFirst) + require.NoError(t, err, "adding changes should be without error") + require.Equal(t, []string{"1"}, res.Heads) + + res, err = objTree.AddRawChanges(context.Background(), payloadSecond) + require.NoError(t, err, "adding changes should be without error") + require.Equal(t, []string{"1", "2"}, res.Heads) + + for _, ch := range append(rawChangesFirst, rawChangesSecond...) { + raw, err := treeStorage.Get(context.Background(), ch.Id) + assert.NoError(t, err, "storage should have all the changes") + assert.Equal(t, ch.Id, raw.RawTreeChangeWithId().Id, "the changes in the storage should be the same") + assert.Equal(t, ch.RawChange, raw.RawTreeChangeWithId().RawChange, "the changes in the storage should be the same") + } + }) + t.Run("add with rollback", func(t *testing.T) { ctx := prepareTreeContext(t, aclList) changeCreator := ctx.changeCreator diff --git a/commonspace/object/tree/objecttree/treebuilder.go b/commonspace/object/tree/objecttree/treebuilder.go index da5207ad..64e58e71 100644 --- a/commonspace/object/tree/objecttree/treebuilder.go +++ b/commonspace/object/tree/objecttree/treebuilder.go @@ -225,7 +225,7 @@ func (tb *treeBuilder) lowestSnapshots(cache map[string]*Change, heads []string, current = append(current, next...) next = next[:0] for _, id := range current { - if ch, ok := cache[id]; ok { + if ch, ok := cache[id]; ok && ch.SnapshotId != "" { if ch.visited { continue }