forked from baron/baron-sso
53 lines
1.8 KiB
TypeScript
53 lines
1.8 KiB
TypeScript
import { matchRoutes } from "react-router-dom";
|
|
import { describe, expect, it } from "vitest";
|
|
import { buildAdminAuthRedirectUris } from "../lib/authConfig";
|
|
import { adminRoutes } from "./routes";
|
|
|
|
describe("admin routes", () => {
|
|
it("accepts the auth callback path generated from the public admin URL", () => {
|
|
const { redirectUri } = buildAdminAuthRedirectUris(
|
|
"https://sadmin.hmac.kr",
|
|
);
|
|
const callbackPath = new URL(redirectUri).pathname;
|
|
|
|
const matches = matchRoutes(adminRoutes, callbackPath);
|
|
|
|
expect(callbackPath).toBe("/auth/callback");
|
|
expect(matches?.at(-1)?.route.path).toBe("/auth/callback");
|
|
});
|
|
|
|
it("registers the super-admin user projection management route", () => {
|
|
const matches = matchRoutes(adminRoutes, "/system/projections/users");
|
|
|
|
expect(matches?.at(-1)?.route.path).toBe("system/projections/users");
|
|
});
|
|
|
|
it("registers the super-admin data integrity management route", () => {
|
|
const matches = matchRoutes(adminRoutes, "/system/data-integrity");
|
|
|
|
expect(matches?.at(-1)?.route.path).toBe("system/data-integrity");
|
|
});
|
|
|
|
it("keeps protected admin pages behind an auth guard before mounting the layout", () => {
|
|
const rootRoute = adminRoutes.find((route) => route.path === "/");
|
|
const protectedShellRoute = rootRoute?.children?.[0];
|
|
|
|
expect(getRouteElementName(rootRoute?.element)).toBe("AuthGuard");
|
|
expect(getRouteElementName(protectedShellRoute?.element)).toBe("AppLayout");
|
|
expect(protectedShellRoute?.children?.at(0)?.index).toBe(true);
|
|
});
|
|
});
|
|
|
|
function getRouteElementName(element: unknown) {
|
|
if (
|
|
typeof element === "object" &&
|
|
element !== null &&
|
|
"type" in element &&
|
|
typeof element.type === "function"
|
|
) {
|
|
return element.type.name;
|
|
}
|
|
|
|
return undefined;
|
|
}
|