From a1c03dcb634c8565734235fad3ad0ef0023dbecf Mon Sep 17 00:00:00 2001 From: Leon Mika Date: Sun, 14 Aug 2022 09:46:19 +1000 Subject: [PATCH] backstack: fixed unit tests --- .../controllers/tableread_test.go | 47 ++++++++++++--- .../controllers/tablewrite_test.go | 57 +++++++++++++------ 2 files changed, 79 insertions(+), 25 deletions(-) diff --git a/internal/dynamo-browse/controllers/tableread_test.go b/internal/dynamo-browse/controllers/tableread_test.go index 3ac1794..e2f3329 100644 --- a/internal/dynamo-browse/controllers/tableread_test.go +++ b/internal/dynamo-browse/controllers/tableread_test.go @@ -4,9 +4,12 @@ import ( "fmt" tea "github.com/charmbracelet/bubbletea" "github.com/lmika/audax/internal/common/ui/events" + "github.com/lmika/audax/internal/common/workspaces" "github.com/lmika/audax/internal/dynamo-browse/controllers" "github.com/lmika/audax/internal/dynamo-browse/providers/dynamo" + "github.com/lmika/audax/internal/dynamo-browse/providers/workspacestore" "github.com/lmika/audax/internal/dynamo-browse/services/tables" + workspaces_service "github.com/lmika/audax/internal/dynamo-browse/services/workspaces" "github.com/lmika/audax/test/testdynamo" "github.com/stretchr/testify/assert" "os" @@ -17,11 +20,14 @@ import ( func TestTableReadController_InitTable(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) + resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) + workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + provider := dynamo.NewProvider(client) service := tables.NewService(provider) t.Run("should prompt for table if no table name provided", func(t *testing.T) { - readController := controllers.NewTableReadController(controllers.NewState(), service, "") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, "") cmd := readController.Init() event := cmd() @@ -30,7 +36,7 @@ func TestTableReadController_InitTable(t *testing.T) { }) t.Run("should scan table if table name provided", func(t *testing.T) { - readController := controllers.NewTableReadController(controllers.NewState(), service, "") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, "") cmd := readController.Init() event := cmd() @@ -42,9 +48,12 @@ func TestTableReadController_InitTable(t *testing.T) { func TestTableReadController_ListTables(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) + resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) + workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + provider := dynamo.NewProvider(client) service := tables.NewService(provider) - readController := controllers.NewTableReadController(controllers.NewState(), service, "") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, "") t.Run("returns a list of tables", func(t *testing.T) { cmd := readController.ListTables() @@ -65,10 +74,13 @@ func TestTableReadController_ListTables(t *testing.T) { func TestTableReadController_Rescan(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) + resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) + workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + provider := dynamo.NewProvider(client) service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "bravo-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "bravo-table") t.Run("should perform a rescan", func(t *testing.T) { invokeCommand(t, readController.Init()) @@ -99,9 +111,12 @@ func TestTableReadController_Rescan(t *testing.T) { func TestTableReadController_ExportCSV(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) + resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) + workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + provider := dynamo.NewProvider(client) service := tables.NewService(provider) - readController := controllers.NewTableReadController(controllers.NewState(), service, "bravo-table") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, "bravo-table") t.Run("should export result set to CSV file", func(t *testing.T) { tempFile := tempFile(t) @@ -122,7 +137,7 @@ func TestTableReadController_ExportCSV(t *testing.T) { t.Run("should return error if result set is not set", func(t *testing.T) { tempFile := tempFile(t) - readController := controllers.NewTableReadController(controllers.NewState(), service, "non-existant-table") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, "non-existant-table") invokeCommandExpectingError(t, readController.Init()) invokeCommandExpectingError(t, readController.ExportCSV(tempFile)) @@ -134,9 +149,12 @@ func TestTableReadController_ExportCSV(t *testing.T) { func TestTableReadController_Query(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) + resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) + workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + provider := dynamo.NewProvider(client) service := tables.NewService(provider) - readController := controllers.NewTableReadController(controllers.NewState(), service, "bravo-table") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, "bravo-table") t.Run("should run scan with filter based on user query", func(t *testing.T) { tempFile := tempFile(t) @@ -156,7 +174,7 @@ func TestTableReadController_Query(t *testing.T) { t.Run("should return error if result set is not set", func(t *testing.T) { tempFile := tempFile(t) - readController := controllers.NewTableReadController(controllers.NewState(), service, "non-existant-table") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, "non-existant-table") invokeCommandExpectingError(t, readController.Init()) invokeCommandExpectingError(t, readController.ExportCSV(tempFile)) @@ -177,6 +195,19 @@ func tempFile(t *testing.T) string { return tempFile.Name() } +func testWorkspace(t *testing.T) *workspaces.Workspace { + wsTempFile := tempFile(t) + + wsManager := workspaces.New(workspaces.MetaInfo{Command: "dynamo-browse"}) + ws, err := wsManager.Open(wsTempFile) + if err != nil { + t.Fatalf("cannot create workspace manager: %v", err) + } + t.Cleanup(func() { ws.Close() }) + + return ws +} + func invokeCommand(t *testing.T, cmd tea.Cmd) tea.Msg { msg := cmd() diff --git a/internal/dynamo-browse/controllers/tablewrite_test.go b/internal/dynamo-browse/controllers/tablewrite_test.go index cf6f1e4..ff29b8c 100644 --- a/internal/dynamo-browse/controllers/tablewrite_test.go +++ b/internal/dynamo-browse/controllers/tablewrite_test.go @@ -6,13 +6,18 @@ import ( "github.com/lmika/audax/internal/dynamo-browse/controllers" "github.com/lmika/audax/internal/dynamo-browse/models" "github.com/lmika/audax/internal/dynamo-browse/providers/dynamo" + "github.com/lmika/audax/internal/dynamo-browse/providers/workspacestore" "github.com/lmika/audax/internal/dynamo-browse/services/tables" + workspaces_service "github.com/lmika/audax/internal/dynamo-browse/services/workspaces" "github.com/lmika/audax/test/testdynamo" "github.com/stretchr/testify/assert" "testing" ) func TestTableWriteController_NewItem(t *testing.T) { + resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) + workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + t.Run("should add an item with pk and sk set at the end of the result set", func(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) @@ -20,7 +25,7 @@ func TestTableWriteController_NewItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -43,6 +48,9 @@ func TestTableWriteController_NewItem(t *testing.T) { } func TestTableWriteController_SetAttributeValue(t *testing.T) { + resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) + workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + t.Run("should preserve the type of the field if unspecified", func(t *testing.T) { scenarios := []struct { @@ -80,7 +88,7 @@ func TestTableWriteController_SetAttributeValue(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -100,7 +108,7 @@ func TestTableWriteController_SetAttributeValue(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -154,7 +162,7 @@ func TestTableWriteController_SetAttributeValue(t *testing.T) { for _, scenario := range scenarios { t.Run(fmt.Sprintf("should change the value of a field to type %v", scenario.attrType), func(t *testing.T) { state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -175,7 +183,7 @@ func TestTableWriteController_SetAttributeValue(t *testing.T) { t.Run(fmt.Sprintf("should change value of nested field to type %v", scenario.attrType), func(t *testing.T) { state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -205,12 +213,15 @@ func TestTableWriteController_SetAttributeValue(t *testing.T) { func TestTableWriteController_DeleteAttribute(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) + resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) + workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + provider := dynamo.NewProvider(client) service := tables.NewService(provider) t.Run("should delete top level attribute", func(t *testing.T) { state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -226,7 +237,7 @@ func TestTableWriteController_DeleteAttribute(t *testing.T) { t.Run("should delete attribute of map", func(t *testing.T) { state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -247,6 +258,9 @@ func TestTableWriteController_DeleteAttribute(t *testing.T) { } func TestTableWriteController_PutItem(t *testing.T) { + resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) + workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + t.Run("should put the selected item if dirty", func(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) @@ -254,7 +268,7 @@ func TestTableWriteController_PutItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table @@ -281,7 +295,7 @@ func TestTableWriteController_PutItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table @@ -312,7 +326,7 @@ func TestTableWriteController_PutItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table @@ -326,6 +340,9 @@ func TestTableWriteController_PutItem(t *testing.T) { } func TestTableWriteController_PutItems(t *testing.T) { + resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) + workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + t.Run("should put all dirty items if none are marked", func(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) @@ -333,7 +350,7 @@ func TestTableWriteController_PutItems(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -361,7 +378,7 @@ func TestTableWriteController_PutItems(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -397,7 +414,7 @@ func TestTableWriteController_PutItems(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -428,6 +445,9 @@ func TestTableWriteController_PutItems(t *testing.T) { } func TestTableWriteController_TouchItem(t *testing.T) { + resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) + workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + t.Run("should put the selected item if unmodified", func(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) @@ -435,7 +455,7 @@ func TestTableWriteController_TouchItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table @@ -461,7 +481,7 @@ func TestTableWriteController_TouchItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table @@ -477,6 +497,9 @@ func TestTableWriteController_TouchItem(t *testing.T) { } func TestTableWriteController_NoisyTouchItem(t *testing.T) { + resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) + workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + t.Run("should delete and put the selected item if unmodified", func(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) @@ -484,7 +507,7 @@ func TestTableWriteController_NoisyTouchItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table @@ -510,7 +533,7 @@ func TestTableWriteController_NoisyTouchItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table