/* * Copyright 2025 Commonwealth Scientific and Industrial Research * Organisation (CSIRO) ABN 41 687 119 230. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import type * as zustand from 'zustand'; import { act } from '@testing-library/react'; const { create: actualCreate, createStore: actualCreateStore } = jest.requireActual('zustand'); // a variable to hold reset functions for all stores declared in the app export const storeResetFns = new Set<() => void>(); // when creating a store, we get its initial state, create a reset function and add it in the set export const create = (() => { console.log('zustand create mock'); return (stateCreator: zustand.StateCreator) => { const store = actualCreate(stateCreator); const initialState = store.getState(); storeResetFns.add(() => { store.setState(initialState, true); }); return store; }; }) as typeof zustand.create; // when creating a store, we get its initial state, create a reset function and add it in the set export const createStore = ((stateCreator: zustand.StateCreator) => { console.log('zustand createStore mock'); const store = actualCreateStore(stateCreator); const initialState = store.getState(); storeResetFns.add(() => { store.setState(initialState, true); }); return store; }) as typeof zustand.createStore; // reset all stores after each test run afterEach(() => { act(() => { storeResetFns.forEach((resetFn) => { resetFn(); }); }); });