From f4c02fa474cbf7cb286eb143358479e7cbd3f0bd Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Thu, 9 Jul 2026 00:14:53 +0300 Subject: more tests --- api/options/option_test.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 api/options/option_test.go (limited to 'api/options/option_test.go') 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) + } +} -- cgit v1.2.3