summaryrefslogtreecommitdiff
path: root/api/options/option_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-07-09 00:14:53 +0300
committerPaul Buetow <paul@buetow.org>2026-07-09 00:14:53 +0300
commitf4c02fa474cbf7cb286eb143358479e7cbd3f0bd (patch)
tree45f91c3aaa17c5cb27a62c769872e67f0f9ec97c /api/options/option_test.go
parent756ae621bd97a8b776fefb15e5e7e2292f98ee45 (diff)
more testsmain
Diffstat (limited to 'api/options/option_test.go')
-rw-r--r--api/options/option_test.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/api/options/option_test.go b/api/options/option_test.go
new file mode 100644
index 0000000..f4d95c7
--- /dev/null
+++ b/api/options/option_test.go
@@ -0,0 +1,63 @@
+package options
+
+import (
+ "reflect"
+ "testing"
+
+ "codeberg.org/snonux/gonf/internal/resource"
+)
+
+// fakeTarget implements the Dependable capability so the DependsOn option can
+// be tested in isolation from the concrete resource packages.
+type fakeTarget struct {
+ deps []string
+}
+
+func (f *fakeTarget) AddDependency(id string) { f.deps = append(f.deps, id) }
+
+func TestDependsOnSingle(t *testing.T) {
+ target := &fakeTarget{}
+
+ dep := resource.Resource{Type: "File", Name: "a"} // ID: File[a]
+ DependsOn(dep)(target)
+
+ want := []string{"File[a]"}
+ if !reflect.DeepEqual(target.deps, want) {
+ t.Errorf("deps = %v, want %v", target.deps, want)
+ }
+}
+
+// TestDependsOnMultiExpands ensures a Multi dependency is expanded so each of
+// its members is recorded individually.
+func TestDependsOnMultiExpands(t *testing.T) {
+ target := &fakeTarget{}
+
+ multi := resource.Multi{
+ resource.Resource{Type: "File", Name: "a"},
+ resource.Resource{Type: "File", Name: "b"},
+ }
+ DependsOn(multi)(target)
+
+ want := []string{"File[a]", "File[b]"}
+ if !reflect.DeepEqual(target.deps, want) {
+ t.Errorf("deps = %v, want %v", target.deps, want)
+ }
+}
+
+// TestDependsOnMixed ensures multiple arguments (single + multi) are all
+// recorded, preserving order.
+func TestDependsOnMixed(t *testing.T) {
+ target := &fakeTarget{}
+
+ single := resource.Resource{Type: "File", Name: "a"}
+ multi := resource.Multi{
+ resource.Resource{Type: "File", Name: "b"},
+ resource.Resource{Type: "File", Name: "c"},
+ }
+ DependsOn(single, multi)(target)
+
+ want := []string{"File[a]", "File[b]", "File[c]"}
+ if !reflect.DeepEqual(target.deps, want) {
+ t.Errorf("deps = %v, want %v", target.deps, want)
+ }
+}