import React from 'react';
import { combineReducers } from 'redux';
import { renderConnectedComponent, sleep } from '../../../test-utils/dist/js';
import {
reduxAjaxMiddleware,
reduxAjaxReducer,
reduxAjaxReducerKey,
submitFailure,
submitPending,
submitSuccess
} from '../index';
import { useReduxAjax } from '../redux-ajax.hook';
const requestId = 'test';
const Example: React.FC = () => {
const { Success, Loading, Failure } = useReduxAjax(requestId);
return (
<>
Always visible
success
loading
failure
>
);
};
const setupTest = () =>
renderConnectedComponent({
rootReducer: combineReducers({ [reduxAjaxReducerKey]: reduxAjaxReducer }),
middlewareList: [reduxAjaxMiddleware({ fetchFn: jest.fn() })]
})();
describe('react-redux-ajax components', () => {
it('renders only the loader component when the request is pending', async () => {
const { store, asFragment } = setupTest();
store.dispatch(submitPending({ requestId }));
await sleep();
expect(asFragment()).toMatchSnapshot();
});
it('renders only the success component when the request is successful', async () => {
const { store, asFragment } = setupTest();
store.dispatch(submitSuccess({ requestId }));
await sleep();
expect(asFragment()).toMatchSnapshot();
});
it('renders only the resiliency component when the request has failed', async () => {
const { store, asFragment } = setupTest();
store.dispatch(submitFailure({ requestId, error: {} }));
await sleep();
expect(asFragment()).toMatchSnapshot();
});
});