feat(housekeeping): deliver system vertical
This commit is contained in:
1 parent
0117b45d74
commit
3788ecd9f1
33 files changed
+4548
-423
No files matched your search
@@ -0,0 +1,157 @@
|
||||
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"',
|
||||
);
|
||||
});
|
||||
},
|
||||
);
|
||||
Reference in new issue
Block a user