From b707dbbf909f47eca307e6b1b8b66cc780858115 Mon Sep 17 00:00:00 2001 From: Zoltan Szepesi <2dcube01@gmail.com> Date: Mon, 14 Sep 2026 20:58:41 +0200 Subject: [PATCH] fix: load a menu item's page whenever its slug is selected The menu resolvers only added page_id to the SQL selection when link was requested, but page_id is what slug needs, so `{ menu { slug } }` returned null slugs. Select page_id when slug is requested. Co-Authored-By: Claude Opus 5 (1M context) --- src/graphql/resolvers/menu.rs | 4 ++-- tests/content.rs | 30 ++++++++++++++++++++---------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/graphql/resolvers/menu.rs b/src/graphql/resolvers/menu.rs index c827274..6ae886b 100644 --- a/src/graphql/resolvers/menu.rs +++ b/src/graphql/resolvers/menu.rs @@ -58,7 +58,7 @@ impl MenuItem { select_columns!(ctx, query, Column); select_columns!(ctx, query, "link" => Column::Type, - "link" => Column::PageId, + "slug" => Column::PageId, "children" => Column::Id); query @@ -91,7 +91,7 @@ impl MenuQuery { select_columns!(ctx, query, Column); select_columns!(ctx, query, "link" => Column::Type, - "link" => Column::PageId, + "slug" => Column::PageId, "children" => Column::Id); query diff --git a/tests/content.rs b/tests/content.rs index d2e388a..dbb1f7c 100644 --- a/tests/content.rs +++ b/tests/content.rs @@ -59,20 +59,30 @@ async fn menu_is_a_tree_in_position_order() { } #[tokio::test] -#[ignore = "bug: a menu item's slug is null unless its link is selected too"] async fn menu_slug_does_not_depend_on_selecting_link() { - // "Kapcsolat" links to the page with the slug "kapcsolat". + fn item<'a>(items: &'a Value, name: &str) -> &'a Value { + items + .as_array() + .expect("menu items") + .iter() + .find(|item| item["name"] == name) + .unwrap_or_else(|| panic!("no menu item {name:?} in {items:#}")) + } + + // "Kapcsolat" links to the page "kapcsolat"; "Rólunk", a child of + // "Iskolánk", links to the page "rolunk". let app = TestApp::seeded().await; - let response = app.graphql("{ menu { name slug } }").await; + let response = app + .graphql("{ menu { name slug children { name slug } } }") + .await; - let contact = expect_data(&response)["menu"] - .as_array() - .expect("menu") - .iter() - .find(|item| item["name"] == "Kapcsolat") - .expect("seeded menu item"); - assert_eq!(contact["slug"], "kapcsolat"); + let menu = &expect_data(&response)["menu"]; + assert_eq!(item(menu, "Kapcsolat")["slug"], "kapcsolat"); + assert_eq!( + item(&item(menu, "Iskolánk")["children"], "Rólunk")["slug"], + "rolunk" + ); } #[tokio::test]