mirror of https://github.com/coder/coder.git
110 lines
2.7 KiB
TypeScript
110 lines
2.7 KiB
TypeScript
import { act, renderHook, waitFor } from "@testing-library/react";
|
|
import { HttpResponse, http } from "msw";
|
|
import type { FC, PropsWithChildren } from "react";
|
|
import { QueryClient, QueryClientProvider } from "react-query";
|
|
import { MockUpdateCheck } from "testHelpers/entities";
|
|
import { server } from "testHelpers/server";
|
|
import { useUpdateCheck } from "./useUpdateCheck";
|
|
|
|
const createWrapper = (): FC<PropsWithChildren> => {
|
|
const queryClient = new QueryClient();
|
|
return ({ children }) => (
|
|
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
|
|
);
|
|
};
|
|
|
|
beforeEach(() => {
|
|
localStorage.clear();
|
|
});
|
|
|
|
it("is dismissed when does not have permission to see it", () => {
|
|
const { result } = renderHook(() => useUpdateCheck(false), {
|
|
wrapper: createWrapper(),
|
|
});
|
|
expect(result.current.isVisible).toBeFalsy();
|
|
});
|
|
|
|
it("is dismissed when it is already using current version", async () => {
|
|
server.use(
|
|
http.get("/api/v2/updatecheck", () => {
|
|
return HttpResponse.json({
|
|
...MockUpdateCheck,
|
|
current: true,
|
|
});
|
|
}),
|
|
);
|
|
const { result } = renderHook(() => useUpdateCheck(true), {
|
|
wrapper: createWrapper(),
|
|
});
|
|
|
|
await waitFor(() => {
|
|
expect(result.current.isVisible).toBeFalsy();
|
|
});
|
|
});
|
|
|
|
it("is dismissed when it was dismissed previously", async () => {
|
|
server.use(
|
|
http.get("/api/v2/updatecheck", () => {
|
|
return HttpResponse.json({
|
|
...MockUpdateCheck,
|
|
current: false,
|
|
});
|
|
}),
|
|
);
|
|
localStorage.setItem("dismissedVersion", MockUpdateCheck.version);
|
|
const { result } = renderHook(() => useUpdateCheck(true), {
|
|
wrapper: createWrapper(),
|
|
});
|
|
|
|
await waitFor(() => {
|
|
expect(result.current.isVisible).toBeFalsy();
|
|
});
|
|
});
|
|
|
|
it("shows when has permission and is outdated", async () => {
|
|
server.use(
|
|
http.get("/api/v2/updatecheck", () => {
|
|
return HttpResponse.json({
|
|
...MockUpdateCheck,
|
|
current: false,
|
|
});
|
|
}),
|
|
);
|
|
const { result } = renderHook(() => useUpdateCheck(true), {
|
|
wrapper: createWrapper(),
|
|
});
|
|
|
|
await waitFor(() => {
|
|
expect(result.current.isVisible).toBeTruthy();
|
|
});
|
|
});
|
|
|
|
it("shows when has permission and is outdated", async () => {
|
|
server.use(
|
|
http.get("/api/v2/updatecheck", () => {
|
|
return HttpResponse.json({
|
|
...MockUpdateCheck,
|
|
current: false,
|
|
});
|
|
}),
|
|
);
|
|
const { result } = renderHook(() => useUpdateCheck(true), {
|
|
wrapper: createWrapper(),
|
|
});
|
|
|
|
await waitFor(() => {
|
|
expect(result.current.isVisible).toBeTruthy();
|
|
});
|
|
|
|
act(() => {
|
|
result.current.dismiss();
|
|
});
|
|
|
|
await waitFor(() => {
|
|
expect(result.current.isVisible).toBeFalsy();
|
|
});
|
|
expect(localStorage.getItem("dismissedVersion")).toEqual(
|
|
MockUpdateCheck.version,
|
|
);
|
|
});
|