package config import ( "os" "path/filepath" "reflect" "testing" ) func writeFile(t *testing.T, path, content string) { t.Helper() if err := os.WriteFile(path, []byte(content), 0o644); err != nil { t.Fatalf("write %s: %v", path, err) } } func TestLoad_PhrasesFileMergesWithInline(t *testing.T) { dir := t.TempDir() writeFile(t, filepath.Join(dir, "phrases.yaml"), "phrases:\n - しょうもな\n - たまげたなあ\n") writeFile(t, filepath.Join(dir, "config.yaml"), ` listen_addr: ":8080" webhook_secret: "s" forgejo: base_url: "http://forgejo:3000" token: "t" phrases_file: "./phrases.yaml" phrases: - 独自の追加語録 `) cfg, err := Load(filepath.Join(dir, "config.yaml")) if err != nil { t.Fatalf("Load() error = %v", err) } want := []string{"しょうもな", "たまげたなあ", "独自の追加語録"} if !reflect.DeepEqual(cfg.Phrases, want) { t.Fatalf("Phrases = %v, want %v", cfg.Phrases, want) } } func TestLoad_MissingPhrasesIsError(t *testing.T) { dir := t.TempDir() writeFile(t, filepath.Join(dir, "config.yaml"), ` webhook_secret: "s" forgejo: base_url: "http://forgejo:3000" token: "t" `) if _, err := Load(filepath.Join(dir, "config.yaml")); err == nil { t.Fatal("Load() error = nil, want error for empty phrases") } }