32 lines
1.3 KiB
TypeScript
32 lines
1.3 KiB
TypeScript
/**
|
|
* SSR-render-proof för den nya admin-ytan /admin/notes (kernel-konsumenten).
|
|
* Samma mönster som import-wizard-ssr.test.ts: react-dom/server i Node.
|
|
* PortalShell -> usePathname (next/navigation) mockas; sonner toast mockas.
|
|
*/
|
|
import { describe, it, expect, vi } from "vitest";
|
|
|
|
vi.mock("next/navigation", () => ({
|
|
usePathname: () => "/admin/notes",
|
|
useRouter: () => ({ push: vi.fn(), replace: vi.fn() }),
|
|
}));
|
|
vi.mock("sonner", () => ({ toast: { success: vi.fn(), warning: vi.fn(), error: vi.fn() } }));
|
|
vi.mock("@/components/locale-provider", () => ({
|
|
LocaleProvider: ({ children }: { children: React.ReactNode }) => children,
|
|
useT: () => (x: { en: string; sv: string }) => x.en,
|
|
useLocale: () => "en",
|
|
}));
|
|
|
|
import { createElement } from "react";
|
|
import { renderToString } from "react-dom/server";
|
|
import OrderNotesPage from "@/app/admin/notes/page";
|
|
|
|
describe("/admin/notes SSR (kernel-konsument-yta)", () => {
|
|
it("renderar rubrik, offline-växeln och laddningstillstånd utan krasch (SSR = första paint före useEffect)", () => {
|
|
const html = renderToString(createElement(OrderNotesPage));
|
|
expect(html).toContain("Orderanteckningar");
|
|
expect(html).toContain("Offline-läge");
|
|
expect(html).toContain('role="status"'); // loading-skeleton = korrekt SSR-att-få-state
|
|
expect(html.length).toBeGreaterThan(500);
|
|
});
|
|
});
|