Fix panic when theme has permalinks config

Fixes #8724
This commit is contained in:
Bjørn Erik Pedersen 2021-07-03 10:40:59 +02:00
parent b4d60b3db1
commit e451b984cf
2 changed files with 44 additions and 5 deletions

View file

@ -255,9 +255,9 @@ func (l configLoader) applyConfigDefaults() error {
"relativeURLs": false, "relativeURLs": false,
"removePathAccents": false, "removePathAccents": false,
"titleCaseStyle": "AP", "titleCaseStyle": "AP",
"taxonomies": map[string]string{"tag": "tags", "category": "categories"}, "taxonomies": maps.Params{"tag": "tags", "category": "categories"},
"permalinks": make(map[string]string), "permalinks": maps.Params{},
"sitemap": config.Sitemap{Priority: -1, Filename: "sitemap.xml"}, "sitemap": maps.Params{"priority": -1, "filename": "sitemap.xml"},
"disableLiveReload": false, "disableLiveReload": false,
"pluralizeListTitles": true, "pluralizeListTitles": true,
"forceSyncStatic": false, "forceSyncStatic": false,

View file

@ -185,7 +185,7 @@ name = "menu-theme"
` `
buildForConfig := func(mainConfig, themeConfig string) *sitesBuilder { buildForConfig := func(t testing.TB, mainConfig, themeConfig string) *sitesBuilder {
b := newTestSitesBuilder(t) b := newTestSitesBuilder(t)
b.WithConfigFile("toml", mainConfig).WithThemeConfigFile("toml", themeConfig) b.WithConfigFile("toml", mainConfig).WithThemeConfigFile("toml", themeConfig)
return b.Build(BuildCfg{}) return b.Build(BuildCfg{})
@ -193,7 +193,7 @@ name = "menu-theme"
buildForStrategy := func(t testing.TB, s string) *sitesBuilder { buildForStrategy := func(t testing.TB, s string) *sitesBuilder {
mainConfig := strings.ReplaceAll(mainConfigTemplate, "MERGE_PARAMS", s) mainConfig := strings.ReplaceAll(mainConfigTemplate, "MERGE_PARAMS", s)
return buildForConfig(mainConfig, themeConfig) return buildForConfig(t, mainConfig, themeConfig)
} }
c.Run("Merge default", func(c *qt.C) { c.Run("Merge default", func(c *qt.C) {
@ -322,6 +322,7 @@ name = "menu-theme"
c.Run("Merge no params in project", func(c *qt.C) { c.Run("Merge no params in project", func(c *qt.C) {
b := buildForConfig( b := buildForConfig(
c,
"baseURL=\"https://example.org\"\ntheme = \"test-theme\"\n", "baseURL=\"https://example.org\"\ntheme = \"test-theme\"\n",
"[params]\np1 = \"p1 theme\"\n", "[params]\np1 = \"p1 theme\"\n",
) )
@ -335,6 +336,7 @@ name = "menu-theme"
c.Run("Merge language no menus or params in project", func(c *qt.C) { c.Run("Merge language no menus or params in project", func(c *qt.C) {
b := buildForConfig( b := buildForConfig(
c,
` `
theme = "test-theme" theme = "test-theme"
baseURL = "https://example.com/" baseURL = "https://example.com/"
@ -378,6 +380,43 @@ name = "menu-theme"
) )
}) })
// Issue #8724
for _, mergeStrategy := range []string{"none", "shallow"} {
c.Run(fmt.Sprintf("Merge with sitemap config in theme, mergestrategy %s", mergeStrategy), func(c *qt.C) {
smapConfigTempl := `[sitemap]
changefreq = %q
filename = "sitemap.xml"
priority = 0.5`
b := buildForConfig(
c,
fmt.Sprintf("_merge=%q\nbaseURL=\"https://example.org\"\ntheme = \"test-theme\"\n", mergeStrategy),
"baseURL=\"http://example.com\"\n"+fmt.Sprintf(smapConfigTempl, "monthly"),
)
got := b.Cfg.Get("").(maps.Params)
if mergeStrategy == "none" {
b.Assert(got["sitemap"], qt.DeepEquals, maps.Params{
"priority": int(-1),
"filename": "sitemap.xml",
})
b.AssertFileContent("public/sitemap.xml", "schemas/sitemap")
} else {
b.Assert(got["sitemap"], qt.DeepEquals, maps.Params{
"priority": int(-1),
"filename": "sitemap.xml",
"changefreq": "monthly",
})
b.AssertFileContent("public/sitemap.xml", "<changefreq>monthly</changefreq>")
}
})
}
} }
func TestLoadConfigFromThemeDir(t *testing.T) { func TestLoadConfigFromThemeDir(t *testing.T) {