144 lines
4.5 KiB
Go
144 lines
4.5 KiB
Go
|
package cmdpacks_test
|
||
|
|
||
|
import (
|
||
|
"github.com/lmika/dynamo-browse/internal/common/ui/commandctrl"
|
||
|
"github.com/lmika/dynamo-browse/internal/common/ui/commandctrl/cmdpacks"
|
||
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/controllers"
|
||
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/providers/dynamo"
|
||
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/providers/inputhistorystore"
|
||
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/providers/pasteboardprovider"
|
||
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/providers/settingstore"
|
||
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/providers/workspacestore"
|
||
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/services/inputhistory"
|
||
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/services/itemrenderer"
|
||
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/services/jobs"
|
||
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/services/tables"
|
||
|
"github.com/lmika/dynamo-browse/internal/dynamo-browse/services/viewsnapshot"
|
||
|
"github.com/lmika/dynamo-browse/test/testdynamo"
|
||
|
"github.com/lmika/dynamo-browse/test/testworkspace"
|
||
|
bus "github.com/lmika/events"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestStdCmds_Mark(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
descr string
|
||
|
cmd string
|
||
|
wantMarks []bool
|
||
|
}{
|
||
|
{descr: "mark default", cmd: "mark", wantMarks: []bool{true, true, true}},
|
||
|
{descr: "mark all", cmd: "mark all", wantMarks: []bool{true, true, true}},
|
||
|
{descr: "mark none", cmd: "mark none", wantMarks: []bool{false, false, false}},
|
||
|
{descr: "mark where", cmd: `mark -where 'sk="222"'`, wantMarks: []bool{false, true, false}},
|
||
|
{descr: "mark toggle", cmd: "mark ; mark toggle", wantMarks: []bool{false, false, false}},
|
||
|
}
|
||
|
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.descr, func(t *testing.T) {
|
||
|
svc := newService(t)
|
||
|
|
||
|
_, err := svc.CommandController.ExecuteAndWait(t.Context(), tt.cmd)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
for i, want := range tt.wantMarks {
|
||
|
assert.Equal(t, want, svc.State.ResultSet().Marked(i))
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type services struct {
|
||
|
CommandController *commandctrl.CommandController
|
||
|
SelItemIndex int
|
||
|
|
||
|
State *controllers.State
|
||
|
}
|
||
|
|
||
|
func newService(t *testing.T) *services {
|
||
|
ws := testworkspace.New(t)
|
||
|
|
||
|
resultSetSnapshotStore := workspacestore.NewResultSetSnapshotStore(ws)
|
||
|
settingStore := settingstore.New(ws)
|
||
|
inputHistoryStore := inputhistorystore.NewInputHistoryStore(ws)
|
||
|
|
||
|
workspaceService := viewsnapshot.NewService(resultSetSnapshotStore)
|
||
|
itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer())
|
||
|
inputHistoryService := inputhistory.New(inputHistoryStore)
|
||
|
|
||
|
client := testdynamo.SetupTestTable(t, testData)
|
||
|
|
||
|
provider := dynamo.NewProvider(client)
|
||
|
service := tables.NewService(provider, settingStore)
|
||
|
eventBus := bus.New()
|
||
|
|
||
|
state := controllers.NewState()
|
||
|
jobsController := controllers.NewJobsController(jobs.NewService(eventBus), eventBus, true)
|
||
|
readController := controllers.NewTableReadController(
|
||
|
state,
|
||
|
service,
|
||
|
workspaceService,
|
||
|
itemRendererService,
|
||
|
jobsController,
|
||
|
inputHistoryService,
|
||
|
eventBus,
|
||
|
pasteboardprovider.NilProvider{},
|
||
|
nil,
|
||
|
"service-test-data",
|
||
|
)
|
||
|
writeController := controllers.NewTableWriteController(state, service, jobsController, readController, settingStore)
|
||
|
settingsController := controllers.NewSettingsController(settingStore, eventBus)
|
||
|
columnsController := controllers.NewColumnsController(readController, eventBus)
|
||
|
exportController := controllers.NewExportController(state, service, jobsController, columnsController, pasteboardprovider.NilProvider{})
|
||
|
|
||
|
_ = settingsController
|
||
|
commandController := commandctrl.NewCommandController(inputHistoryService,
|
||
|
cmdpacks.StandardCommands{
|
||
|
State: state,
|
||
|
TableService: service,
|
||
|
ReadController: readController,
|
||
|
WriteController: writeController,
|
||
|
ExportController: exportController,
|
||
|
},
|
||
|
)
|
||
|
|
||
|
s := &services{
|
||
|
State: state,
|
||
|
CommandController: commandController,
|
||
|
}
|
||
|
|
||
|
commandController.SetUIStateProvider(s)
|
||
|
readController.Init()
|
||
|
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
func (s *services) SelectedItemIndex() int {
|
||
|
return s.SelItemIndex
|
||
|
}
|
||
|
|
||
|
var testData = []testdynamo.TestData{
|
||
|
{
|
||
|
TableName: "service-test-data",
|
||
|
Data: []map[string]interface{}{
|
||
|
{
|
||
|
"pk": "abc",
|
||
|
"sk": "111",
|
||
|
"alpha": "This is some value",
|
||
|
},
|
||
|
{
|
||
|
"pk": "abc",
|
||
|
"sk": "222",
|
||
|
"alpha": "This is another some value",
|
||
|
"beta": 1231,
|
||
|
},
|
||
|
{
|
||
|
"pk": "bbb",
|
||
|
"sk": "131",
|
||
|
"beta": 2468,
|
||
|
"gamma": "foobar",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|