import { useState, StrictMode } from "react";
import { createHttpMockingServer } from "@hyper-fetch/testing";
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
import { useFetch } from "hooks/use-fetch";
import { createRequest, waitForRender } from "../../utils";
const { resetMocks, startServer, stopServer, mockRequest } = createHttpMockingServer();
describe("useFetch [ Integration ]", () => {
const queryParams = { page: 1 };
const btnText = "refresh";
const depBtnText = "add dependency";
let request = createRequest({ endpoint: `/users/${Date.now()}` });
beforeAll(() => {
startServer();
});
afterEach(() => {
resetMocks();
});
afterAll(() => {
stopServer();
});
beforeEach(() => {
vi.resetModules();
request = createRequest({ endpoint: `/users/${Date.now()}` });
request.client.clear();
});
describe("given useFetch is initialized in the component", () => {
describe("when request is about to change", () => {
it("should use the latest request when its changed", async () => {
const Page = () => {
const [endpoint, setEndpoint] = useState("");
const [params, setParams] = useState({});
const { onRequestStart } = useFetch(request.setQueryParams(params), {
dependencyTracking: false,
dependencies: [],
});
onRequestStart((event) => {
setEndpoint(event.request.endpoint);
});
const addDependency = () => {
setParams(queryParams);
};
return (
<>
{endpoint}
>
);
};
mockRequest(request);
mockRequest(request.setQueryParams(queryParams));
render(