diff options
| author | Paul Buetow <paul@buetow.org> | 2026-07-09 00:14:53 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-07-09 00:14:53 +0300 |
| commit | f4c02fa474cbf7cb286eb143358479e7cbd3f0bd (patch) | |
| tree | 45f91c3aaa17c5cb27a62c769872e67f0f9ec97c /api/options/option_test.go | |
| parent | 756ae621bd97a8b776fefb15e5e7e2292f98ee45 (diff) | |
more testsmain
Diffstat (limited to 'api/options/option_test.go')
| -rw-r--r-- | api/options/option_test.go | 63 |
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) + } +} |
