import { describe, expect, it } from "vitest"; import { ADMIN_GROUP, BOTTOM_NAV_HREFS, NAV_GROUPS, visibleNavGroups, } from "./nav-config"; const ALL_ITEMS = [...NAV_GROUPS, ADMIN_GROUP].flatMap((group) => group.items); const ALL_PERMISSIONS = ALL_ITEMS.flatMap((item) => item.permission === undefined ? [] : [item.permission].flat(), ); function hrefs(permissions: string[]): string[] { return visibleNavGroups({ permissions }) .flatMap((group) => group.items) .map((item) => item.href); } describe("nav-config", () => { it('every sidebar area is reachable on a phone via bottom nav or „Mehr"', () => { const sidebar = hrefs(ALL_PERMISSIONS); // „Mehr" lists every visible group, the bottom nav the four favourites. const phone = new Set([...BOTTOM_NAV_HREFS, ...sidebar]); expect(sidebar.length).toBe(ALL_ITEMS.length); expect(sidebar.every((href) => phone.has(href))).toBe(true); expect(sidebar).toContain("/honey-batches"); }); it("keeps every bottom nav entry in the nav config", () => { const known = ALL_ITEMS.map((item) => item.href); expect(BOTTOM_NAV_HREFS.every((href) => known.includes(href))).toBe(true); }); it("admin entries need their permission", () => { expect(hrefs([])).not.toContain("/settings/audit-log"); expect(hrefs([])).not.toContain("/settings/backup"); expect(visibleNavGroups({ permissions: [] }).map((g) => g.label)).not.toContain( "Verwaltung", ); const admin = visibleNavGroups({ permissions: ["audit:read"] }).find( (group) => group.label === "Verwaltung", ); expect(admin?.items.map((item) => item.href)).toEqual(["/settings/audit-log"]); }); it("hides items the user may not see", () => { expect(hrefs([])).not.toContain("/winter"); expect(hrefs(["winter-checks:read"])).toContain("/winter"); }); });