]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
allow nested params when using Pages.GroupByParam and Pages.GroupByParamDate
authorn1xx1 <me@simonemiraglia.it>
Thu, 1 Aug 2024 11:12:32 +0000 (13:12 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 2 Aug 2024 08:03:20 +0000 (10:03 +0200)
resources/page/pagegroup_test.go
resources/resource/resource_helpers.go

index 5008aa72016329a6f093d3503ec0938c0edd1ff2..1168e519e0958f3fcf981123f466785f76e56c84 100644 (file)
@@ -55,6 +55,11 @@ func preparePageGroupTestPages(t *testing.T) Pages {
                p.params["custom_param"] = src.param
                p.params["custom_date"] = cast.ToTime(src.date)
                p.params["custom_string_date"] = src.date
+               p.params["custom_object"] = map[string]any{
+                       "param":       src.param,
+                       "date":        cast.ToTime(src.date),
+                       "string_date": src.date,
+               }
                pages = append(pages, p)
        }
        return pages
@@ -252,6 +257,25 @@ func TestGroupByParamCalledWithUnavailableParam(t *testing.T) {
        }
 }
 
+func TestGroupByParamNested(t *testing.T) {
+       t.Parallel()
+       pages := preparePageGroupTestPages(t)
+
+       expect := PagesGroup{
+               {Key: "bar", Pages: Pages{pages[1], pages[3]}},
+               {Key: "baz", Pages: Pages{pages[4]}},
+               {Key: "foo", Pages: Pages{pages[0], pages[2]}},
+       }
+
+       groups, err := pages.GroupByParam("custom_object.param")
+       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 TestGroupByDate(t *testing.T) {
        t.Parallel()
        pages := preparePageGroupTestPages(t)
@@ -372,6 +396,24 @@ func TestGroupByParamDate(t *testing.T) {
        }
 }
 
+func TestGroupByParamDateNested(t *testing.T) {
+       t.Parallel()
+       pages := preparePageGroupTestPages(t)
+       expect := PagesGroup{
+               {Key: "2012-04", Pages: Pages{pages[4], pages[2], pages[0]}},
+               {Key: "2012-03", Pages: Pages{pages[3]}},
+               {Key: "2012-01", Pages: Pages{pages[1]}},
+       }
+
+       groups, err := pages.GroupByParamDate("custom_object.date", "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)
+       }
+}
+
 // https://github.com/gohugoio/hugo/issues/3983
 func TestGroupByParamDateWithStringParams(t *testing.T) {
        t.Parallel()
@@ -391,6 +433,24 @@ func TestGroupByParamDateWithStringParams(t *testing.T) {
        }
 }
 
+func TestGroupByParamDateNestedWithStringParams(t *testing.T) {
+       t.Parallel()
+       pages := preparePageGroupTestPages(t)
+       expect := PagesGroup{
+               {Key: "2012-04", Pages: Pages{pages[4], pages[2], pages[0]}},
+               {Key: "2012-03", Pages: Pages{pages[3]}},
+               {Key: "2012-01", Pages: Pages{pages[1]}},
+       }
+
+       groups, err := pages.GroupByParamDate("custom_object.string_date", "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 TestGroupByLastmod(t *testing.T) {
        t.Parallel()
        pages := preparePageGroupTestPages(t)
index 90075f983abd2383aed51c457272e1f5efc4c6ad..c2bb463c82e67c8b541d881897e56b1af0dc895f 100644 (file)
@@ -14,6 +14,7 @@
 package resource
 
 import (
+       "github.com/gohugoio/hugo/common/maps"
        "strings"
        "time"
 
@@ -36,9 +37,9 @@ func GetParamToLower(r Resource, key string) any {
 }
 
 func getParam(r Resource, key string, stringToLower bool) any {
-       v := r.Params()[strings.ToLower(key)]
+       v, err := maps.GetNestedParam(key, ".", r.Params())
 
-       if v == nil {
+       if v == nil || err != nil {
                return nil
        }