Files
EpicNext-Cms/src/features/housekeeping/domains/system/pages/system-pages.test.tsx
T

158 lines
3.8 KiB
TypeScript

import { renderToStaticMarkup } from "react-dom/server";
import { describe, expect, it } from "vitest";
import {
fail,
type HousekeepingResult,
ok,
} from "../../../foundation/contracts";
import { SystemAccessPage } from "./access";
import { SystemConfigurationPage } from "./configuration";
import { SystemObservabilityPage } from "./observability";
import { SystemOperationsPage } from "./operations";
const correlationId = "system-pages-test";
type PageCase = {
readonly name: string;
readonly render: (result?: HousekeepingResult<unknown>) => string;
readonly empty: unknown;
readonly partial: unknown;
readonly ready: unknown;
};
const pageCases: readonly PageCase[] = [
{
name: "access",
render: (result) =>
renderToStaticMarkup(<SystemAccessPage result={result as never} />),
empty: {
kind: "permissions",
ranks: [],
acl: { roles: 0, permissions: 0 },
partialDependencies: [],
},
partial: {
kind: "permissions",
ranks: [{ id: 4, name: "Moderator", level: 4, userCount: 2 }],
acl: { roles: 0, permissions: 0 },
partialDependencies: ["acl"],
},
ready: {
kind: "permissions",
ranks: [{ id: 4, name: "Moderator", level: 4, userCount: 2 }],
acl: { roles: 3, permissions: 18 },
partialDependencies: [],
},
},
{
name: "configuration",
render: (result) =>
renderToStaticMarkup(
<SystemConfigurationPage result={result as never} />,
),
empty: { kind: "settings", settings: [], partialDependencies: [] },
partial: {
kind: "emulator",
settings: [{ key: "hotel.name", value: "Epic" }],
texts: [],
textsTotal: 0,
partialDependencies: ["emulator-texts"],
},
ready: {
kind: "settings",
settings: [{ key: "hotel.name", value: "Epic" }],
partialDependencies: [],
},
},
{
name: "observability",
render: (result) =>
renderToStaticMarkup(
<SystemObservabilityPage result={result as never} />,
),
empty: {
kind: "logs",
metrics: [],
rows: [],
partialDependencies: [],
},
partial: {
kind: "devops",
health: null,
errors: [{ id: "1", primary: "Connection error" }],
partialDependencies: ["health"],
},
ready: {
kind: "analytics",
metrics: [{ label: "Online users", value: 12 }],
rows: [],
partialDependencies: [],
},
},
{
name: "operations",
render: (result) =>
renderToStaticMarkup(<SystemOperationsPage result={result as never} />),
empty: { kind: "alerts", alerts: [], partialDependencies: [] },
partial: {
kind: "command-center",
health: null,
onlineUsers: { count: 0, users: [] },
maintenance: {
enabled: false,
message: "",
minimumLoginRank: 5,
},
partialDependencies: ["health"],
},
ready: {
kind: "alerts",
alerts: [
{
id: 7,
severity: "warning",
type: "emulator",
message: "Connection restored",
isRead: false,
},
],
partialDependencies: [],
},
},
];
describe.each(pageCases)(
"System $name page",
({ render, empty, partial, ready }) => {
it("renders loading, forbidden, and dependency errors explicitly", () => {
expect(render()).toContain('data-housekeeping-state="loading"');
expect(
render(
fail("FORBIDDEN", "errors.housekeeping.forbidden", correlationId),
),
).toContain('data-housekeeping-state="forbidden"');
expect(
render(
fail(
"DEPENDENCY_UNAVAILABLE",
"errors.housekeeping.dependencyUnavailable",
correlationId,
),
),
).toContain('data-housekeeping-state="error"');
});
it("renders empty, partial, and ready query results explicitly", () => {
expect(render(ok(empty, correlationId))).toContain(
'data-housekeeping-state="empty"',
);
expect(render(ok(partial, correlationId))).toContain(
'data-housekeeping-state="partial"',
);
expect(render(ok(ready, correlationId))).toContain(
'data-housekeeping-state="ready"',
);
});
},
);