From 06d68e25ac053c1a189a9790245c6d60fae6bd77 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Tue, 29 Nov 2022 19:37:18 +0100 Subject: [PATCH] Add deletionstate tests --- .../settingsdocument/deleter_test.go | 7 + .../deletionstate/deletionstate_test.go | 127 ++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 common/commonspace/settingsdocument/deleter_test.go create mode 100644 common/commonspace/settingsdocument/deletionstate/deletionstate_test.go diff --git a/common/commonspace/settingsdocument/deleter_test.go b/common/commonspace/settingsdocument/deleter_test.go new file mode 100644 index 00000000..90b9cec4 --- /dev/null +++ b/common/commonspace/settingsdocument/deleter_test.go @@ -0,0 +1,7 @@ +package settingsdocument + +import "testing" + +func TestDeleter_Delete(t *testing.T) { + +} diff --git a/common/commonspace/settingsdocument/deletionstate/deletionstate_test.go b/common/commonspace/settingsdocument/deletionstate/deletionstate_test.go new file mode 100644 index 00000000..d3feeae3 --- /dev/null +++ b/common/commonspace/settingsdocument/deletionstate/deletionstate_test.go @@ -0,0 +1,127 @@ +package deletionstate + +import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage/mock_storage" + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/require" + "testing" +) + +type fixture struct { + ctrl *gomock.Controller + delState *deletionState + spaceStorage *mock_storage.MockSpaceStorage +} + +func newFixture(t *testing.T) *fixture { + ctrl := gomock.NewController(t) + spaceStorage := mock_storage.NewMockSpaceStorage(ctrl) + delState := NewDeletionState(spaceStorage).(*deletionState) + return &fixture{ + ctrl: ctrl, + delState: delState, + spaceStorage: spaceStorage, + } +} + +func (fx *fixture) stop() { + fx.ctrl.Finish() +} + +func TestDeletionState_Add(t *testing.T) { + t.Run("add new", func(t *testing.T) { + fx := newFixture(t) + defer fx.stop() + id := "newId" + fx.spaceStorage.EXPECT().TreeDeletedStatus(id).Return("", nil) + fx.spaceStorage.EXPECT().SetTreeDeletedStatus(id, storage.TreeDeletedStatusQueued).Return(nil) + err := fx.delState.Add([]string{id}) + require.NoError(t, err) + require.Contains(t, fx.delState.queued, id) + }) + + t.Run("add existing queued", func(t *testing.T) { + fx := newFixture(t) + defer fx.stop() + id := "newId" + fx.spaceStorage.EXPECT().TreeDeletedStatus(id).Return(storage.TreeDeletedStatusQueued, nil) + err := fx.delState.Add([]string{id}) + require.NoError(t, err) + require.Contains(t, fx.delState.queued, id) + }) + + t.Run("add existing deleted", func(t *testing.T) { + fx := newFixture(t) + defer fx.stop() + id := "newId" + fx.spaceStorage.EXPECT().TreeDeletedStatus(id).Return(storage.TreeDeletedStatusDeleted, nil) + err := fx.delState.Add([]string{id}) + require.NoError(t, err) + require.Contains(t, fx.delState.deleted, id) + }) +} + +func TestDeletionState_GetQueued(t *testing.T) { + fx := newFixture(t) + defer fx.stop() + + fx.delState.queued["id1"] = struct{}{} + fx.delState.queued["id2"] = struct{}{} + + queued := fx.delState.GetQueued() + require.Equal(t, []string{"id1", "id2"}, queued) +} + +func TestDeletionState_FilterJoin(t *testing.T) { + fx := newFixture(t) + defer fx.stop() + + fx.delState.queued["id1"] = struct{}{} + fx.delState.queued["id2"] = struct{}{} + + filtered := fx.delState.FilterJoin([]string{"id1"}, []string{"id3", "id2"}, []string{"id4"}) + require.Equal(t, []string{"id3", "id4"}, filtered) +} + +func TestDeletionState_AddObserver(t *testing.T) { + fx := newFixture(t) + defer fx.stop() + + var queued []string + + fx.delState.AddObserver(func(ids []string) { + queued = ids + }) + id := "newId" + fx.spaceStorage.EXPECT().TreeDeletedStatus(id).Return("", nil) + fx.spaceStorage.EXPECT().SetTreeDeletedStatus(id, storage.TreeDeletedStatusQueued).Return(nil) + err := fx.delState.Add([]string{id}) + require.NoError(t, err) + require.Contains(t, fx.delState.queued, id) + require.Equal(t, []string{id}, queued) +} + +func TestDeletionState_Delete(t *testing.T) { + fx := newFixture(t) + defer fx.stop() + + id := "deletedId" + fx.delState.queued[id] = struct{}{} + fx.spaceStorage.EXPECT().SetTreeDeletedStatus(id, storage.TreeDeletedStatusDeleted).Return(nil) + err := fx.delState.Delete(id) + require.NoError(t, err) + require.Contains(t, fx.delState.deleted, id) + require.NotContains(t, fx.delState.queued, id) +} + +func TestDeletionState_Exists(t *testing.T) { + fx := newFixture(t) + defer fx.stop() + + fx.delState.queued["id1"] = struct{}{} + fx.delState.deleted["id2"] = struct{}{} + require.True(t, fx.delState.Exists("id1")) + require.True(t, fx.delState.Exists("id2")) + require.False(t, fx.delState.Exists("id3")) +} \ No newline at end of file