backstack: fixed unit tests

This commit is contained in:
Leon Mika 2022-08-14 09:46:19 +10:00
parent bdd97f1b41
commit a1c03dcb63
2 changed files with 79 additions and 25 deletions

View file

@ -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()

View file

@ -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