diff --git a/internal/dynamo-browse/controllers/tableread_test.go b/internal/dynamo-browse/controllers/tableread_test.go index 9784040..5290118 100644 --- a/internal/dynamo-browse/controllers/tableread_test.go +++ b/internal/dynamo-browse/controllers/tableread_test.go @@ -8,6 +8,7 @@ import ( "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/itemrenderer" "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" @@ -22,12 +23,13 @@ func TestTableReadController_InitTable(t *testing.T) { resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) 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, workspaceService, "") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, itemRendererService, "") event := readController.Init() @@ -35,7 +37,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, workspaceService, "") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, itemRendererService, "") event := readController.Init() @@ -48,10 +50,11 @@ func TestTableReadController_ListTables(t *testing.T) { resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) provider := dynamo.NewProvider(client) service := tables.NewService(provider) - readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, "") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, itemRendererService, "") t.Run("returns a list of tables", func(t *testing.T) { event := readController.ListTables().(controllers.PromptForTableMsg) @@ -72,11 +75,12 @@ func TestTableReadController_Rescan(t *testing.T) { resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) provider := dynamo.NewProvider(client) service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "bravo-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "bravo-table") t.Run("should perform a rescan", func(t *testing.T) { invokeCommand(t, readController.Init()) @@ -109,10 +113,11 @@ func TestTableReadController_ExportCSV(t *testing.T) { resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) provider := dynamo.NewProvider(client) service := tables.NewService(provider) - readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, "bravo-table") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, itemRendererService, "bravo-table") t.Run("should export result set to CSV file", func(t *testing.T) { tempFile := tempFile(t) @@ -133,7 +138,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, workspaceService, "non-existant-table") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, itemRendererService, "non-existant-table") invokeCommandExpectingError(t, readController.Init()) invokeCommandExpectingError(t, readController.ExportCSV(tempFile)) @@ -147,10 +152,11 @@ func TestTableReadController_Query(t *testing.T) { resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) provider := dynamo.NewProvider(client) service := tables.NewService(provider) - readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, "bravo-table") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, itemRendererService, "bravo-table") t.Run("should run scan with filter based on user query", func(t *testing.T) { tempFile := tempFile(t) @@ -170,7 +176,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, workspaceService, "non-existant-table") + readController := controllers.NewTableReadController(controllers.NewState(), service, workspaceService, itemRendererService, "non-existant-table") invokeCommandExpectingError(t, readController.Init()) invokeCommandExpectingError(t, readController.ExportCSV(tempFile)) diff --git a/internal/dynamo-browse/controllers/tablewrite_test.go b/internal/dynamo-browse/controllers/tablewrite_test.go index ff29b8c..e457a84 100644 --- a/internal/dynamo-browse/controllers/tablewrite_test.go +++ b/internal/dynamo-browse/controllers/tablewrite_test.go @@ -7,6 +7,7 @@ import ( "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/itemrenderer" "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" @@ -17,6 +18,7 @@ import ( func TestTableWriteController_NewItem(t *testing.T) { resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) 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) @@ -25,7 +27,7 @@ func TestTableWriteController_NewItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -50,6 +52,7 @@ func TestTableWriteController_NewItem(t *testing.T) { func TestTableWriteController_SetAttributeValue(t *testing.T) { resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) t.Run("should preserve the type of the field if unspecified", func(t *testing.T) { @@ -88,7 +91,7 @@ func TestTableWriteController_SetAttributeValue(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -108,7 +111,7 @@ func TestTableWriteController_SetAttributeValue(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -162,7 +165,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, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -183,7 +186,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, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -215,13 +218,14 @@ func TestTableWriteController_DeleteAttribute(t *testing.T) { resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) 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, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -237,7 +241,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, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -260,6 +264,7 @@ func TestTableWriteController_DeleteAttribute(t *testing.T) { func TestTableWriteController_PutItem(t *testing.T) { resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) t.Run("should put the selected item if dirty", func(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) @@ -268,7 +273,7 @@ func TestTableWriteController_PutItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table @@ -295,7 +300,7 @@ func TestTableWriteController_PutItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table @@ -326,7 +331,7 @@ func TestTableWriteController_PutItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table @@ -342,6 +347,7 @@ func TestTableWriteController_PutItem(t *testing.T) { func TestTableWriteController_PutItems(t *testing.T) { resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) t.Run("should put all dirty items if none are marked", func(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) @@ -350,7 +356,7 @@ func TestTableWriteController_PutItems(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -378,7 +384,7 @@ func TestTableWriteController_PutItems(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -414,7 +420,7 @@ func TestTableWriteController_PutItems(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) invokeCommand(t, readController.Init()) @@ -447,6 +453,7 @@ func TestTableWriteController_PutItems(t *testing.T) { func TestTableWriteController_TouchItem(t *testing.T) { resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) t.Run("should put the selected item if unmodified", func(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) @@ -455,7 +462,7 @@ func TestTableWriteController_TouchItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table @@ -481,7 +488,7 @@ func TestTableWriteController_TouchItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table @@ -499,6 +506,7 @@ func TestTableWriteController_TouchItem(t *testing.T) { func TestTableWriteController_NoisyTouchItem(t *testing.T) { resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(testWorkspace(t)) workspaceService := workspaces_service.NewService(resultSetSnapshotStore) + itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) t.Run("should delete and put the selected item if unmodified", func(t *testing.T) { client := testdynamo.SetupTestTable(t, testData) @@ -507,7 +515,7 @@ func TestTableWriteController_NoisyTouchItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table @@ -533,7 +541,7 @@ func TestTableWriteController_NoisyTouchItem(t *testing.T) { service := tables.NewService(provider) state := controllers.NewState() - readController := controllers.NewTableReadController(state, service, workspaceService, "alpha-table") + readController := controllers.NewTableReadController(state, service, workspaceService, itemRendererService, "alpha-table") writeController := controllers.NewTableWriteController(state, service, readController) // Read the table diff --git a/internal/dynamo-browse/services/itemrenderer/stylerenderer.go b/internal/dynamo-browse/services/itemrenderer/stylerenderer.go index 04ea766..3092f68 100644 --- a/internal/dynamo-browse/services/itemrenderer/stylerenderer.go +++ b/internal/dynamo-browse/services/itemrenderer/stylerenderer.go @@ -4,6 +4,10 @@ type StyleRenderer interface { Render(str string) string } +func PlainTextRenderer() StyleRenderer { + return plainTextStyleRenderer{} +} + type plainTextStyleRenderer struct{} func (plainTextStyleRenderer) Render(str string) string {