mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-08 05:57:03 +09:00
72 lines
2.6 KiB
Go
72 lines
2.6 KiB
Go
package synctree
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"go.uber.org/mock/gomock"
|
|
|
|
"github.com/anyproto/any-sync/commonspace/object/acl/list"
|
|
"github.com/anyproto/any-sync/commonspace/object/tree/objecttree"
|
|
"github.com/anyproto/any-sync/commonspace/object/tree/objecttree/mock_objecttree"
|
|
"github.com/anyproto/any-sync/commonspace/object/tree/synctree/response"
|
|
"github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto"
|
|
"github.com/anyproto/any-sync/commonspace/object/tree/treestorage"
|
|
)
|
|
|
|
func TestFullResponseCollector_CollectResponse(t *testing.T) {
|
|
t.Run("no object tree", func(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
objTree := mock_objecttree.NewMockObjectTree(ctrl)
|
|
defer ctrl.Finish()
|
|
testPayload := treestorage.TreeStorageCreatePayload{
|
|
RootRawChange: &treechangeproto.RawTreeChangeWithId{Id: "root"},
|
|
Changes: []*treechangeproto.RawTreeChangeWithId{{Id: "change"}},
|
|
Heads: []string{"head"},
|
|
}
|
|
resp := &response.Response{
|
|
SpaceId: "spaceId",
|
|
ObjectId: "objectId",
|
|
Heads: testPayload.Heads,
|
|
Changes: testPayload.Changes,
|
|
Root: testPayload.RootRawChange,
|
|
}
|
|
var validator objecttree.ValidatorFunc = func(payload treestorage.TreeStorageCreatePayload, storageCreator objecttree.TreeStorageCreator, aclList list.AclList) (ret objecttree.ObjectTree, err error) {
|
|
require.Equal(t, testPayload, payload)
|
|
return objTree, nil
|
|
}
|
|
coll := newFullResponseCollector(BuildDeps{
|
|
ValidateObjectTree: validator,
|
|
})
|
|
err := coll.CollectResponse(nil, "peerId", "objectId", resp)
|
|
require.NoError(t, err)
|
|
require.Equal(t, objTree, coll.objectTree)
|
|
})
|
|
t.Run("object tree exists", func(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
objTree := mock_objecttree.NewMockObjectTree(ctrl)
|
|
defer ctrl.Finish()
|
|
testPayload := treestorage.TreeStorageCreatePayload{
|
|
RootRawChange: &treechangeproto.RawTreeChangeWithId{Id: "root"},
|
|
Changes: []*treechangeproto.RawTreeChangeWithId{{Id: "change"}},
|
|
Heads: []string{"head"},
|
|
}
|
|
resp := &response.Response{
|
|
SpaceId: "spaceId",
|
|
ObjectId: "objectId",
|
|
Heads: testPayload.Heads,
|
|
Changes: testPayload.Changes,
|
|
Root: testPayload.RootRawChange,
|
|
}
|
|
coll := newFullResponseCollector(BuildDeps{})
|
|
coll.objectTree = objTree
|
|
objTree.EXPECT().Lock()
|
|
objTree.EXPECT().Unlock()
|
|
objTree.EXPECT().AddRawChanges(nil, objecttree.RawChangesPayload{
|
|
NewHeads: testPayload.Heads,
|
|
RawChanges: testPayload.Changes,
|
|
}).Return(objecttree.AddResult{}, nil)
|
|
err := coll.CollectResponse(nil, "peerId", "objectId", resp)
|
|
require.NoError(t, err)
|
|
})
|
|
}
|