mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-08 05:57:03 +09:00
Test tree filter
This commit is contained in:
parent
8ad16df17f
commit
95dac55978
2 changed files with 70 additions and 2 deletions
|
@ -25,6 +25,25 @@ type testTreeContext struct {
|
|||
objTree ObjectTree
|
||||
}
|
||||
|
||||
func genBuildFilterableTestableTree(filterFunc func(ch *Change) bool) func(treeStorage treestorage.TreeStorage, aclList list.AclList) (ObjectTree, error) {
|
||||
return func(treeStorage treestorage.TreeStorage, aclList list.AclList) (ObjectTree, error) {
|
||||
root, _ := treeStorage.Root()
|
||||
changeBuilder := &nonVerifiableChangeBuilder{
|
||||
ChangeBuilder: NewChangeBuilder(newMockKeyStorage(), root),
|
||||
}
|
||||
deps := objectTreeDeps{
|
||||
changeBuilder: changeBuilder,
|
||||
treeBuilder: newTreeBuilder(true, treeStorage, changeBuilder),
|
||||
treeStorage: treeStorage,
|
||||
rawChangeLoader: newRawChangeLoader(treeStorage, changeBuilder),
|
||||
validator: &noOpTreeValidator{filterFunc: filterFunc},
|
||||
aclList: aclList,
|
||||
}
|
||||
|
||||
return buildObjectTree(deps)
|
||||
}
|
||||
}
|
||||
|
||||
func prepareAclList(t *testing.T) (list.AclList, *accountdata.AccountKeys) {
|
||||
randKeys, err := accountdata.NewRandom()
|
||||
require.NoError(t, err)
|
||||
|
@ -667,6 +686,35 @@ func TestObjectTree(t *testing.T) {
|
|||
})
|
||||
})
|
||||
|
||||
t.Run("test tree filter", func(t *testing.T) {
|
||||
filterFunc := func(change *Change) bool {
|
||||
return slices.Contains([]string{"0", "1", "2", "3", "4", "7", "8"}, change.Id)
|
||||
}
|
||||
ctx := prepareContext(t, aclList, genBuildFilterableTestableTree(filterFunc), false, nil)
|
||||
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
||||
ctx.changeCreator.CreateRawWithData("1", aclList.Head().Id, "0", false, []byte("1"), "0"),
|
||||
ctx.changeCreator.CreateRawWithData("2", aclList.Head().Id, "0", false, []byte("2"), "1"),
|
||||
ctx.changeCreator.CreateRawWithData("3", aclList.Head().Id, "0", false, []byte("3"), "2"),
|
||||
ctx.changeCreator.CreateRawWithData("4", aclList.Head().Id, "0", false, []byte("4"), "2"),
|
||||
ctx.changeCreator.CreateRawWithData("5", aclList.Head().Id, "0", false, []byte("5"), "1"),
|
||||
ctx.changeCreator.CreateRawWithData("6", aclList.Head().Id, "0", true, []byte("6"), "3", "4", "5"),
|
||||
ctx.changeCreator.CreateRawWithData("7", aclList.Head().Id, "6", false, []byte("7"), "6"),
|
||||
ctx.changeCreator.CreateRawWithData("8", aclList.Head().Id, "6", false, []byte("8"), "6"),
|
||||
}
|
||||
_, err := ctx.objTree.AddRawChanges(context.Background(), RawChangesPayload{
|
||||
NewHeads: []string{"6"},
|
||||
RawChanges: rawChanges,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
var ids []string
|
||||
ctx.objTree.IterateRoot(nil, func(change *Change) bool {
|
||||
ids = append(ids, change.Id)
|
||||
return true
|
||||
})
|
||||
slices.Sort(ids)
|
||||
require.Equal(t, []string{"0", "1", "2", "3", "4"}, ids)
|
||||
})
|
||||
|
||||
t.Run("rollback when add to storage returns error", func(t *testing.T) {
|
||||
ctx := prepareTreeContext(t, aclList)
|
||||
changeCreator := ctx.changeCreator
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue