package consumers_test import ( "fmt" "os" "path/filepath" "testing" configkit "go.maximumdirect.net/configkit" "go.maximumdirect.net/configkit/examples/consumers" ) func Example_mainRelativeCompanions() { result, err := consumers.LoadCompanionConfig(fixture("main-relative", "main.yml"), "live") if err != nil { fmt.Println(err) return } fmt.Println(result.Config.Mode, result.Config.Prompts) // Output: overlay [{shared operator replacement } {bundled bundled text } {local local text transitive detail}] } func TestMainRelativeStrictPeers(t *testing.T) { root := t.TempDir() for name, contents := range map[string]string{ "main.yml": "mode: main\n", "prompts.yml": "id: duplicate\ntext: first\n", "operator/second.yml": "id: duplicate\ntext: second\n", } { file := filepath.Join(root, name) if err := os.MkdirAll(filepath.Dir(file), 0700); err != nil { t.Fatal(err) } if err := os.WriteFile(file, []byte(contents), 0600); err != nil { t.Fatal(err) } } _, err := consumers.LoadCompanionConfig(filepath.Join(root, "main.yml"), "") if err == nil { t.Fatal("duplicate peer identities succeeded") } for _, d := range err.(*configkit.LoadError).Diagnostics() { if d.Code == configkit.CodeComposeConflict { return } } t.Fatalf("diagnostics = %#v", err.(*configkit.LoadError).Diagnostics()) } func TestMainRelativeOptionalResources(t *testing.T) { for _, tc := range []struct { name string file, directory, empty bool count int }{ {"neither", false, false, false, 2}, {"file", true, false, false, 3}, {"directory", false, true, false, 3}, {"both", true, true, false, 4}, {"empty directory", false, false, true, 2}, } { t.Run(tc.name, func(t *testing.T) { root := t.TempDir() if err := os.WriteFile(filepath.Join(root, "main.yml"), []byte("mode: main\n"), 0600); err != nil { t.Fatal(err) } if tc.file { if err := os.WriteFile(filepath.Join(root, "prompts.yml"), []byte("id: file\ntext: file\n"), 0600); err != nil { t.Fatal(err) } } if tc.directory || tc.empty { if err := os.Mkdir(filepath.Join(root, "operator"), 0700); err != nil { t.Fatal(err) } } if tc.directory { if err := os.WriteFile(filepath.Join(root, "operator", "item.yaml"), []byte("id: directory\ntext: directory\n"), 0600); err != nil { t.Fatal(err) } } result, err := consumers.LoadCompanionConfig(filepath.Join(root, "main.yml"), "") if err != nil { t.Fatalf("%v: %#v", err, err.(*configkit.LoadError).Diagnostics()) } if len(result.Config.Prompts) != tc.count { t.Fatalf("prompts = %#v", result.Config.Prompts) } }) } }