49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import { render, screen, waitFor } from "@testing-library/react";
|
|
import axios from "axios";
|
|
import { MemoryRouter } from "react-router-dom";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import { AuthProvider, useAuth } from "./AuthContext";
|
|
|
|
const Probe = () => {
|
|
const { loading, authEnabled } = useAuth();
|
|
return (
|
|
<div>
|
|
<span data-testid="loading">{String(loading)}</span>
|
|
<span data-testid="auth-enabled">{String(authEnabled)}</span>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
describe("AuthProvider", () => {
|
|
it("defaults to auth-enabled mode if /auth/status fails", async () => {
|
|
const storage = new Map<string, string>();
|
|
Object.defineProperty(window, "localStorage", {
|
|
configurable: true,
|
|
value: {
|
|
getItem: (key: string) => storage.get(key) ?? null,
|
|
setItem: (key: string, value: string) => {
|
|
storage.set(key, value);
|
|
},
|
|
removeItem: (key: string) => {
|
|
storage.delete(key);
|
|
},
|
|
},
|
|
});
|
|
|
|
vi.spyOn(axios, "get").mockRejectedValueOnce(new Error("network down"));
|
|
|
|
render(
|
|
<MemoryRouter>
|
|
<AuthProvider>
|
|
<Probe />
|
|
</AuthProvider>
|
|
</MemoryRouter>
|
|
);
|
|
|
|
await waitFor(() => {
|
|
expect(screen.getByTestId("loading").textContent).toBe("false");
|
|
});
|
|
expect(screen.getByTestId("auth-enabled").textContent).toBe("true");
|
|
});
|
|
});
|