I have a util function that calls the sessionStorage. it fails saying received calls are 0. It fails due to sessionStorage accessing. It works if that part is commented out. I tried mocking the sessionStorage but still no luck.
Here's the test,
it("should be to search a composition query", async () => {
const compositionQuery = "1 and 2";
jest.mock("./composition.utils", () => {
const original = jest.requireActual("./composition.utils");
return {
...original,
createCompositionQuery: jest
.fn()
.mockImplementation(() => mockCompositionQuery),
};
});
Storage.prototype.getItem = jest
.fn()
.mockReturnValue(mockSearchHistory.toString());
const user = userEvent.setup();
const submit = jest.fn();
render(<Composition onSubmit={submit} />);
const compositionInput = screen.getByTestId("composition-query");
await user.click(compositionInput);
await waitFor(() => user.type(compositionInput, compositionQuery));
await waitFor(() => user.click(screen.getByTestId("search-btn")));
await waitFor(() =>
expect(submit).toBeCalledWith(
mockCompositionQuery,
`Composition of ${compositionQuery}`
)
);
});
Here's the util function that I'm mocking.
export const createCompositionQuery = (search: string) => {
const query: Query = {
type: "",
columns: addColumnsToDisplay(),
rowFilters: [],
customRowFilterCombination: "",
};
const searchTokens = search.split(/\s+/);
searchTokens.forEach((eachToken) => {
const history = JSON.parse(
window.sessionStorage.getItem("openmrsHistory")
);
const operandQuery = history[parseInt(eachToken) - 1];
const jsonRequestObject = operandQuery.parameters;
jsonRequestObject.customRowFilterCombination = formatFilterCombination(
jsonRequestObject.customRowFilterCombination,
query.rowFilters.length
});
return { query };
};
Here's the github link for the full implementation