diff --git a/pkg/envoy/yaml/compose_page_marshal.go b/pkg/envoy/yaml/compose_page_marshal.go index a43868fc5..804516f24 100644 --- a/pkg/envoy/yaml/compose_page_marshal.go +++ b/pkg/envoy/yaml/compose_page_marshal.go @@ -141,6 +141,13 @@ func (p *composePage) MarshalYAML() (interface{}, error) { } } + if p.relParent != nil { + nn, err = addMap(nn, "parent", firstOkString(p.relParent.Handle, p.relParent.Title)) + if err != nil { + return nil, err + } + } + nn, err = addMap(nn, "pageID", p.res.ID, "handle", p.res.Handle, diff --git a/pkg/envoy/yaml/compose_page_unmarshal.go b/pkg/envoy/yaml/compose_page_unmarshal.go index f0ce9408a..624da8dcc 100644 --- a/pkg/envoy/yaml/compose_page_unmarshal.go +++ b/pkg/envoy/yaml/compose_page_unmarshal.go @@ -85,6 +85,9 @@ func (wrap *composePage) UnmarshalYAML(n *yaml.Node) (err error) { case "module": return decodeRef(v, "page module", &wrap.refModule) + case "parent", "selfid": + return decodeRef(v, "page parent", &wrap.refParent) + case "visible": return y7s.DecodeScalar(v, "page visible", &wrap.res.Visible) diff --git a/tests/envoy/store_yaml_pages_test.go b/tests/envoy/store_yaml_pages_test.go index eb642b8d8..9e9ab38b6 100644 --- a/tests/envoy/store_yaml_pages_test.go +++ b/tests/envoy/store_yaml_pages_test.go @@ -43,6 +43,57 @@ func TestStoreYaml_pageRefs(t *testing.T) { } cases := []*tc{ + { + name: "nested pages", + pre: func(ctx context.Context, s store.Storer) (error, *su.DecodeFilter) { + ns := sTestComposeNamespace(ctx, t, s, "base") + + parent := &types.Page{ + ID: su.NextID(), + NamespaceID: ns.ID, + Handle: "parent", + Title: "parent", + } + child := &types.Page{ + ID: su.NextID(), + NamespaceID: ns.ID, + Handle: "child", + Title: "child", + SelfID: parent.ID, + } + + err := store.CreateComposePage(ctx, s, parent) + if err != nil { + t.Fatal(err) + } + err = store.CreateComposePage(ctx, s, child) + if err != nil { + t.Fatal(err) + } + + df := su.NewDecodeFilter(). + ComposeNamespace(&types.NamespaceFilter{ + Slug: "base_namespace", + }). + ComposePage(&types.PageFilter{ + NamespaceID: ns.ID, + }) + return nil, df + }, + check: func(ctx context.Context, s store.Storer, req *require.Assertions) { + n, err := store.LookupComposeNamespaceBySlug(ctx, s, "base_namespace") + req.NoError(err) + + parent, err := store.LookupComposePageByNamespaceIDHandle(ctx, s, n.ID, "parent") + req.NoError(err) + + child, err := store.LookupComposePageByNamespaceIDHandle(ctx, s, n.ID, "child") + req.NoError(err) + + req.Equal(parent.ID, child.SelfID) + }, + }, + { name: "pageblock chart", pre: func(ctx context.Context, s store.Storer) (error, *su.DecodeFilter) {