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) } } }