mirror of
https://github.com/gohugoio/hugo.git
synced 2024-12-29 20:21:25 +00:00
241b21b0fd
Primary motivation is documentation, but it will also hopefully simplify the code. Also, * Lower case the default output format names; this is in line with the custom ones (map keys) and how it's treated all the places. This avoids doing `stringds.EqualFold` everywhere. Closes #10896 Closes #10620
200 lines
6.8 KiB
Go
200 lines
6.8 KiB
Go
// Copyright 2019 The Hugo Authors. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package pagemeta_test
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/gohugoio/hugo/config"
|
|
"github.com/gohugoio/hugo/config/testconfig"
|
|
|
|
"github.com/gohugoio/hugo/resources/page/pagemeta"
|
|
"github.com/gohugoio/hugo/resources/resource"
|
|
|
|
qt "github.com/frankban/quicktest"
|
|
)
|
|
|
|
func newTestFd() *pagemeta.FrontMatterDescriptor {
|
|
return &pagemeta.FrontMatterDescriptor{
|
|
Frontmatter: make(map[string]any),
|
|
Params: make(map[string]any),
|
|
Dates: &resource.Dates{},
|
|
PageURLs: &pagemeta.URLPath{},
|
|
Location: time.UTC,
|
|
}
|
|
}
|
|
|
|
func TestFrontMatterNewConfig(t *testing.T) {
|
|
c := qt.New(t)
|
|
|
|
cfg := config.New()
|
|
|
|
cfg.Set("frontmatter", map[string]any{
|
|
"date": []string{"publishDate", "LastMod"},
|
|
"Lastmod": []string{"publishDate"},
|
|
"expiryDate": []string{"lastMod"},
|
|
"publishDate": []string{"date"},
|
|
})
|
|
|
|
fc, err := pagemeta.DecodeFrontMatterConfig(cfg)
|
|
c.Assert(err, qt.IsNil)
|
|
c.Assert(fc.Date, qt.DeepEquals, []string{"publishdate", "pubdate", "published", "lastmod", "modified"})
|
|
c.Assert(fc.Lastmod, qt.DeepEquals, []string{"publishdate", "pubdate", "published"})
|
|
c.Assert(fc.ExpiryDate, qt.DeepEquals, []string{"lastmod", "modified"})
|
|
c.Assert(fc.PublishDate, qt.DeepEquals, []string{"date"})
|
|
|
|
// Default
|
|
cfg = config.New()
|
|
fc, err = pagemeta.DecodeFrontMatterConfig(cfg)
|
|
c.Assert(err, qt.IsNil)
|
|
c.Assert(fc.Date, qt.DeepEquals, []string{"date", "publishdate", "pubdate", "published", "lastmod", "modified"})
|
|
c.Assert(fc.Lastmod, qt.DeepEquals, []string{":git", "lastmod", "modified", "date", "publishdate", "pubdate", "published"})
|
|
c.Assert(fc.ExpiryDate, qt.DeepEquals, []string{"expirydate", "unpublishdate"})
|
|
c.Assert(fc.PublishDate, qt.DeepEquals, []string{"publishdate", "pubdate", "published", "date"})
|
|
|
|
// :default keyword
|
|
cfg.Set("frontmatter", map[string]any{
|
|
"date": []string{"d1", ":default"},
|
|
"lastmod": []string{"d2", ":default"},
|
|
"expiryDate": []string{"d3", ":default"},
|
|
"publishDate": []string{"d4", ":default"},
|
|
})
|
|
fc, err = pagemeta.DecodeFrontMatterConfig(cfg)
|
|
c.Assert(err, qt.IsNil)
|
|
c.Assert(fc.Date, qt.DeepEquals, []string{"d1", "date", "publishdate", "pubdate", "published", "lastmod", "modified"})
|
|
c.Assert(fc.Lastmod, qt.DeepEquals, []string{"d2", ":git", "lastmod", "modified", "date", "publishdate", "pubdate", "published"})
|
|
c.Assert(fc.ExpiryDate, qt.DeepEquals, []string{"d3", "expirydate", "unpublishdate"})
|
|
c.Assert(fc.PublishDate, qt.DeepEquals, []string{"d4", "publishdate", "pubdate", "published", "date"})
|
|
}
|
|
|
|
func TestFrontMatterDatesHandlers(t *testing.T) {
|
|
c := qt.New(t)
|
|
|
|
for _, handlerID := range []string{":filename", ":fileModTime", ":git"} {
|
|
|
|
cfg := config.New()
|
|
|
|
cfg.Set("frontmatter", map[string]any{
|
|
"date": []string{handlerID, "date"},
|
|
})
|
|
conf := testconfig.GetTestConfig(nil, cfg)
|
|
handler, err := pagemeta.NewFrontmatterHandler(nil, conf.GetConfigSection("frontmatter").(pagemeta.FrontmatterConfig))
|
|
c.Assert(err, qt.IsNil)
|
|
|
|
d1, _ := time.Parse("2006-01-02", "2018-02-01")
|
|
d2, _ := time.Parse("2006-01-02", "2018-02-02")
|
|
|
|
d := newTestFd()
|
|
switch strings.ToLower(handlerID) {
|
|
case ":filename":
|
|
d.BaseFilename = "2018-02-01-page.md"
|
|
case ":filemodtime":
|
|
d.ModTime = d1
|
|
case ":git":
|
|
d.GitAuthorDate = d1
|
|
}
|
|
d.Frontmatter["date"] = d2
|
|
c.Assert(handler.HandleDates(d), qt.IsNil)
|
|
c.Assert(d.Dates.FDate, qt.Equals, d1)
|
|
c.Assert(d.Params["date"], qt.Equals, d2)
|
|
|
|
d = newTestFd()
|
|
d.Frontmatter["date"] = d2
|
|
c.Assert(handler.HandleDates(d), qt.IsNil)
|
|
c.Assert(d.Dates.FDate, qt.Equals, d2)
|
|
c.Assert(d.Params["date"], qt.Equals, d2)
|
|
|
|
}
|
|
}
|
|
|
|
func TestFrontMatterDatesCustomConfig(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
c := qt.New(t)
|
|
|
|
cfg := config.New()
|
|
cfg.Set("frontmatter", map[string]any{
|
|
"date": []string{"mydate"},
|
|
"lastmod": []string{"publishdate"},
|
|
"publishdate": []string{"publishdate"},
|
|
})
|
|
|
|
conf := testconfig.GetTestConfig(nil, cfg)
|
|
handler, err := pagemeta.NewFrontmatterHandler(nil, conf.GetConfigSection("frontmatter").(pagemeta.FrontmatterConfig))
|
|
c.Assert(err, qt.IsNil)
|
|
|
|
testDate, err := time.Parse("2006-01-02", "2018-02-01")
|
|
c.Assert(err, qt.IsNil)
|
|
|
|
d := newTestFd()
|
|
d.Frontmatter["mydate"] = testDate
|
|
testDate = testDate.Add(24 * time.Hour)
|
|
d.Frontmatter["date"] = testDate
|
|
testDate = testDate.Add(24 * time.Hour)
|
|
d.Frontmatter["lastmod"] = testDate
|
|
testDate = testDate.Add(24 * time.Hour)
|
|
d.Frontmatter["publishdate"] = testDate
|
|
testDate = testDate.Add(24 * time.Hour)
|
|
d.Frontmatter["expirydate"] = testDate
|
|
|
|
c.Assert(handler.HandleDates(d), qt.IsNil)
|
|
|
|
c.Assert(d.Dates.FDate.Day(), qt.Equals, 1)
|
|
c.Assert(d.Dates.FLastmod.Day(), qt.Equals, 4)
|
|
c.Assert(d.Dates.FPublishDate.Day(), qt.Equals, 4)
|
|
c.Assert(d.Dates.FExpiryDate.Day(), qt.Equals, 5)
|
|
|
|
c.Assert(d.Params["date"], qt.Equals, d.Dates.FDate)
|
|
c.Assert(d.Params["mydate"], qt.Equals, d.Dates.FDate)
|
|
c.Assert(d.Params["publishdate"], qt.Equals, d.Dates.FPublishDate)
|
|
c.Assert(d.Params["expirydate"], qt.Equals, d.Dates.FExpiryDate)
|
|
|
|
c.Assert(handler.IsDateKey("date"), qt.Equals, false) // This looks odd, but is configured like this.
|
|
c.Assert(handler.IsDateKey("mydate"), qt.Equals, true)
|
|
c.Assert(handler.IsDateKey("publishdate"), qt.Equals, true)
|
|
c.Assert(handler.IsDateKey("pubdate"), qt.Equals, true)
|
|
}
|
|
|
|
func TestFrontMatterDatesDefaultKeyword(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
c := qt.New(t)
|
|
|
|
cfg := config.New()
|
|
|
|
cfg.Set("frontmatter", map[string]any{
|
|
"date": []string{"mydate", ":default"},
|
|
"publishdate": []string{":default", "mypubdate"},
|
|
})
|
|
|
|
conf := testconfig.GetTestConfig(nil, cfg)
|
|
handler, err := pagemeta.NewFrontmatterHandler(nil, conf.GetConfigSection("frontmatter").(pagemeta.FrontmatterConfig))
|
|
c.Assert(err, qt.IsNil)
|
|
|
|
testDate, _ := time.Parse("2006-01-02", "2018-02-01")
|
|
d := newTestFd()
|
|
d.Frontmatter["mydate"] = testDate
|
|
d.Frontmatter["date"] = testDate.Add(1 * 24 * time.Hour)
|
|
d.Frontmatter["mypubdate"] = testDate.Add(2 * 24 * time.Hour)
|
|
d.Frontmatter["publishdate"] = testDate.Add(3 * 24 * time.Hour)
|
|
|
|
c.Assert(handler.HandleDates(d), qt.IsNil)
|
|
|
|
c.Assert(d.Dates.FDate.Day(), qt.Equals, 1)
|
|
c.Assert(d.Dates.FLastmod.Day(), qt.Equals, 2)
|
|
c.Assert(d.Dates.FPublishDate.Day(), qt.Equals, 4)
|
|
c.Assert(d.Dates.FExpiryDate.IsZero(), qt.Equals, true)
|
|
}
|