Files
HiveGrid-Wireframes/03 Quellen und Referenzen/hivegrid-cloud/apps/web/app/services/admin/admin-access-contract.test.ts
T

71 lines
2.5 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { ADMIN_PERMISSIONS } from "@hivegrid/db/admin-permissions";
import { AdminSidebar } from "~/application/sidebar/AdminSidebar";
import { getSidebarCommandActions } from "~/services/command-registry/commandRegistry";
import { readRepoFile } from "~/utils/testing/repoPaths";
import {
ADMIN_AREA_ACCESS,
ADMIN_ROUTE_ACCESS,
adminAreaAllows,
} from "./admin-access-contract";
const t = vi.fn((key: string) => key) as never;
describe("admin access contract", () => {
it("uses catalog permissions and exposes one breadcrumb contract per route", () => {
const catalog = new Set<string>(ADMIN_PERMISSIONS);
expect(new Set(ADMIN_ROUTE_ACCESS.map((entry) => entry.path)).size).toBe(
ADMIN_ROUTE_ACCESS.length
);
for (const route of ADMIN_ROUTE_ACCESS) {
expect(catalog.has(route.permission)).toBe(true);
expect(route.breadcrumbKey).toMatch(/^[a-z]/);
}
});
it("keeps sidebar and command-search source routes on the same permission", () => {
const commands = getSidebarCommandActions(
AdminSidebar({
t,
appConfiguration: {
app: { features: { tenantApiKeys: true } },
} as never,
}),
"admin"
);
for (const route of ADMIN_ROUTE_ACCESS) {
const command = commands.find((candidate) => candidate.id === route.path);
expect(command?.scope.permission, route.path).toBe(route.permission);
}
});
it("uses the contract constants in sensitive direct route guards", () => {
const directRouteContracts = {
dashboard:
"apps/web/app/utils/data/.server/adminDashboardRouteData.ts",
support: "apps/web/app/routes/admin/support.tsx",
health: "apps/web/app/routes/admin/system/index.tsx",
jobs: "apps/web/app/routes/admin/system/jobs.tsx",
system: "apps/web/app/routes/admin/system/health.tsx",
deploys: "apps/web/app/routes/admin/system/deploys.tsx",
} as const;
for (const [area, path] of Object.entries(directRouteContracts)) {
expect(readRepoFile(path)).toContain(`ADMIN_AREA_ACCESS.${area}`);
}
});
it("unions array requirements and denies unrelated roles", () => {
expect(
adminAreaAllows(["admin_sales.phone.call"], "salesCommunication")
).toBe(true);
expect(adminAreaAllows(["admin.dashboard.view"], "support")).toBe(false);
expect(
adminAreaAllows(
[ADMIN_AREA_ACCESS.support],
"support"
)
).toBe(true);
});
});