hugolib: Fix output formats override when no outputs definition given

A common use case for this is to redefine the built-in output format `RSS` to give it a different URL.

Before this commit, that was not possible without also providing an `outputs` definition.

Fixes #3447
This commit is contained in:
Bjørn Erik Pedersen
2017-05-17 18:04:07 +03:00
parent 94b5be67fc
commit 6e2f2dd8d3
2 changed files with 64 additions and 8 deletions

View File

@@ -31,7 +31,7 @@ import (
func TestDefaultOutputFormats(t *testing.T) {
t.Parallel()
defs, err := createDefaultOutputFormats(viper.New())
defs, err := createDefaultOutputFormats(output.DefaultFormats, viper.New())
require.NoError(t, err)
@@ -53,6 +53,30 @@ func TestDefaultOutputFormats(t *testing.T) {
}
}
func TestDefaultOutputFormatsWithOverrides(t *testing.T) {
t.Parallel()
htmlOut := output.HTMLFormat
htmlOut.BaseName = "htmlindex"
rssOut := output.RSSFormat
rssOut.BaseName = "feed"
defs, err := createDefaultOutputFormats(output.Formats{htmlOut, rssOut}, viper.New())
homeDefs := defs[KindHome]
rss, found := homeDefs.GetByName("RSS")
require.True(t, found)
require.Equal(t, rss.BaseName, "feed")
html, found := homeDefs.GetByName("HTML")
require.True(t, found)
require.Equal(t, html.BaseName, "htmlindex")
require.NoError(t, err)
}
func TestSiteWithPageOutputs(t *testing.T) {
for _, outputs := range [][]string{{"html", "json", "calendar"}, {"json"}} {
t.Run(fmt.Sprintf("%v", outputs), func(t *testing.T) {
@@ -231,3 +255,33 @@ Content: {{ .Content }}
}
}
// Issue #3447
func TestRedefineRSSOutputFormat(t *testing.T) {
siteConfig := `
baseURL = "http://example.com/blog"
paginate = 1
defaultContentLanguage = "en"
disableKinds = ["page", "section", "taxonomy", "taxonomyTerm", "sitemap", "robotsTXT", "404"]
[outputFormats]
[outputFormats.RSS]
mediatype = "application/rss"
baseName = "feed"
`
mf := afero.NewMemMapFs()
writeToFs(t, mf, "content/foo.html", `foo`)
th, h := newTestSitesFromConfig(t, mf, siteConfig)
err := h.Build(BuildCfg{})
require.NoError(t, err)
th.assertFileContent("public/feed.xml", "Recent content on")
}