Make sure Date and PublishDate is always set to a value if one is available
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 13 Oct 2017 08:21:28 +0000 (10:21 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 13 Oct 2017 11:18:23 +0000 (13:18 +0200)
Fixes #3854

hugolib/page.go
hugolib/page_test.go
hugolib/site_test.go

index 306d3373496b4e25a57bec1004739e2b608fe8f7..331a217d916356930fc50243e835ab3e869d44bd 100644 (file)
@@ -1147,6 +1147,14 @@ func (p *Page) update(f interface{}) error {
        }
        p.Params["draft"] = p.Draft
 
+       if p.Date.IsZero() {
+               p.Date = p.PublishDate
+       }
+
+       if p.PublishDate.IsZero() {
+               p.PublishDate = p.Date
+       }
+
        if p.Date.IsZero() && p.s.Cfg.GetBool("useModTimeAsFallback") {
                fi, err := p.s.Fs.Source.Stat(filepath.Join(p.s.PathSpec.AbsPathify(p.s.Cfg.GetString("contentDir")), p.File.Path()))
                if err == nil {
index 7723c02c4431379b2ff4f2f4ada30976c43e3598..4e369e24114e3480e2003072e8ec967a15e0e48e 100644 (file)
@@ -714,6 +714,42 @@ func TestPageWithDelimiterForMarkdownThatCrossesBorder(t *testing.T) {
        }
 }
 
+// Issue #3854
+func TestPageWithDateFields(t *testing.T) {
+       assert := require.New(t)
+       pageWithDate := `---
+title: P%d
+weight: %d
+%s: 2017-10-13
+---
+Simple Page With Some Date`
+
+       hasBothDates := func(p *Page) bool {
+               return p.Date.Year() == 2017 && p.PublishDate.Year() == 2017
+       }
+
+       datePage := func(field string, weight int) string {
+               return fmt.Sprintf(pageWithDate, weight, weight, field)
+       }
+
+       t.Parallel()
+       assertFunc := func(t *testing.T, ext string, pages Pages) {
+               assert.True(len(pages) > 0)
+               for _, p := range pages {
+                       assert.True(hasBothDates(p))
+               }
+
+       }
+
+       fields := []string{"date", "publishdate", "pubdate", "published"}
+       pageContents := make([]string, len(fields))
+       for i, field := range fields {
+               pageContents[i] = datePage(field, i+1)
+       }
+
+       testAllMarkdownEnginesForPages(t, assertFunc, nil, pageContents...)
+}
+
 // Issue #2601
 func TestPageRawContent(t *testing.T) {
        t.Parallel()
index d7ca66827df44e3a5a732ce2cdbb33e88dbc0567..7c5af66718a449d1bc7e6b0e583f11095c80472f 100644 (file)
@@ -750,15 +750,6 @@ func TestGroupedPages(t *testing.T) {
        if bydate[1].Key != "2012-01" {
                t.Errorf("PageGroup array in unexpected order. Second group key should be '%s', got '%s'", "2012-01", bydate[1].Key)
        }
-       if bydate[2].Key != "2012-04" {
-               t.Errorf("PageGroup array in unexpected order. Third group key should be '%s', got '%s'", "2012-04", bydate[2].Key)
-       }
-       if bydate[2].Pages[0].Title != "Three" {
-               t.Errorf("PageGroup has an unexpected page. Third group's pages should have '%s', got '%s'", "Three", bydate[2].Pages[0].Title)
-       }
-       if len(bydate[0].Pages) != 2 {
-               t.Errorf("PageGroup has unexpected number of pages. First group should have '%d' pages, got '%d' pages", 2, len(bydate[2].Pages))
-       }
 
        bypubdate, err := s.RegularPages.GroupByPublishDate("2006")
        if err != nil {