Skip to content

Commit

Permalink
resources/page: Treat null dates as zero dates
Browse files Browse the repository at this point in the history
Closes #12906
  • Loading branch information
jmooring authored and bep committed Oct 6, 2024
1 parent ab03588 commit 3f68309
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 18 deletions.
2 changes: 1 addition & 1 deletion resources/page/pagemeta/page_frontmatter.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
78 changes: 61 additions & 17 deletions resources/page/pagemeta/pagemeta_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}

0 comments on commit 3f68309

Please sign in to comment.