From 407d6cdc247bbf99985d53082864717f92231434 Mon Sep 17 00:00:00 2001 From: ZanzyTHEbar Date: Sun, 22 Feb 2026 23:18:19 +0000 Subject: [PATCH] test(format): enhance JSON rendering to respect quiet mode and add tests for output validation --- internal/opsctl/format/format.go | 3 --- internal/opsctl/format/format_test.go | 20 ++++++++++++++++++++ internal/opsctl/tasks/tasks.go | 2 +- internal/opsctl/tasks/tasks_test.go | 2 ++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/internal/opsctl/format/format.go b/internal/opsctl/format/format.go index b6c21e0ca..59f9fe5a0 100644 --- a/internal/opsctl/format/format.go +++ b/internal/opsctl/format/format.go @@ -61,9 +61,6 @@ func Render(w io.Writer, mode OutputMode, res TaskResult, quiet bool) error { } switch mode { case OutputJSON: - if quiet { - return nil - } enc := json.NewEncoder(w) enc.SetIndent("", " ") return enc.Encode(res) diff --git a/internal/opsctl/format/format_test.go b/internal/opsctl/format/format_test.go index f01e3b600..12e2ba605 100644 --- a/internal/opsctl/format/format_test.go +++ b/internal/opsctl/format/format_test.go @@ -110,3 +110,23 @@ func TestRenderTextHonorsQuietOnlyForSuccess(t *testing.T) { require.Contains(t, buf.String(), "exit=1") require.Contains(t, buf.String(), "error: boom") } + +func TestRenderJSONHonorsQuietOnlyForSuccess(t *testing.T) { + buf := &bytes.Buffer{} + successResult := TaskResult{Task: "run", ExitCode: 0, DurationMS: 1, Success: true, Error: "ok"} + require.NoError(t, Render(buf, OutputJSON, successResult, true)) + require.Equal(t, "", buf.String()) + + buf.Reset() + failureResult := TaskResult{Task: "run", ExitCode: 1, DurationMS: 1, Success: false, Error: "boom", Stderr: "bad"} + require.NoError(t, Render(buf, OutputJSON, failureResult, true)) + require.NotEqual(t, "", buf.String()) + + decoded := TaskResult{} + require.NoError(t, json.NewDecoder(buf).Decode(&decoded)) + require.Equal(t, "run", decoded.Task) + require.Equal(t, "boom", decoded.Error) + require.Equal(t, "bad", decoded.Stderr) + require.Equal(t, 1, decoded.ExitCode) + require.False(t, decoded.Success) +} diff --git a/internal/opsctl/tasks/tasks.go b/internal/opsctl/tasks/tasks.go index 65e97177c..876cce13f 100644 --- a/internal/opsctl/tasks/tasks.go +++ b/internal/opsctl/tasks/tasks.go @@ -486,7 +486,7 @@ func buildAllScript(c *app.Context) string { fmt.Fprintf(&script, "OUTPUT_NAME=%s/%s-%s-%s\n", buildDir, binaryName, targetGOOS, targetGOARCH) script.WriteString("export CGO_ENABLED=1\n") fmt.Fprintf(&script, "GOOS=$GOOS GOARCH=$GOARCH CGO_ENABLED=$CGO_ENABLED $GO build $GOFLAGS %s -o ${OUTPUT_NAME} ./%s\n", ldFlags, cmdDir) - fmt.Fprintf(&script, "ln -sf ./%s %s/%s\n", "${OUTPUT_NAME}", buildDir, binaryName) + fmt.Fprintf(&script, "ln -sf %s-%s-%s %s/%s\n", binaryName, targetGOOS, targetGOARCH, buildDir, binaryName) return script.String() } diff --git a/internal/opsctl/tasks/tasks_test.go b/internal/opsctl/tasks/tasks_test.go index a0f205c1a..806f65440 100644 --- a/internal/opsctl/tasks/tasks_test.go +++ b/internal/opsctl/tasks/tasks_test.go @@ -116,6 +116,8 @@ func TestBuildAllTaskPreservesGoEnvironmentForwarding(t *testing.T) { require.NotContains(t, script, "if [ \"$GOOS\" != \"linux\" ]; then") require.Contains(t, script, "CGO_ENABLED=1") require.NotContains(t, script, "CGO_BUILD=1") + require.Contains(t, script, "ln -sf dragonscale-linux-sparc64 bin/dragonscale") + require.NotContains(t, script, "ln -sf ./bin/dragonscale-linux-sparc64 bin/dragonscale") joinedEnv := strings.Join(fake.Calls[0].Env, " ") require.Contains(t, joinedEnv, "GOOS=linux")