Files
ThothII/tools/thothctl/internal/workspaceops/operations_test.go
T

51 lines
2.3 KiB
Go

package workspaceops
import (
"reflect"
"testing"
)
func TestParseWorkspaceCommands(t *testing.T) {
cases := []struct {
name string
argv []string
want any
}{
{"inspect", []string{"workspace", "inspect", "--workspace", "psd", "--json"}, InspectCommand{WorkspaceID: "psd", JSON: true}},
{"dwh", []string{"workspace", "preprocess", "dwh", "--workspace", "psd", "--resume", "0123456789abcdef0123456789abcdef"}, DwhRequest{WorkspaceID: "psd", Resume: "0123456789abcdef0123456789abcdef"}},
{"suggest", []string{"workspace", "schema", "suggest-fks", "--workspace", "psd", "--assume", "a=b"}, SuggestFksRequest{WorkspaceID: "psd", Assume: []string{"a=b"}}},
{"check", []string{"workspace", "schema", "check", "--workspace", "psd", "--resume", "0123456789abcdef0123456789abcdef"}, CheckSchemaRequest{WorkspaceID: "psd", Resume: "0123456789abcdef0123456789abcdef"}},
{"index", []string{"workspace", "index-schema", "--workspace", "psd"}, IndexSchemaRequest{WorkspaceID: "psd"}},
{"evidence", []string{"workspace", "preprocess", "evidence", "--workspace", "psd", "--dry-run"}, EvidenceRequest{WorkspaceID: "psd", DryRun: true}},
{"run", []string{"workspace", "preprocess", "run", "--workspace", "psd"}, RunRequest{WorkspaceID: "psd"}},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
got, err := ParseWorkspaceCommand(tc.argv)
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(got, tc.want) {
t.Errorf("got %#v want %#v", got, tc.want)
}
})
}
}
func TestParseWorkspaceRejectsUnsafeOrAmbiguousOptions(t *testing.T) {
bad := [][]string{
{"workspace", "inspect", "--workspace", "psd", "--resume", "0123456789abcdef0123456789abcdef"},
{"workspace", "inspect", "--workspace", "psd", "--bootstrap-run-id", "0123456789abcdef0123456789abcdef"},
{"workspace", "inspect", "--workspace", "psd", "--passthrough"},
{"workspace", "preprocess", "run", "--workspace", "PSd"},
{"workspace", "preprocess", "run", "--workspace", "psd", "--resume", "bad"},
{"workspace", "schema", "check", "--workspace", "psd"},
{"workspace", "schema", "check", "--workspace", "psd", "--resume", "0123456789abcdef0123456789abcdef", "--annotations", "a"},
}
for _, argv := range bad {
if _, err := ParseWorkspaceCommand(argv); err == nil {
t.Errorf("accepted unsafe argv %v", argv)
}
}
}