// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {AsyncNodeStorage} from 'redux-persist-node-storage';
import {createTransform} from 'redux-persist';

import configureStore from '@store';

export default async function testConfigureStore(preloadedState) {
    const storageTransform = createTransform(
        () => ({}),
        () => ({}),
    );

    const persistConfig = {
        key: 'root',
        storage: new AsyncNodeStorage('./.tmp'),
        whitelist: [],
        serialize: true,
        deserialize: true,
        transforms: [
            storageTransform,
        ],
    };
    const {store} = configureStore(null, preloadedState, persistConfig, {enableBuffer: false});

    const wait = () => new Promise((resolve) => setTimeout(resolve), 300); //eslint-disable-line
    await wait();

    return store;
}

// This should probably be replaced by redux-mock-store like the web app
export function mockDispatch(dispatch) {
    const mocked = (action) => {
        dispatch(action);

        mocked.actions.push(action);
    };

    mocked.actions = [];

    return mocked;
}
