Test settings state builder
This commit is contained in:
parent
ac22c3014c
commit
e02b2e6964
@ -8,7 +8,7 @@ import (
|
|||||||
context "context"
|
context "context"
|
||||||
reflect "reflect"
|
reflect "reflect"
|
||||||
|
|
||||||
deletionstate "github.com/anytypeio/any-sync/commonspace/settings/settingsstate"
|
settingsstate "github.com/anytypeio/any-sync/commonspace/settings/settingsstate"
|
||||||
gomock "github.com/golang/mock/gomock"
|
gomock "github.com/golang/mock/gomock"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ func (m *MockDiffSyncer) EXPECT() *MockDiffSyncerMockRecorder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Init mocks base method.
|
// Init mocks base method.
|
||||||
func (m *MockDiffSyncer) Init(arg0 deletionstate.ObjectDeletionState) {
|
func (m *MockDiffSyncer) Init(arg0 settingsstate.ObjectDeletionState) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
m.ctrl.Call(m, "Init", arg0)
|
m.ctrl.Call(m, "Init", arg0)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -255,6 +255,21 @@ func (mr *MockObjectTreeMockRecorder) Lock() *gomock.Call {
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Lock", reflect.TypeOf((*MockObjectTree)(nil).Lock))
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Lock", reflect.TypeOf((*MockObjectTree)(nil).Lock))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PrepareChange mocks base method.
|
||||||
|
func (m *MockObjectTree) PrepareChange(arg0 objecttree.SignableChangeContent) (*treechangeproto.RawTreeChangeWithId, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "PrepareChange", arg0)
|
||||||
|
ret0, _ := ret[0].(*treechangeproto.RawTreeChangeWithId)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrepareChange indicates an expected call of PrepareChange.
|
||||||
|
func (mr *MockObjectTreeMockRecorder) PrepareChange(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PrepareChange", reflect.TypeOf((*MockObjectTree)(nil).PrepareChange), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
// RLock mocks base method.
|
// RLock mocks base method.
|
||||||
func (m *MockObjectTree) RLock() {
|
func (m *MockObjectTree) RLock() {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@ -374,3 +389,18 @@ func (mr *MockObjectTreeMockRecorder) UnmarshalledHeader() *gomock.Call {
|
|||||||
mr.mock.ctrl.T.Helper()
|
mr.mock.ctrl.T.Helper()
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UnmarshalledHeader", reflect.TypeOf((*MockObjectTree)(nil).UnmarshalledHeader))
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UnmarshalledHeader", reflect.TypeOf((*MockObjectTree)(nil).UnmarshalledHeader))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnpackChange mocks base method.
|
||||||
|
func (m *MockObjectTree) UnpackChange(arg0 *treechangeproto.RawTreeChangeWithId) ([]byte, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "UnpackChange", arg0)
|
||||||
|
ret0, _ := ret[0].([]byte)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnpackChange indicates an expected call of UnpackChange.
|
||||||
|
func (mr *MockObjectTreeMockRecorder) UnpackChange(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UnpackChange", reflect.TypeOf((*MockObjectTree)(nil).UnpackChange), arg0)
|
||||||
|
}
|
||||||
|
|||||||
@ -380,6 +380,21 @@ func (mr *MockSyncTreeMockRecorder) Lock() *gomock.Call {
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Lock", reflect.TypeOf((*MockSyncTree)(nil).Lock))
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Lock", reflect.TypeOf((*MockSyncTree)(nil).Lock))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PrepareChange mocks base method.
|
||||||
|
func (m *MockSyncTree) PrepareChange(arg0 objecttree.SignableChangeContent) (*treechangeproto.RawTreeChangeWithId, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "PrepareChange", arg0)
|
||||||
|
ret0, _ := ret[0].(*treechangeproto.RawTreeChangeWithId)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrepareChange indicates an expected call of PrepareChange.
|
||||||
|
func (mr *MockSyncTreeMockRecorder) PrepareChange(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PrepareChange", reflect.TypeOf((*MockSyncTree)(nil).PrepareChange), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
// RLock mocks base method.
|
// RLock mocks base method.
|
||||||
func (m *MockSyncTree) RLock() {
|
func (m *MockSyncTree) RLock() {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@ -526,6 +541,21 @@ func (mr *MockSyncTreeMockRecorder) UnmarshalledHeader() *gomock.Call {
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UnmarshalledHeader", reflect.TypeOf((*MockSyncTree)(nil).UnmarshalledHeader))
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UnmarshalledHeader", reflect.TypeOf((*MockSyncTree)(nil).UnmarshalledHeader))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnpackChange mocks base method.
|
||||||
|
func (m *MockSyncTree) UnpackChange(arg0 *treechangeproto.RawTreeChangeWithId) ([]byte, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "UnpackChange", arg0)
|
||||||
|
ret0, _ := ret[0].([]byte)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnpackChange indicates an expected call of UnpackChange.
|
||||||
|
func (mr *MockSyncTreeMockRecorder) UnpackChange(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UnpackChange", reflect.TypeOf((*MockSyncTree)(nil).UnpackChange), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
// MockReceiveQueue is a mock of ReceiveQueue interface.
|
// MockReceiveQueue is a mock of ReceiveQueue interface.
|
||||||
type MockReceiveQueue struct {
|
type MockReceiveQueue struct {
|
||||||
ctrl *gomock.Controller
|
ctrl *gomock.Controller
|
||||||
|
|||||||
@ -50,6 +50,20 @@ func (mr *MockTreeGetterMockRecorder) Close(arg0 interface{}) *gomock.Call {
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockTreeGetter)(nil).Close), arg0)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockTreeGetter)(nil).Close), arg0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeleteSpace mocks base method.
|
||||||
|
func (m *MockTreeGetter) DeleteSpace(arg0 context.Context, arg1 string) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "DeleteSpace", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteSpace indicates an expected call of DeleteSpace.
|
||||||
|
func (mr *MockTreeGetterMockRecorder) DeleteSpace(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteSpace", reflect.TypeOf((*MockTreeGetter)(nil).DeleteSpace), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// DeleteTree mocks base method.
|
// DeleteTree mocks base method.
|
||||||
func (m *MockTreeGetter) DeleteTree(arg0 context.Context, arg1, arg2 string) error {
|
func (m *MockTreeGetter) DeleteTree(arg0 context.Context, arg1, arg2 string) error {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
|||||||
@ -134,7 +134,7 @@ func NewSettingsObject(deps Deps, spaceId string) (obj SettingsObject) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *settingsObject) updateIds(tr objecttree.ObjectTree, isUpdate bool) {
|
func (s *settingsObject) updateIds(tr objecttree.ObjectTree) {
|
||||||
var err error
|
var err error
|
||||||
s.state, err = s.builder.Build(tr, s.state, isUpdate)
|
s.state, err = s.builder.Build(tr, s.state, isUpdate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -149,13 +149,14 @@ func (s *settingsObject) updateIds(tr objecttree.ObjectTree, isUpdate bool) {
|
|||||||
|
|
||||||
// Update is called as part of UpdateListener interface
|
// Update is called as part of UpdateListener interface
|
||||||
func (s *settingsObject) Update(tr objecttree.ObjectTree) {
|
func (s *settingsObject) Update(tr objecttree.ObjectTree) {
|
||||||
s.updateIds(tr, true)
|
s.updateIds(tr)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rebuild is called as part of UpdateListener interface (including when the object is built for the first time, e.g. on Init call)
|
// Rebuild is called as part of UpdateListener interface (including when the object is built for the first time, e.g. on Init call)
|
||||||
func (s *settingsObject) Rebuild(tr objecttree.ObjectTree) {
|
func (s *settingsObject) Rebuild(tr objecttree.ObjectTree) {
|
||||||
// at initial build "s" may not contain the object tree, so it is safer to provide it from the function parameter
|
// at initial build "s" may not contain the object tree, so it is safer to provide it from the function parameter
|
||||||
s.updateIds(tr, false)
|
s.state = nil
|
||||||
|
s.updateIds(tr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *settingsObject) Init(ctx context.Context) (err error) {
|
func (s *settingsObject) Init(ctx context.Context) (err error) {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
//go:generate mockgen -destination mock_deletionstate/mock_deletionstate.go github.com/anytypeio/any-sync/commonspace/settings/deletionstate DeletionState
|
//go:generate mockgen -destination mock_settingsstate/mock_settingsstate.go github.com/anytypeio/any-sync/commonspace/settings/settingsstate ObjectDeletionState,StateBuilder
|
||||||
package settingsstate
|
package settingsstate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
@ -1,136 +0,0 @@
|
|||||||
// Code generated by MockGen. DO NOT EDIT.
|
|
||||||
// Source: github.com/anytypeio/any-sync/commonspace/settings/deletionstate (interfaces: ObjectDeletionState)
|
|
||||||
|
|
||||||
// Package mock_deletionstate is a generated GoMock package.
|
|
||||||
package mock_settingsstate
|
|
||||||
|
|
||||||
import (
|
|
||||||
reflect "reflect"
|
|
||||||
|
|
||||||
deletionstate "github.com/anytypeio/any-sync/commonspace/settings/settingsstate"
|
|
||||||
gomock "github.com/golang/mock/gomock"
|
|
||||||
)
|
|
||||||
|
|
||||||
// MockDeletionState is a mock of ObjectDeletionState interface.
|
|
||||||
type MockDeletionState struct {
|
|
||||||
ctrl *gomock.Controller
|
|
||||||
recorder *MockDeletionStateMockRecorder
|
|
||||||
}
|
|
||||||
|
|
||||||
// MockDeletionStateMockRecorder is the mock recorder for MockDeletionState.
|
|
||||||
type MockDeletionStateMockRecorder struct {
|
|
||||||
mock *MockDeletionState
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewMockDeletionState creates a new mock instance.
|
|
||||||
func NewMockDeletionState(ctrl *gomock.Controller) *MockDeletionState {
|
|
||||||
mock := &MockDeletionState{ctrl: ctrl}
|
|
||||||
mock.recorder = &MockDeletionStateMockRecorder{mock}
|
|
||||||
return mock
|
|
||||||
}
|
|
||||||
|
|
||||||
// EXPECT returns an object that allows the caller to indicate expected use.
|
|
||||||
func (m *MockDeletionState) EXPECT() *MockDeletionStateMockRecorder {
|
|
||||||
return m.recorder
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add mocks base method.
|
|
||||||
func (m *MockDeletionState) Add(arg0 []string) error {
|
|
||||||
m.ctrl.T.Helper()
|
|
||||||
ret := m.ctrl.Call(m, "Add", arg0)
|
|
||||||
ret0, _ := ret[0].(error)
|
|
||||||
return ret0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add indicates an expected call of Add.
|
|
||||||
func (mr *MockDeletionStateMockRecorder) Add(arg0 interface{}) *gomock.Call {
|
|
||||||
mr.mock.ctrl.T.Helper()
|
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Add", reflect.TypeOf((*MockDeletionState)(nil).Add), arg0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddObserver mocks base method.
|
|
||||||
func (m *MockDeletionState) AddObserver(arg0 deletionstate.StateUpdateObserver) {
|
|
||||||
m.ctrl.T.Helper()
|
|
||||||
m.ctrl.Call(m, "AddObserver", arg0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddObserver indicates an expected call of AddObserver.
|
|
||||||
func (mr *MockDeletionStateMockRecorder) AddObserver(arg0 interface{}) *gomock.Call {
|
|
||||||
mr.mock.ctrl.T.Helper()
|
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddObserver", reflect.TypeOf((*MockDeletionState)(nil).AddObserver), arg0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// CreateDeleteChange mocks base method.
|
|
||||||
func (m *MockDeletionState) CreateObjectDeleteChange(arg0 string, arg1 bool) ([]byte, error) {
|
|
||||||
m.ctrl.T.Helper()
|
|
||||||
ret := m.ctrl.Call(m, "CreateDeleteChange", arg0, arg1)
|
|
||||||
ret0, _ := ret[0].([]byte)
|
|
||||||
ret1, _ := ret[1].(error)
|
|
||||||
return ret0, ret1
|
|
||||||
}
|
|
||||||
|
|
||||||
// CreateDeleteChange indicates an expected call of CreateDeleteChange.
|
|
||||||
func (mr *MockDeletionStateMockRecorder) CreateDeleteChange(arg0, arg1 interface{}) *gomock.Call {
|
|
||||||
mr.mock.ctrl.T.Helper()
|
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateDeleteChange", reflect.TypeOf((*MockDeletionState)(nil).CreateObjectDeleteChange), arg0, arg1)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete mocks base method.
|
|
||||||
func (m *MockDeletionState) Delete(arg0 string) error {
|
|
||||||
m.ctrl.T.Helper()
|
|
||||||
ret := m.ctrl.Call(m, "Delete", arg0)
|
|
||||||
ret0, _ := ret[0].(error)
|
|
||||||
return ret0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete indicates an expected call of Delete.
|
|
||||||
func (mr *MockDeletionStateMockRecorder) Delete(arg0 interface{}) *gomock.Call {
|
|
||||||
mr.mock.ctrl.T.Helper()
|
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockDeletionState)(nil).Delete), arg0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Exists mocks base method.
|
|
||||||
func (m *MockDeletionState) Exists(arg0 string) bool {
|
|
||||||
m.ctrl.T.Helper()
|
|
||||||
ret := m.ctrl.Call(m, "Exists", arg0)
|
|
||||||
ret0, _ := ret[0].(bool)
|
|
||||||
return ret0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Exists indicates an expected call of Exists.
|
|
||||||
func (mr *MockDeletionStateMockRecorder) Exists(arg0 interface{}) *gomock.Call {
|
|
||||||
mr.mock.ctrl.T.Helper()
|
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Exists", reflect.TypeOf((*MockDeletionState)(nil).Exists), arg0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// FilterJoin mocks base method.
|
|
||||||
func (m *MockDeletionState) FilterJoin(arg0 ...[]string) []string {
|
|
||||||
m.ctrl.T.Helper()
|
|
||||||
varargs := []interface{}{}
|
|
||||||
for _, a := range arg0 {
|
|
||||||
varargs = append(varargs, a)
|
|
||||||
}
|
|
||||||
ret := m.ctrl.Call(m, "FilterJoin", varargs...)
|
|
||||||
ret0, _ := ret[0].([]string)
|
|
||||||
return ret0
|
|
||||||
}
|
|
||||||
|
|
||||||
// FilterJoin indicates an expected call of FilterJoin.
|
|
||||||
func (mr *MockDeletionStateMockRecorder) FilterJoin(arg0 ...interface{}) *gomock.Call {
|
|
||||||
mr.mock.ctrl.T.Helper()
|
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FilterJoin", reflect.TypeOf((*MockDeletionState)(nil).FilterJoin), arg0...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetQueued mocks base method.
|
|
||||||
func (m *MockDeletionState) GetQueued() []string {
|
|
||||||
m.ctrl.T.Helper()
|
|
||||||
ret := m.ctrl.Call(m, "GetQueued")
|
|
||||||
ret0, _ := ret[0].([]string)
|
|
||||||
return ret0
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetQueued indicates an expected call of GetQueued.
|
|
||||||
func (mr *MockDeletionStateMockRecorder) GetQueued() *gomock.Call {
|
|
||||||
mr.mock.ctrl.T.Helper()
|
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetQueued", reflect.TypeOf((*MockDeletionState)(nil).GetQueued))
|
|
||||||
}
|
|
||||||
@ -0,0 +1,160 @@
|
|||||||
|
// Code generated by MockGen. DO NOT EDIT.
|
||||||
|
// Source: github.com/anytypeio/any-sync/commonspace/settings/settingsstate (interfaces: ObjectDeletionState,StateBuilder)
|
||||||
|
|
||||||
|
// Package mock_settingsstate is a generated GoMock package.
|
||||||
|
package mock_settingsstate
|
||||||
|
|
||||||
|
import (
|
||||||
|
reflect "reflect"
|
||||||
|
|
||||||
|
objecttree "github.com/anytypeio/any-sync/commonspace/object/tree/objecttree"
|
||||||
|
settingsstate "github.com/anytypeio/any-sync/commonspace/settings/settingsstate"
|
||||||
|
gomock "github.com/golang/mock/gomock"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MockObjectDeletionState is a mock of ObjectDeletionState interface.
|
||||||
|
type MockObjectDeletionState struct {
|
||||||
|
ctrl *gomock.Controller
|
||||||
|
recorder *MockObjectDeletionStateMockRecorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockObjectDeletionStateMockRecorder is the mock recorder for MockObjectDeletionState.
|
||||||
|
type MockObjectDeletionStateMockRecorder struct {
|
||||||
|
mock *MockObjectDeletionState
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewMockObjectDeletionState creates a new mock instance.
|
||||||
|
func NewMockObjectDeletionState(ctrl *gomock.Controller) *MockObjectDeletionState {
|
||||||
|
mock := &MockObjectDeletionState{ctrl: ctrl}
|
||||||
|
mock.recorder = &MockObjectDeletionStateMockRecorder{mock}
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXPECT returns an object that allows the caller to indicate expected use.
|
||||||
|
func (m *MockObjectDeletionState) EXPECT() *MockObjectDeletionStateMockRecorder {
|
||||||
|
return m.recorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add mocks base method.
|
||||||
|
func (m *MockObjectDeletionState) Add(arg0 []string) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "Add", arg0)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add indicates an expected call of Add.
|
||||||
|
func (mr *MockObjectDeletionStateMockRecorder) Add(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Add", reflect.TypeOf((*MockObjectDeletionState)(nil).Add), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddObserver mocks base method.
|
||||||
|
func (m *MockObjectDeletionState) AddObserver(arg0 settingsstate.StateUpdateObserver) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
m.ctrl.Call(m, "AddObserver", arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddObserver indicates an expected call of AddObserver.
|
||||||
|
func (mr *MockObjectDeletionStateMockRecorder) AddObserver(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddObserver", reflect.TypeOf((*MockObjectDeletionState)(nil).AddObserver), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete mocks base method.
|
||||||
|
func (m *MockObjectDeletionState) Delete(arg0 string) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "Delete", arg0)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete indicates an expected call of Delete.
|
||||||
|
func (mr *MockObjectDeletionStateMockRecorder) Delete(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockObjectDeletionState)(nil).Delete), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exists mocks base method.
|
||||||
|
func (m *MockObjectDeletionState) Exists(arg0 string) bool {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "Exists", arg0)
|
||||||
|
ret0, _ := ret[0].(bool)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exists indicates an expected call of Exists.
|
||||||
|
func (mr *MockObjectDeletionStateMockRecorder) Exists(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Exists", reflect.TypeOf((*MockObjectDeletionState)(nil).Exists), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterJoin mocks base method.
|
||||||
|
func (m *MockObjectDeletionState) FilterJoin(arg0 ...[]string) []string {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
varargs := []interface{}{}
|
||||||
|
for _, a := range arg0 {
|
||||||
|
varargs = append(varargs, a)
|
||||||
|
}
|
||||||
|
ret := m.ctrl.Call(m, "FilterJoin", varargs...)
|
||||||
|
ret0, _ := ret[0].([]string)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterJoin indicates an expected call of FilterJoin.
|
||||||
|
func (mr *MockObjectDeletionStateMockRecorder) FilterJoin(arg0 ...interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FilterJoin", reflect.TypeOf((*MockObjectDeletionState)(nil).FilterJoin), arg0...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueued mocks base method.
|
||||||
|
func (m *MockObjectDeletionState) GetQueued() []string {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "GetQueued")
|
||||||
|
ret0, _ := ret[0].([]string)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueued indicates an expected call of GetQueued.
|
||||||
|
func (mr *MockObjectDeletionStateMockRecorder) GetQueued() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetQueued", reflect.TypeOf((*MockObjectDeletionState)(nil).GetQueued))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockStateBuilder is a mock of StateBuilder interface.
|
||||||
|
type MockStateBuilder struct {
|
||||||
|
ctrl *gomock.Controller
|
||||||
|
recorder *MockStateBuilderMockRecorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockStateBuilderMockRecorder is the mock recorder for MockStateBuilder.
|
||||||
|
type MockStateBuilderMockRecorder struct {
|
||||||
|
mock *MockStateBuilder
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewMockStateBuilder creates a new mock instance.
|
||||||
|
func NewMockStateBuilder(ctrl *gomock.Controller) *MockStateBuilder {
|
||||||
|
mock := &MockStateBuilder{ctrl: ctrl}
|
||||||
|
mock.recorder = &MockStateBuilderMockRecorder{mock}
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXPECT returns an object that allows the caller to indicate expected use.
|
||||||
|
func (m *MockStateBuilder) EXPECT() *MockStateBuilderMockRecorder {
|
||||||
|
return m.recorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build mocks base method.
|
||||||
|
func (m *MockStateBuilder) Build(arg0 objecttree.ObjectTree, arg1 *settingsstate.State) (*settingsstate.State, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "Build", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(*settingsstate.State)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build indicates an expected call of Build.
|
||||||
|
func (mr *MockStateBuilderMockRecorder) Build(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Build", reflect.TypeOf((*MockStateBuilder)(nil).Build), arg0, arg1)
|
||||||
|
}
|
||||||
@ -1,13 +1,14 @@
|
|||||||
package settingsstate
|
package settingsstate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/anytypeio/any-sync/commonspace/object/tree/objecttree"
|
"github.com/anytypeio/any-sync/commonspace/object/tree/objecttree"
|
||||||
"github.com/anytypeio/any-sync/commonspace/spacesyncproto"
|
"github.com/anytypeio/any-sync/commonspace/spacesyncproto"
|
||||||
"github.com/gogo/protobuf/proto"
|
"github.com/gogo/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
type StateBuilder interface {
|
type StateBuilder interface {
|
||||||
Build(tree objecttree.ObjectTree, state *State, isUpdate bool) (*State, error)
|
Build(tree objecttree.ObjectTree, state *State) (*State, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewStateBuilder() StateBuilder {
|
func NewStateBuilder() StateBuilder {
|
||||||
@ -17,19 +18,21 @@ func NewStateBuilder() StateBuilder {
|
|||||||
type stateBuilder struct {
|
type stateBuilder struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *stateBuilder) Build(tr objecttree.ObjectTree, oldState *State, isUpdate bool) (state *State, err error) {
|
func (s *stateBuilder) Build(tr objecttree.ObjectTree, oldState *State) (state *State, err error) {
|
||||||
state = oldState
|
|
||||||
|
|
||||||
if !isUpdate || state == nil {
|
|
||||||
state = &State{}
|
|
||||||
}
|
|
||||||
var (
|
var (
|
||||||
rootId = tr.Root().Id
|
rootId = tr.Root().Id
|
||||||
startId = state.LastIteratedId
|
startId = rootId
|
||||||
)
|
)
|
||||||
|
state = oldState
|
||||||
|
if state == nil {
|
||||||
|
state = &State{}
|
||||||
|
} else if state.LastIteratedId != "" {
|
||||||
|
startId = state.LastIteratedId
|
||||||
|
}
|
||||||
|
|
||||||
process := func(change *objecttree.Change) bool {
|
process := func(change *objecttree.Change) bool {
|
||||||
state.LastIteratedId = change.Id
|
|
||||||
state = s.processChange(change, rootId, startId, state)
|
state = s.processChange(change, rootId, startId, state)
|
||||||
|
state.LastIteratedId = change.Id
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
convert := func(decrypted []byte) (res any, err error) {
|
convert := func(decrypted []byte) (res any, err error) {
|
||||||
@ -41,16 +44,13 @@ func (s *stateBuilder) Build(tr objecttree.ObjectTree, oldState *State, isUpdate
|
|||||||
return deleteChange, nil
|
return deleteChange, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if startId == "" {
|
|
||||||
startId = rootId
|
|
||||||
}
|
|
||||||
err = tr.IterateFrom(startId, convert, process)
|
err = tr.IterateFrom(startId, convert, process)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *stateBuilder) processChange(change *objecttree.Change, rootId, startId string, state *State) *State {
|
func (s *stateBuilder) processChange(change *objecttree.Change, rootId, startId string, state *State) *State {
|
||||||
// ignoring root change which has empty model or startId change
|
// ignoring root change which has empty model or startId change
|
||||||
if change.Model == nil || (change.Id == startId && startId != "") {
|
if change.Model == nil || state.LastIteratedId == startId {
|
||||||
return state
|
return state
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,10 +67,12 @@ func (s *stateBuilder) processChange(change *objecttree.Change, rootId, startId
|
|||||||
|
|
||||||
// otherwise getting data from content
|
// otherwise getting data from content
|
||||||
for _, cnt := range deleteChange.Content {
|
for _, cnt := range deleteChange.Content {
|
||||||
|
fmt.Println(cnt.GetSpaceDelete() != nil)
|
||||||
switch {
|
switch {
|
||||||
case cnt.GetObjectDelete() != nil:
|
case cnt.GetObjectDelete() != nil:
|
||||||
state.DeletedIds = append(state.DeletedIds, cnt.GetObjectDelete().GetId())
|
state.DeletedIds = append(state.DeletedIds, cnt.GetObjectDelete().GetId())
|
||||||
case cnt.GetSpaceDelete() != nil:
|
case cnt.GetSpaceDelete() != nil:
|
||||||
|
fmt.Println(cnt.GetSpaceDelete().GetDeleterPeerId())
|
||||||
state.DeleterId = cnt.GetSpaceDelete().GetDeleterPeerId()
|
state.DeleterId = cnt.GetSpaceDelete().GetDeleterPeerId()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
95
commonspace/settings/settingsstate/statebuilder_test.go
Normal file
95
commonspace/settings/settingsstate/statebuilder_test.go
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
package settingsstate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/anytypeio/any-sync/commonspace/object/tree/objecttree"
|
||||||
|
"github.com/anytypeio/any-sync/commonspace/object/tree/objecttree/mock_objecttree"
|
||||||
|
"github.com/anytypeio/any-sync/commonspace/spacesyncproto"
|
||||||
|
"github.com/golang/mock/gomock"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestStateBuilder_ProcessChange(t *testing.T) {
|
||||||
|
sb := &stateBuilder{}
|
||||||
|
rootId := "rootId"
|
||||||
|
deletedId := "deletedId"
|
||||||
|
|
||||||
|
t.Run("empty model", func(t *testing.T) {
|
||||||
|
ch := &objecttree.Change{}
|
||||||
|
startId := "startId"
|
||||||
|
newSt := sb.processChange(ch, rootId, startId, &State{
|
||||||
|
DeletedIds: []string{deletedId},
|
||||||
|
})
|
||||||
|
require.Equal(t, []string{deletedId}, newSt.DeletedIds)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("changeId is equal to startId, LastIteratedId is equal to startId", func(t *testing.T) {
|
||||||
|
ch := &objecttree.Change{}
|
||||||
|
ch.Model = &spacesyncproto.SettingsData{
|
||||||
|
Content: []*spacesyncproto.SpaceSettingsContent{
|
||||||
|
{Value: &spacesyncproto.SpaceSettingsContent_ObjectDelete{
|
||||||
|
ObjectDelete: &spacesyncproto.ObjectDelete{Id: deletedId},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
ch.Id = "startId"
|
||||||
|
startId := "startId"
|
||||||
|
newSt := sb.processChange(ch, rootId, startId, &State{
|
||||||
|
DeletedIds: []string{deletedId},
|
||||||
|
LastIteratedId: startId,
|
||||||
|
})
|
||||||
|
require.Equal(t, []string{deletedId}, newSt.DeletedIds)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("changeId is equal to rootId", func(t *testing.T) {
|
||||||
|
ch := &objecttree.Change{}
|
||||||
|
ch.Model = &spacesyncproto.SettingsData{
|
||||||
|
Snapshot: &spacesyncproto.SpaceSettingsSnapshot{
|
||||||
|
DeletedIds: []string{"id1", "id2"},
|
||||||
|
DeleterPeerId: "peerId",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
ch.Id = "rootId"
|
||||||
|
newSt := sb.processChange(ch, rootId, rootId, &State{})
|
||||||
|
require.Equal(t, []string{"id1", "id2"}, newSt.DeletedIds)
|
||||||
|
require.Equal(t, "peerId", newSt.DeleterId)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("changeId is not equal to lastIteratedId or rootId", func(t *testing.T) {
|
||||||
|
ch := &objecttree.Change{}
|
||||||
|
ch.Model = &spacesyncproto.SettingsData{
|
||||||
|
Content: []*spacesyncproto.SpaceSettingsContent{
|
||||||
|
{Value: &spacesyncproto.SpaceSettingsContent_ObjectDelete{
|
||||||
|
ObjectDelete: &spacesyncproto.ObjectDelete{Id: deletedId},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
ch.Id = "someId"
|
||||||
|
startId := "startId"
|
||||||
|
newSt := sb.processChange(ch, rootId, startId, &State{})
|
||||||
|
require.Equal(t, []string{deletedId}, newSt.DeletedIds)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStateBuilder_Build(t *testing.T) {
|
||||||
|
ctrl := gomock.NewController(t)
|
||||||
|
objTree := mock_objecttree.NewMockObjectTree(ctrl)
|
||||||
|
sb := &stateBuilder{}
|
||||||
|
defer ctrl.Finish()
|
||||||
|
|
||||||
|
t.Run("state is nil", func(t *testing.T) {
|
||||||
|
ch := &objecttree.Change{Id: "rootId"}
|
||||||
|
objTree.EXPECT().Root().Return(ch)
|
||||||
|
objTree.EXPECT().IterateFrom("rootId", gomock.Any(), gomock.Any()).Return(nil)
|
||||||
|
_, err := sb.Build(objTree, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("state is non-empty", func(t *testing.T) {
|
||||||
|
ch := &objecttree.Change{Id: "rootId"}
|
||||||
|
objTree.EXPECT().Root().Return(ch)
|
||||||
|
objTree.EXPECT().IterateFrom("someId", gomock.Any(), gomock.Any()).Return(nil)
|
||||||
|
_, err := sb.Build(objTree, &State{LastIteratedId: "someId"})
|
||||||
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -95,6 +95,21 @@ func (mr *MockSpaceStorageMockRecorder) Id() *gomock.Call {
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Id", reflect.TypeOf((*MockSpaceStorage)(nil).Id))
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Id", reflect.TypeOf((*MockSpaceStorage)(nil).Id))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsSpaceDeleted mocks base method.
|
||||||
|
func (m *MockSpaceStorage) IsSpaceDeleted() (bool, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "IsSpaceDeleted")
|
||||||
|
ret0, _ := ret[0].(bool)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsSpaceDeleted indicates an expected call of IsSpaceDeleted.
|
||||||
|
func (mr *MockSpaceStorageMockRecorder) IsSpaceDeleted() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsSpaceDeleted", reflect.TypeOf((*MockSpaceStorage)(nil).IsSpaceDeleted))
|
||||||
|
}
|
||||||
|
|
||||||
// ReadSpaceHash mocks base method.
|
// ReadSpaceHash mocks base method.
|
||||||
func (m *MockSpaceStorage) ReadSpaceHash() (string, error) {
|
func (m *MockSpaceStorage) ReadSpaceHash() (string, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@ -110,6 +125,20 @@ func (mr *MockSpaceStorageMockRecorder) ReadSpaceHash() *gomock.Call {
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReadSpaceHash", reflect.TypeOf((*MockSpaceStorage)(nil).ReadSpaceHash))
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReadSpaceHash", reflect.TypeOf((*MockSpaceStorage)(nil).ReadSpaceHash))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetSpaceDeleted mocks base method.
|
||||||
|
func (m *MockSpaceStorage) SetSpaceDeleted() error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "SetSpaceDeleted")
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSpaceDeleted indicates an expected call of SetSpaceDeleted.
|
||||||
|
func (mr *MockSpaceStorageMockRecorder) SetSpaceDeleted() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetSpaceDeleted", reflect.TypeOf((*MockSpaceStorage)(nil).SetSpaceDeleted))
|
||||||
|
}
|
||||||
|
|
||||||
// SetTreeDeletedStatus mocks base method.
|
// SetTreeDeletedStatus mocks base method.
|
||||||
func (m *MockSpaceStorage) SetTreeDeletedStatus(arg0, arg1 string) error {
|
func (m *MockSpaceStorage) SetTreeDeletedStatus(arg0, arg1 string) error {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
|||||||
@ -213,6 +213,20 @@ func (mr *MockConfigurationMockRecorder) NodeIds(arg0 interface{}) *gomock.Call
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NodeIds", reflect.TypeOf((*MockConfiguration)(nil).NodeIds), arg0)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NodeIds", reflect.TypeOf((*MockConfiguration)(nil).NodeIds), arg0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NodeTypes mocks base method.
|
||||||
|
func (m *MockConfiguration) NodeTypes(arg0 string) []nodeconf.NodeType {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "NodeTypes", arg0)
|
||||||
|
ret0, _ := ret[0].([]nodeconf.NodeType)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// NodeTypes indicates an expected call of NodeTypes.
|
||||||
|
func (mr *MockConfigurationMockRecorder) NodeTypes(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NodeTypes", reflect.TypeOf((*MockConfiguration)(nil).NodeTypes), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
// Partition mocks base method.
|
// Partition mocks base method.
|
||||||
func (m *MockConfiguration) Partition(arg0 string) int {
|
func (m *MockConfiguration) Partition(arg0 string) int {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user