forked from baron/baron-sso
78 lines
2.1 KiB
TypeScript
78 lines
2.1 KiB
TypeScript
import { act } from "react";
|
|
import { createRoot, type Root } from "react-dom/client";
|
|
import { MemoryRouter, Route, Routes, useLocation } from "react-router-dom";
|
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import AuthGuard from "./AuthGuard";
|
|
|
|
const authState = {
|
|
isAuthenticated: false,
|
|
isLoading: false,
|
|
activeNavigator: undefined as string | undefined,
|
|
error: undefined as Error | undefined,
|
|
removeUser: vi.fn(),
|
|
};
|
|
|
|
vi.mock("react-oidc-context", () => ({
|
|
useAuth: () => authState,
|
|
}));
|
|
|
|
function LocationProbe() {
|
|
const location = useLocation();
|
|
return (
|
|
<div data-testid="location">
|
|
{location.pathname}
|
|
{location.search}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
function renderGuard(initialEntry: string) {
|
|
const container = document.createElement("div");
|
|
document.body.appendChild(container);
|
|
const root = createRoot(container);
|
|
|
|
act(() => {
|
|
root.render(
|
|
<MemoryRouter initialEntries={[initialEntry]}>
|
|
<Routes>
|
|
<Route element={<AuthGuard />}>
|
|
<Route path="/embed/picker" element={<div>picker</div>} />
|
|
</Route>
|
|
<Route path="/login" element={<LocationProbe />} />
|
|
</Routes>
|
|
</MemoryRouter>,
|
|
);
|
|
});
|
|
|
|
return { container, root };
|
|
}
|
|
|
|
function cleanupRendered(container: HTMLDivElement, root: Root) {
|
|
act(() => {
|
|
root.unmount();
|
|
});
|
|
container.remove();
|
|
}
|
|
|
|
describe("OrgFront AuthGuard auto login redirects", () => {
|
|
afterEach(() => {
|
|
vi.clearAllMocks();
|
|
authState.isAuthenticated = false;
|
|
authState.isLoading = false;
|
|
authState.activeNavigator = undefined;
|
|
authState.error = undefined;
|
|
window.localStorage.clear();
|
|
});
|
|
|
|
it("redirects protected picker entry to the auto login URL", () => {
|
|
const rendered = renderGuard(
|
|
"/embed/picker?mode=single&select=tenant&tenantId=hanmac-family-id",
|
|
);
|
|
|
|
expect(rendered.container.textContent).toBe(
|
|
"/login?auto=1&returnTo=%2Fembed%2Fpicker%3Fmode%3Dsingle%26select%3Dtenant%26tenantId%3Dhanmac-family-id",
|
|
);
|
|
cleanupRendered(rendered.container, rendered.root);
|
|
});
|
|
});
|