From f6fd264b638e130054eb145fefa98e63f1a2361a Mon Sep 17 00:00:00 2001 From: Valentin Maerten Date: Mon, 8 Dec 2025 22:24:03 +0100 Subject: [PATCH] test(if): add golden fixture tests for if conditions Add comprehensive golden fixture tests for if feature: - Command-level if (true/false) - Task-level if (true/false) - Task calls with if conditions - Go template functions (eq, ne, and, or) - Direct template variable evaluation - CLI variable overrides - For loops with if conditions --- executor_test.go | 62 +++++++++++++++++++ .../if/testdata/TestIf-cmd-if-false.golden | 1 + .../if/testdata/TestIf-cmd-if-true.golden | 1 + .../if/testdata/TestIf-if-in-for-loop.golden | 7 +++ .../testdata/TestIf-task-call-if-false.golden | 5 ++ .../testdata/TestIf-task-call-if-true.golden | 2 + .../if/testdata/TestIf-task-if-false.golden | 1 + .../if/testdata/TestIf-task-if-true.golden | 1 + .../TestIf-task-level-template-false.golden | 1 + .../TestIf-task-level-template.golden | 1 + .../if/testdata/TestIf-template-and.golden | 1 + .../TestIf-template-bool-false.golden | 1 + .../testdata/TestIf-template-bool-true.golden | 1 + .../testdata/TestIf-template-cli-var.golden | 1 + .../TestIf-template-direct-false.golden | 1 + .../TestIf-template-direct-true.golden | 1 + .../testdata/TestIf-template-eq-false.golden | 5 ++ .../testdata/TestIf-template-eq-true.golden | 1 + .../if/testdata/TestIf-template-ne.golden | 1 + .../if/testdata/TestIf-template-or.golden | 1 + 20 files changed, 96 insertions(+) create mode 100644 testdata/if/testdata/TestIf-cmd-if-false.golden create mode 100644 testdata/if/testdata/TestIf-cmd-if-true.golden create mode 100644 testdata/if/testdata/TestIf-if-in-for-loop.golden create mode 100644 testdata/if/testdata/TestIf-task-call-if-false.golden create mode 100644 testdata/if/testdata/TestIf-task-call-if-true.golden create mode 100644 testdata/if/testdata/TestIf-task-if-false.golden create mode 100644 testdata/if/testdata/TestIf-task-if-true.golden create mode 100644 testdata/if/testdata/TestIf-task-level-template-false.golden create mode 100644 testdata/if/testdata/TestIf-task-level-template.golden create mode 100644 testdata/if/testdata/TestIf-template-and.golden create mode 100644 testdata/if/testdata/TestIf-template-bool-false.golden create mode 100644 testdata/if/testdata/TestIf-template-bool-true.golden create mode 100644 testdata/if/testdata/TestIf-template-cli-var.golden create mode 100644 testdata/if/testdata/TestIf-template-direct-false.golden create mode 100644 testdata/if/testdata/TestIf-template-direct-true.golden create mode 100644 testdata/if/testdata/TestIf-template-eq-false.golden create mode 100644 testdata/if/testdata/TestIf-template-eq-true.golden create mode 100644 testdata/if/testdata/TestIf-template-ne.golden create mode 100644 testdata/if/testdata/TestIf-template-or.golden diff --git a/executor_test.go b/executor_test.go index 48a18807..e635e6e1 100644 --- a/executor_test.go +++ b/executor_test.go @@ -1067,3 +1067,65 @@ func TestFailfast(t *testing.T) { ) }) } + +func TestIf(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + task string + vars map[string]any + verbose bool + }{ + // Basic command-level if + {name: "cmd-if-true", task: "cmd-if-true"}, + {name: "cmd-if-false", task: "cmd-if-false"}, + + // Task-level if + {name: "task-if-true", task: "task-if-true"}, + {name: "task-if-false", task: "task-if-false", verbose: true}, + + // Task call with if + {name: "task-call-if-true", task: "task-call-if-true"}, + {name: "task-call-if-false", task: "task-call-if-false", verbose: true}, + + // Go template conditions + {name: "template-eq-true", task: "template-eq-true"}, + {name: "template-eq-false", task: "template-eq-false", verbose: true}, + {name: "template-ne", task: "template-ne"}, + {name: "template-bool-true", task: "template-bool-true"}, + {name: "template-bool-false", task: "template-bool-false"}, + {name: "template-direct-true", task: "template-direct-true"}, + {name: "template-direct-false", task: "template-direct-false"}, + {name: "template-and", task: "template-and"}, + {name: "template-or", task: "template-or"}, + + // CLI variable override + {name: "template-cli-var", task: "template-cli-var", vars: map[string]any{"MY_VAR": "yes"}}, + + // Task-level if with template + {name: "task-level-template", task: "task-level-template"}, + {name: "task-level-template-false", task: "task-level-template-false", verbose: true}, + + // For loop with if + {name: "if-in-for-loop", task: "if-in-for-loop", verbose: true}, + } + + for _, test := range tests { + opts := []ExecutorTestOption{ + WithName(test.name), + WithExecutorOptions( + task.WithDir("testdata/if"), + task.WithSilent(true), + task.WithVerbose(test.verbose), + ), + WithTask(test.task), + } + if test.vars != nil { + for k, v := range test.vars { + opts = append(opts, WithVar(k, v)) + } + } + NewExecutorTest(t, opts...) + } +} diff --git a/testdata/if/testdata/TestIf-cmd-if-false.golden b/testdata/if/testdata/TestIf-cmd-if-false.golden new file mode 100644 index 00000000..56157dc3 --- /dev/null +++ b/testdata/if/testdata/TestIf-cmd-if-false.golden @@ -0,0 +1 @@ +this runs diff --git a/testdata/if/testdata/TestIf-cmd-if-true.golden b/testdata/if/testdata/TestIf-cmd-if-true.golden new file mode 100644 index 00000000..6966f0ad --- /dev/null +++ b/testdata/if/testdata/TestIf-cmd-if-true.golden @@ -0,0 +1 @@ +executed diff --git a/testdata/if/testdata/TestIf-if-in-for-loop.golden b/testdata/if/testdata/TestIf-if-in-for-loop.golden new file mode 100644 index 00000000..73ea6a60 --- /dev/null +++ b/testdata/if/testdata/TestIf-if-in-for-loop.golden @@ -0,0 +1,7 @@ +task: "if-in-for-loop" started +task: [if-in-for-loop] echo "processing a" +processing a +task: [if-in-for-loop] if condition not met - skipped +task: [if-in-for-loop] echo "processing c" +processing c +task: "if-in-for-loop" finished diff --git a/testdata/if/testdata/TestIf-task-call-if-false.golden b/testdata/if/testdata/TestIf-task-call-if-false.golden new file mode 100644 index 00000000..51e65e88 --- /dev/null +++ b/testdata/if/testdata/TestIf-task-call-if-false.golden @@ -0,0 +1,5 @@ +task: "task-call-if-false" started +task: [task-call-if-false] if condition not met - skipped +task: [task-call-if-false] echo "continues after skipped task" +continues after skipped task +task: "task-call-if-false" finished diff --git a/testdata/if/testdata/TestIf-task-call-if-true.golden b/testdata/if/testdata/TestIf-task-call-if-true.golden new file mode 100644 index 00000000..80e46c76 --- /dev/null +++ b/testdata/if/testdata/TestIf-task-call-if-true.golden @@ -0,0 +1,2 @@ +subtask ran +after task call diff --git a/testdata/if/testdata/TestIf-task-if-false.golden b/testdata/if/testdata/TestIf-task-if-false.golden new file mode 100644 index 00000000..d21c985a --- /dev/null +++ b/testdata/if/testdata/TestIf-task-if-false.golden @@ -0,0 +1 @@ +task: "task-if-false" if condition not met - skipped diff --git a/testdata/if/testdata/TestIf-task-if-true.golden b/testdata/if/testdata/TestIf-task-if-true.golden new file mode 100644 index 00000000..f69342ab --- /dev/null +++ b/testdata/if/testdata/TestIf-task-if-true.golden @@ -0,0 +1 @@ +task executed diff --git a/testdata/if/testdata/TestIf-task-level-template-false.golden b/testdata/if/testdata/TestIf-task-level-template-false.golden new file mode 100644 index 00000000..549d157d --- /dev/null +++ b/testdata/if/testdata/TestIf-task-level-template-false.golden @@ -0,0 +1 @@ +task: "task-level-template-false" if condition not met - skipped diff --git a/testdata/if/testdata/TestIf-task-level-template.golden b/testdata/if/testdata/TestIf-task-level-template.golden new file mode 100644 index 00000000..1f2a3643 --- /dev/null +++ b/testdata/if/testdata/TestIf-task-level-template.golden @@ -0,0 +1 @@ +task runs in prod diff --git a/testdata/if/testdata/TestIf-template-and.golden b/testdata/if/testdata/TestIf-template-and.golden new file mode 100644 index 00000000..f2c87fb5 --- /dev/null +++ b/testdata/if/testdata/TestIf-template-and.golden @@ -0,0 +1 @@ +both conditions met diff --git a/testdata/if/testdata/TestIf-template-bool-false.golden b/testdata/if/testdata/TestIf-template-bool-false.golden new file mode 100644 index 00000000..520bca12 --- /dev/null +++ b/testdata/if/testdata/TestIf-template-bool-false.golden @@ -0,0 +1 @@ +feature was disabled diff --git a/testdata/if/testdata/TestIf-template-bool-true.golden b/testdata/if/testdata/TestIf-template-bool-true.golden new file mode 100644 index 00000000..63063af7 --- /dev/null +++ b/testdata/if/testdata/TestIf-template-bool-true.golden @@ -0,0 +1 @@ +feature enabled diff --git a/testdata/if/testdata/TestIf-template-cli-var.golden b/testdata/if/testdata/TestIf-template-cli-var.golden new file mode 100644 index 00000000..5e19287b --- /dev/null +++ b/testdata/if/testdata/TestIf-template-cli-var.golden @@ -0,0 +1 @@ +MY_VAR is yes diff --git a/testdata/if/testdata/TestIf-template-direct-false.golden b/testdata/if/testdata/TestIf-template-direct-false.golden new file mode 100644 index 00000000..aa18cb60 --- /dev/null +++ b/testdata/if/testdata/TestIf-template-direct-false.golden @@ -0,0 +1 @@ +direct false skipped correctly diff --git a/testdata/if/testdata/TestIf-template-direct-true.golden b/testdata/if/testdata/TestIf-template-direct-true.golden new file mode 100644 index 00000000..feaf4490 --- /dev/null +++ b/testdata/if/testdata/TestIf-template-direct-true.golden @@ -0,0 +1 @@ +direct true works diff --git a/testdata/if/testdata/TestIf-template-eq-false.golden b/testdata/if/testdata/TestIf-template-eq-false.golden new file mode 100644 index 00000000..12850e7c --- /dev/null +++ b/testdata/if/testdata/TestIf-template-eq-false.golden @@ -0,0 +1,5 @@ +task: "template-eq-false" started +task: [template-eq-false] if condition not met - skipped +task: [template-eq-false] echo "this runs" +this runs +task: "template-eq-false" finished diff --git a/testdata/if/testdata/TestIf-template-eq-true.golden b/testdata/if/testdata/TestIf-template-eq-true.golden new file mode 100644 index 00000000..bfae5dd6 --- /dev/null +++ b/testdata/if/testdata/TestIf-template-eq-true.golden @@ -0,0 +1 @@ +env is prod diff --git a/testdata/if/testdata/TestIf-template-ne.golden b/testdata/if/testdata/TestIf-template-ne.golden new file mode 100644 index 00000000..10e2e20a --- /dev/null +++ b/testdata/if/testdata/TestIf-template-ne.golden @@ -0,0 +1 @@ +env is not dev diff --git a/testdata/if/testdata/TestIf-template-or.golden b/testdata/if/testdata/TestIf-template-or.golden new file mode 100644 index 00000000..57aca4f7 --- /dev/null +++ b/testdata/if/testdata/TestIf-template-or.golden @@ -0,0 +1 @@ +at least one condition met