diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go index 78ce20b7a..74aa94ede 100644 --- a/hugolib/hugo_sites.go +++ b/hugolib/hugo_sites.go @@ -321,9 +321,9 @@ func (h *HugoSites) createMissingPages() error { taxonomyTermsPages := s.findPagesByKind(KindTaxonomyTerm) for _, plural := range taxonomies { tax := s.Taxonomies[plural] - foundTaxonomyPage := false foundTaxonomyTermsPage := false for key := range tax { + foundTaxonomyPage := false if s.Info.preserveTaxonomyNames { key = s.PathSpec.MakePathSanitized(key) } diff --git a/hugolib/taxonomy_test.go b/hugolib/taxonomy_test.go index f5abe2af0..9ef23279d 100644 --- a/hugolib/taxonomy_test.go +++ b/hugolib/taxonomy_test.go @@ -14,11 +14,16 @@ package hugolib import ( + "fmt" "path/filepath" "reflect" "testing" + "github.com/spf13/afero" + "github.com/stretchr/testify/require" + "github.com/spf13/hugo/deps" + "github.com/spf13/hugo/hugofs" ) func TestByCountOrderOfTaxonomies(t *testing.T) { @@ -45,3 +50,80 @@ func TestByCountOrderOfTaxonomies(t *testing.T) { t.Fatalf("ordered taxonomies do not match [a, b, c]. Got: %s", st) } } + +// Issue #2992 +func TestTaxonomiesWithAndWithoutContentFile(t *testing.T) { + t.Parallel() + + siteConfig := ` +baseURL = "http://example.com/blog" + +paginate = 1 +defaultContentLanguage = "en" + +[Taxonomies] +tag = "tags" +category = "categories" +other = "others" +` + + pageTemplate := `--- +title: "%s" +tags: +%s +categories: +%s +others: +%s +--- +# Doc +` + + mf := afero.NewMemMapFs() + + writeToFs(t, mf, "config.toml", siteConfig) + + cfg, err := LoadConfig(mf, "", "config.toml") + require.NoError(t, err) + + fs := hugofs.NewFrom(mf, cfg) + th := testHelper{cfg, fs, t} + + writeSource(t, fs, "layouts/_default/single.html", "Single|{{ .Title }}|{{ .Content }}") + writeSource(t, fs, "layouts/_default/list.html", "List|{{ .Title }}|{{ .Content }}") + writeSource(t, fs, "layouts/_default/terms.html", "Terms List|{{ .Title }}|{{ .Content }}") + + writeSource(t, fs, "content/p1.md", fmt.Sprintf(pageTemplate, "t1/c1", "- tag1", "- cat1", "- o1")) + writeSource(t, fs, "content/p2.md", fmt.Sprintf(pageTemplate, "t2/c1", "- tag2", "- cat1", "- o1")) + + writeNewContentFile(t, fs, "Category Terms", "2017-01-01", "content/categories/_index.md", 10) + writeNewContentFile(t, fs, "Tag1 List", "2017-01-01", "content/tags/tag1/_index.md", 10) + + h, err := NewHugoSites(deps.DepsCfg{Fs: fs, Cfg: cfg}) + + require.NoError(t, err) + require.Len(t, h.Sites, 1) + + err = h.Build(BuildCfg{}) + + require.NoError(t, err) + + // So what we have now is: + // 1. categories with terms content page, but no content page for the only c1 category + // 2. tags with no terms content page, but content page for one of 2 tags (tag1) + // 3. the "others" taxonomy with no content pages. + + // 1. + th.assertFileContent("public/categories/cat1/index.html", "List", "Cat1") + th.assertFileContent("public/categories/index.html", "Terms List", "Category Terms") + + // 2. + th.assertFileContent("public/tags/tag2/index.html", "List", "Tag2") + th.assertFileContent("public/tags/tag1/index.html", "List", "Tag1") + th.assertFileContent("public/tags/index.html", "Terms List", "Tags") + + // 3. + th.assertFileContent("public/others/o1/index.html", "List", "O1") + th.assertFileContent("public/others/index.html", "Terms List", "Others") + +}