import { act, renderHook } from "@testing-library/react-hooks"; import MockAdapter from "axios-mock-adapter"; import React from "react"; import { Provider } from "react-redux"; import { usePost } from "../hooks"; import { carActionHandler } from "../test-utils/CarActionHandler"; import { configureStore } from "../test-utils/configureStore"; describe("usePost", () => { const ReduxProvider = ({ children, reduxStore, }: { children: any; reduxStore: any; }) => {children}; const { store: mockStore, apiSaga } = configureStore(); afterEach(() => { jest.resetAllMocks(); }); const wrapper = ({ children }: { children: any }) => ( {children} ); it("should post data with JSONApiModel", async () => { const mock = new MockAdapter(apiSaga.apiService.httpAdapter); mock.onPost("/cars").reply(200, { data: { id: "9", type: "car", attributes: { brand: "PostCar", model: "PLL", year: "2020", }, }, }); const { result, waitForNextUpdate } = renderHook( () => usePost(carActionHandler), { wrapper, }, ); act(() => { result.current.create({ model: { type: "car", // ignored until issue 43 is resolved https://github.com/bornfight/aardvark/issues/43 // @ts-ignore brand: "PostCar", model: "PLL", year: "2020", }, includeNames: [], }); }); await waitForNextUpdate(); await expect(result.current.record).toEqual({ type: "car", id: "9", brand: "PostCar", model: "PLL", year: "2020", }); }); it("should post data with rawData ", async () => { const mock = new MockAdapter(apiSaga.apiService.httpAdapter); mock.onPost("/cars").reply(200, { data: { attributes: { brand: "PostRawCar", model: "PRLL", year: "2020", }, }, }); const { result } = renderHook(() => usePost(carActionHandler), { wrapper, }); await act(async () => { const resultdata = await result.current .create({ rawData: { data: { attributes: { brand: "PostRawCar", model: "PRLL", year: "2020", }, }, }, }) .then((response) => { return response; }); expect(resultdata).toEqual({ attributes: { brand: "PostRawCar", model: "PRLL", year: "2020", }, }); }); }); });