package main import ( "os" "path/filepath" "testing" ) func TestConfigFile(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "site.json") c := newConfigFile(path) steps := []struct { name, json string // json "" means delete the file want string }{ {"missing file", "", "Home"}, {"value set", `{"homeText": "Start"}`, "Start"}, {"field left out", `{}`, "Home"}, {"blank value", `{"homeText": " "}`, "Home"}, {"set again", `{"homeText": "Posts"}`, "Posts"}, {"broken JSON keeps last good", `{"homeText": `, "Posts"}, {"unknown field keeps last good", `{"homeTxt": "Typo"}`, "Posts"}, {"fixed", `{"homeText": "Index page"}`, "Index page"}, {"deleted again", "", "Home"}, } for _, s := range steps { if s.json == "" { os.Remove(path) } else if err := os.WriteFile(path, []byte(s.json), 0o644); err != nil { t.Fatal(err) } if got := c.Get().HomeText; got != s.want { t.Errorf("%s: HomeText = %q, want %q", s.name, got, s.want) } } } func TestDefaultAuthorSetting(t *testing.T) { path := filepath.Join(t.TempDir(), "site.json") c := newConfigFile(path) for _, s := range []struct{ json, want string }{ {"", "Claude"}, {`{"homeText": "Start"}`, "Claude"}, {`{"defaultAuthor": " "}`, "Claude"}, {`{"defaultAuthor": "Someone Else"}`, "Someone Else"}, } { if s.json != "" { if err := os.WriteFile(path, []byte(s.json), 0o644); err != nil { t.Fatal(err) } } if got := c.Get().DefaultAuthor; got != s.want { t.Errorf("site.json %q: DefaultAuthor = %q, want %q", s.json, got, s.want) } } }