Files
azure-image-chooser/app/frontend/test/app.test.tsx

58 lines
1.6 KiB
TypeScript

import { render, screen } from "@testing-library/react";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { ThemeProvider, createTheme } from "@mui/material";
import { beforeEach, afterEach, describe, expect, it, vi } from "vitest";
import App from "../src/App";
const originalFetch = globalThis.fetch;
const createResponse = (payload: unknown) =>
new Response(JSON.stringify(payload), {
status: 200,
headers: { "Content-Type": "application/json" }
});
describe("App", () => {
beforeEach(() => {
globalThis.fetch = vi.fn((url: string) => {
if (url === "/api/locations") {
return Promise.resolve(createResponse([{ name: "westeurope", displayName: "West Europe" }]));
}
if (url === "/api/templates") {
return Promise.resolve(createResponse([{ label: "Azure CLI", language: "shell", file: "shell.tpl" }]));
}
return Promise.resolve(createResponse([]));
}) as typeof fetch;
});
afterEach(() => {
globalThis.fetch = originalFetch;
});
it("renders application heading", async () => {
const client = new QueryClient({
defaultOptions: {
queries: {
retry: false,
gcTime: 0
}
}
});
const theme = createTheme();
const view = render(
<QueryClientProvider client={client}>
<ThemeProvider theme={theme}>
<App />
</ThemeProvider>
</QueryClientProvider>
);
expect(await screen.findByText("Azure Image Chooser")).toBeInTheDocument();
view.unmount();
client.clear();
});
});