OpenPanel/packages/core/test/mutation-helpers.ts
2024-02-05 10:23:04 +01:00

95 lines
2.4 KiB
TypeScript

import { useList, useMany, useOne } from "../src/hooks/data";
import { TestWrapper, renderHook, waitFor } from "./";
import { MockJSONServer } from "./dataMocks";
export const renderUseOne = () => {
const { result: useOneResult } = renderHook(
() => useOne({ resource: "posts", id: "1" }),
{
wrapper: TestWrapper({
dataProvider: MockJSONServer,
}),
},
);
return useOneResult;
};
export const renderUseList = () => {
const { result: useListResult } = renderHook(
() => useList({ resource: "posts" }),
{
wrapper: TestWrapper({
dataProvider: MockJSONServer,
}),
},
);
return useListResult;
};
export const renderUseMany = () => {
const { result: useManyResult } = renderHook(
() => useMany({ resource: "posts", ids: ["1", "2"] }),
{
wrapper: TestWrapper({
dataProvider: MockJSONServer,
}),
},
);
return useManyResult;
};
export const assertOne = async (
useOneResult: ReturnType<typeof renderUseOne>,
property: string,
value: string | undefined,
) => {
await waitFor(() => {
expect(useOneResult.current.data?.data[property]).toEqual(value);
});
};
export const assertList = async (
listResult:
| ReturnType<typeof renderUseList>
| ReturnType<typeof renderUseMany>,
keyInput: string,
valueInput: string | string[] | undefined,
) => {
await waitFor(() => {
if (Array.isArray(valueInput)) {
valueInput.forEach((value, index) => {
expect(listResult.current.data?.data[index][keyInput]).toEqual(
value,
);
});
} else if (typeof valueInput === "string") {
expect(
listResult.current.data?.data.map((d) => d[keyInput]),
).toContainEqual(valueInput);
}
});
};
export const assertListLength = async (
listResult:
| ReturnType<typeof renderUseList>
| ReturnType<typeof renderUseMany>,
length: number,
) => {
await waitFor(() => {
expect(listResult.current.data?.data).toHaveLength(length);
});
};
export const assertMutationSuccess = async (mutationResult: any) => {
await waitFor(
() => {
expect(mutationResult.current.isSuccess).toBeTruthy();
},
{ timeout: 2000 },
);
};