Files
prowler/ui/lib/auth-headers.test.ts
T
Alan Buscaglia 627d3b6199 fix(ui): return 401 for unauthenticated report routes
- Preserve redirects for server-rendered authentication flows
- Return explicit unauthorized responses from report route handlers
- Cover invalid sessions and callback fallback behavior
2026-07-29 11:35:14 +02:00

68 lines
1.7 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const { authMock, getAuthHeadersIfAvailableMock, getRequiredAuthHeadersMock } =
vi.hoisted(() => ({
authMock: vi.fn(),
getAuthHeadersIfAvailableMock: vi.fn(),
getRequiredAuthHeadersMock: vi.fn(),
}));
vi.mock("server-only", () => ({}));
vi.mock("@/auth.config", () => ({
auth: authMock,
}));
vi.mock("./server-auth", () => ({
getAuthHeadersIfAvailable: getAuthHeadersIfAvailableMock,
getRequiredAuthHeaders: getRequiredAuthHeadersMock,
}));
import { getAuthHeaders, getRouteAuthHeaders } from "./auth-headers";
describe("getAuthHeaders", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("forwards the restored session and requested header options", async () => {
// Given
authMock.mockResolvedValue({
accessToken: "access-token",
error: "RefreshAccessTokenError",
});
const options = { contentType: true };
// When
await getAuthHeaders(options);
// Then
expect(getRequiredAuthHeadersMock).toHaveBeenCalledWith(
"access-token",
options,
"RefreshAccessTokenError",
);
});
it("returns no route headers for a terminal session", async () => {
// Given
authMock.mockResolvedValue({
accessToken: "stale-access-token",
error: "RefreshAccessTokenError",
});
getAuthHeadersIfAvailableMock.mockReturnValue(null);
// When
const result = await getRouteAuthHeaders();
// Then
expect(result).toBeNull();
expect(getAuthHeadersIfAvailableMock).toHaveBeenCalledWith(
"stale-access-token",
undefined,
"RefreshAccessTokenError",
);
expect(getRequiredAuthHeadersMock).not.toHaveBeenCalled();
});
});