diff --git a/pkg/cli/fix_command.go b/pkg/cli/fix_command.go index 73dd800b722..61d77507378 100644 --- a/pkg/cli/fix_command.go +++ b/pkg/cli/fix_command.go @@ -328,7 +328,7 @@ func processWorkflowFileWithInfo(filePath string, codemods []Codemod, write bool return false, nil, fmt.Errorf("failed to scaffold shared Serena workflow: %w", err) } - fmt.Fprintf(os.Stderr, "%s\n", console.FormatSuccessMessage("✓ "+fileName)) + fmt.Fprintf(os.Stderr, "%s\n", console.FormatSuccessMessage(fileName)) for _, codemodName := range appliedCodemods { fmt.Fprintf(os.Stderr, " • %s\n", codemodName) } diff --git a/pkg/cli/fix_command_test.go b/pkg/cli/fix_command_test.go index a328ea741ee..e148898ca08 100644 --- a/pkg/cli/fix_command_test.go +++ b/pkg/cli/fix_command_test.go @@ -3,6 +3,7 @@ package cli import ( + "io" "os" "os/exec" "path/filepath" @@ -24,6 +25,37 @@ func getCodemodByID(id string) *Codemod { return nil } +func TestProcessWorkflowFileWithInfo_WriteOutputUsesSingleCheckmark(t *testing.T) { + tmpDir := t.TempDir() + workflowFile := filepath.Join(tmpDir, "test-workflow.md") + + content := `--- +timeout_minutes: 30 +---` + require.NoError(t, os.WriteFile(workflowFile, []byte(content), 0644)) + + timeoutCodemod := getCodemodByID("timeout-minutes-migration") + require.NotNil(t, timeoutCodemod) + + originalStderr := os.Stderr + r, w, err := os.Pipe() + require.NoError(t, err) + os.Stderr = w + t.Cleanup(func() { os.Stderr = originalStderr }) + + fixed, _, err := processWorkflowFileWithInfo(workflowFile, []Codemod{*timeoutCodemod}, true, false) + require.NoError(t, err) + require.True(t, fixed) + + require.NoError(t, w.Close()) + outputBytes, err := io.ReadAll(r) + require.NoError(t, err) + output := string(outputBytes) + + assert.Contains(t, output, "✓ test-workflow.md") + assert.NotContains(t, output, "✓ ✓ test-workflow.md") +} + func TestFixCommand_TimeoutMinutesMigration(t *testing.T) { // Create a temporary directory for test files tmpDir := t.TempDir()