From 33f1ce5d4c9103dce61fc8140707f025083ddf97 Mon Sep 17 00:00:00 2001 From: Victor Zeinstra Date: Wed, 8 Apr 2026 10:02:54 +0200 Subject: [PATCH 1/2] =?UTF-8?q?fix(header):=20masquer=20le=20menu=20de=20n?= =?UTF-8?q?avigation=20en=20mode=20connect=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le sous-menu "Accueil" et "Observatoire" ne doit pas apparaître lorsque l'utilisateur est connecté. Closes #3157 --- packages/app/src/modules/layout/Header/MobileMenu.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/modules/layout/Header/MobileMenu.tsx b/packages/app/src/modules/layout/Header/MobileMenu.tsx index 0750f0254a..b4655e1ba3 100644 --- a/packages/app/src/modules/layout/Header/MobileMenu.tsx +++ b/packages/app/src/modules/layout/Header/MobileMenu.tsx @@ -49,7 +49,7 @@ export async function MobileMenu() { - + {!session?.user && } ); From 2953628db4ff8db41fdc07ba20ddd883fe6b7e6d Mon Sep 17 00:00:00 2001 From: Victor Zeinstra Date: Wed, 8 Apr 2026 11:50:26 +0200 Subject: [PATCH 2/2] test(header): add coverage for navigation menu visibility based on auth state --- .../Header/__tests__/MobileMenu.test.tsx | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 packages/app/src/modules/layout/Header/__tests__/MobileMenu.test.tsx diff --git a/packages/app/src/modules/layout/Header/__tests__/MobileMenu.test.tsx b/packages/app/src/modules/layout/Header/__tests__/MobileMenu.test.tsx new file mode 100644 index 0000000000..e3f63f42e2 --- /dev/null +++ b/packages/app/src/modules/layout/Header/__tests__/MobileMenu.test.tsx @@ -0,0 +1,51 @@ +import { render, screen } from "@testing-library/react"; +import { usePathname } from "next/navigation"; +import { beforeEach, describe, expect, it, vi } from "vitest"; + +const mocks = vi.hoisted(() => ({ + auth: vi.fn(), +})); + +vi.mock("~/server/auth", () => ({ + auth: mocks.auth, +})); + +import { MobileMenu } from "../MobileMenu"; + +beforeEach(() => { + vi.mocked(usePathname).mockReturnValue("/"); +}); + +describe("MobileMenu", () => { + it("renders the main navigation when no user is signed in", async () => { + mocks.auth.mockResolvedValue(null); + + render(await MobileMenu()); + + expect( + screen.getByRole("navigation", { name: "Menu principal" }), + ).toBeInTheDocument(); + expect( + screen.getByRole("link", { name: "Se connecter" }), + ).toBeInTheDocument(); + }); + + it("hides the main navigation when a user is signed in", async () => { + mocks.auth.mockResolvedValue({ + user: { + email: "jean.dupont@example.fr", + name: "Jean Dupont", + phone: null, + }, + }); + + render(await MobileMenu()); + + expect( + screen.queryByRole("navigation", { name: "Menu principal" }), + ).not.toBeInTheDocument(); + expect( + screen.getByRole("button", { name: "Mon espace" }), + ).toBeInTheDocument(); + }); +});