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", }, }, }, }