package cli import ( "path/filepath" "strings" "testing" ) func TestNormalizeCommandIsRecognized(t *testing.T) { cmd := NewRootCommand() cmd.SetArgs([]string{"normalize", "--help"}) if err := cmd.Execute(); err != nil { t.Fatalf("normalize command should be recognized: %v", err) } } func TestNormalizeMissingInputFileFails(t *testing.T) { dir := t.TempDir() output := filepath.Join(dir, "normalized.json") err := executeNormalize( "--output-file", output, ) if err == nil { t.Fatal("expected missing input-file error") } if !strings.Contains(err.Error(), "--input-file is required") { t.Fatalf("unexpected error: %v", err) } } func TestNormalizeMissingOutputFileFails(t *testing.T) { dir := t.TempDir() input := writeJSONFile(t, dir, "input.json", `{"segments":[]}`) err := executeNormalize( "--input-file", input, ) if err == nil { t.Fatal("expected missing output-file error") } if !strings.Contains(err.Error(), "--output-file is required") { t.Fatalf("unexpected error: %v", err) } } func TestNormalizeInvalidOutputSchemaFails(t *testing.T) { dir := t.TempDir() input := writeJSONFile(t, dir, "input.json", `{"segments":[]}`) output := filepath.Join(dir, "normalized.json") err := executeNormalize( "--input-file", input, "--output-file", output, "--output-schema", "compact", ) if err == nil { t.Fatal("expected invalid output schema error") } if !strings.Contains(err.Error(), "--output-schema must be one of") { t.Fatalf("unexpected error: %v", err) } } func TestNormalizeInvalidOutputModuleFails(t *testing.T) { dir := t.TempDir() input := writeJSONFile(t, dir, "input.json", `{"segments":[]}`) output := filepath.Join(dir, "normalized.json") err := executeNormalize( "--input-file", input, "--output-file", output, "--output-modules", "yaml", ) if err == nil { t.Fatal("expected invalid output module error") } if !strings.Contains(err.Error(), "unknown output module") { t.Fatalf("unexpected error: %v", err) } } func TestNormalizeValidFlagsReachNotImplementedBoundary(t *testing.T) { dir := t.TempDir() input := writeJSONFile(t, dir, "input.json", `{"segments":[]}`) output := filepath.Join(dir, "normalized.json") err := executeNormalize( "--input-file", input, "--output-file", output, ) if err == nil { t.Fatal("expected not implemented error") } if !strings.Contains(err.Error(), "not implemented") { t.Fatalf("unexpected error: %v", err) } } func executeNormalize(args ...string) error { cmd := NewRootCommand() cmd.SetArgs(append([]string{"normalize"}, args...)) return cmd.Execute() }