Add GroupByLastmod

Fixes #7408
This commit is contained in:
Bjørn Erik Pedersen
2020-06-19 09:37:37 +02:00
parent fc045e12a9
commit 82abca32fa
3 changed files with 87 additions and 1 deletions

View File

@@ -284,6 +284,20 @@ func (p Pages) GroupByExpiryDate(format string, order ...string) (PagesGroup, er
return p.groupByDateField(sorter, formatter, order...)
}
// GroupByLastmod groups by the given page's Lastmod value in
// the given format and with the given order.
// Valid values for order is asc, desc, rev and reverse.
// For valid format strings, see https://golang.org/pkg/time/#Time.Format
func (p Pages) GroupByLastmod(format string, order ...string) (PagesGroup, error) {
sorter := func(p Pages) Pages {
return p.ByLastmod()
}
formatter := func(p Page) string {
return p.Lastmod().Format(format)
}
return p.groupByDateField(sorter, formatter, order...)
}
// GroupByParamDate groups by a date set as a param on the page in
// the given format and with the given order.
// Valid values for order is asc, desc, rev and reverse.

View File

@@ -49,6 +49,7 @@ func preparePageGroupTestPages(t *testing.T) Pages {
p.date = cast.ToTime(src.date)
p.pubDate = cast.ToTime(src.date)
p.expiryDate = cast.ToTime(src.date)
p.lastMod = cast.ToTime(src.date).AddDate(3, 0, 0)
p.params["custom_param"] = src.param
p.params["custom_date"] = cast.ToTime(src.date)
pages = append(pages, p)
@@ -378,6 +379,42 @@ func TestGroupByParamDate(t *testing.T) {
}
}
func TestGroupByLastmod(t *testing.T) {
t.Parallel()
pages := preparePageGroupTestPages(t)
expect := PagesGroup{
{Key: "2015-04", Pages: Pages{pages[4], pages[2], pages[0]}},
{Key: "2015-03", Pages: Pages{pages[3]}},
{Key: "2015-01", Pages: Pages{pages[1]}},
}
groups, err := pages.GroupByLastmod("2006-01")
if err != nil {
t.Fatalf("Unable to make PagesGroup array: %s", err)
}
if !reflect.DeepEqual(groups, expect) {
t.Errorf("PagesGroup has unexpected groups. It should be %#v, got %#v", expect, groups)
}
}
func TestGroupByLastmodInReverseOrder(t *testing.T) {
t.Parallel()
pages := preparePageGroupTestPages(t)
expect := PagesGroup{
{Key: "2015-01", Pages: Pages{pages[1]}},
{Key: "2015-03", Pages: Pages{pages[3]}},
{Key: "2015-04", Pages: Pages{pages[0], pages[2], pages[4]}},
}
groups, err := pages.GroupByLastmod("2006-01", "asc")
if err != nil {
t.Fatalf("Unable to make PagesGroup array: %s", err)
}
if !reflect.DeepEqual(groups, expect) {
t.Errorf("PagesGroup has unexpected groups. It should be\n%#v, got\n%#v", expect, groups)
}
}
func TestGroupByParamDateInReverseOrder(t *testing.T) {
t.Parallel()
pages := preparePageGroupTestPages(t)