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) } } }