From 3f6830914837f6a0c253cb104ac8b091a2080acc Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Sun, 6 Oct 2024 11:02:19 -0700 Subject: [PATCH] resources/page: Treat null dates as zero dates Closes #12906 --- resources/page/pagemeta/page_frontmatter.go | 2 +- .../pagemeta/pagemeta_integration_test.go | 78 +++++++++++++++---- 2 files changed, 62 insertions(+), 18 deletions(-) diff --git a/resources/page/pagemeta/page_frontmatter.go b/resources/page/pagemeta/page_frontmatter.go index 686f0d44d71..d5d61260981 100644 --- a/resources/page/pagemeta/page_frontmatter.go +++ b/resources/page/pagemeta/page_frontmatter.go @@ -728,7 +728,7 @@ func (f *frontmatterFieldHandlers) newDateFieldHandler(key string, setter func(d return func(d *FrontMatterDescriptor) (bool, error) { v, found := d.PageConfig.Params[key] - if !found || v == "" { + if !found || v == "" || v == nil { return false, nil } diff --git a/resources/page/pagemeta/pagemeta_integration_test.go b/resources/page/pagemeta/pagemeta_integration_test.go index 9d8f1b92f28..d0c550b2e1b 100644 --- a/resources/page/pagemeta/pagemeta_integration_test.go +++ b/resources/page/pagemeta/pagemeta_integration_test.go @@ -52,47 +52,91 @@ func TestDateValidation(t *testing.T) { -- hugo.toml -- disableKinds = ['page','rss','section','sitemap','taxonomy','term'] -- content/_index.md -- -+++ -date = DATE -+++ +FRONT_MATTER -- layouts/index.html -- {{ .Date.UTC.Format "2006-01-02" }} -- ` errorMsg := `ERROR the "date" front matter field is not a parsable date` - // Valid (TOML) - f := strings.ReplaceAll(files, "DATE", "2024-10-01") + // TOML: unquoted date/time (valid) + f := strings.ReplaceAll(files, "FRONT_MATTER", ` ++++ +date = 2024-10-01 ++++ + `) b := hugolib.Test(t, f) b.AssertFileContent("public/index.html", "2024-10-01") - // Valid (string) - f = strings.ReplaceAll(files, "DATE", `"2024-10-01"`) + // TOML: string (valid) + f = strings.ReplaceAll(files, "FRONT_MATTER", ` ++++ +date = "2024-10-01" ++++ + `) b = hugolib.Test(t, f) b.AssertFileContent("public/index.html", "2024-10-01") - // Valid (empty string) - f = strings.ReplaceAll(files, "DATE", `""`) + // TOML: empty string (valid) + f = strings.ReplaceAll(files, "FRONT_MATTER", ` ++++ +date = "" ++++ + `) b = hugolib.Test(t, f) b.AssertFileContent("public/index.html", "0001-01-01") - // Valid (int) - f = strings.ReplaceAll(files, "DATE", "0") + // TOML: int (valid) + f = strings.ReplaceAll(files, "FRONT_MATTER", ` ++++ +date = 0 ++++ + `) b = hugolib.Test(t, f) b.AssertFileContent("public/index.html", "1970-01-01") - // Invalid (string) - f = strings.ReplaceAll(files, "DATE", `"2024-42-42"`) + // TOML: string (invalid) + f = strings.ReplaceAll(files, "FRONT_MATTER", ` ++++ +date = "2024-42-42" ++++ + `) b, _ = hugolib.TestE(t, f) b.AssertLogContains(errorMsg) - // Invalid (bool) - f = strings.ReplaceAll(files, "DATE", "true") + // TOML: bool (invalid) + f = strings.ReplaceAll(files, "FRONT_MATTER", ` ++++ +date = true ++++ + `) b, _ = hugolib.TestE(t, f) b.AssertLogContains(errorMsg) - // Invalid (float) - f = strings.ReplaceAll(files, "DATE", "6.7") + // TOML: float (invalid) + f = strings.ReplaceAll(files, "FRONT_MATTER", ` ++++ +date = 6.7 ++++ + `) b, _ = hugolib.TestE(t, f) b.AssertLogContains(errorMsg) + + // JSON: null (valid) + f = strings.ReplaceAll(files, "FRONT_MATTER", ` +{ + "date": null +} + `) + b = hugolib.Test(t, f) + b.AssertFileContent("public/index.html", "0001-01-01") + + // YAML: null (valid) + f = strings.ReplaceAll(files, "FRONT_MATTER", ` +--- +date: +--- + `) + b = hugolib.Test(t, f) + b.AssertFileContent("public/index.html", "0001-01-01") }