124 lines
4.2 KiB
JavaScript
124 lines
4.2 KiB
JavaScript
import { actions } from 'data/redux';
|
|
// import api from 'data/services/lms/api';
|
|
import * as requests from './requests';
|
|
|
|
jest.mock('data/services/lms/api', () => ({
|
|
// initializeList: (locationId) => ({ initializeList: locationId }),
|
|
}));
|
|
|
|
const dispatch = jest.fn();
|
|
const onSuccess = jest.fn();
|
|
const onFailure = jest.fn();
|
|
describe('requests thunkActions module', () => {
|
|
beforeEach(jest.clearAllMocks);
|
|
describe('networkRequest', () => {
|
|
const requestKey = 'test-request';
|
|
const testData = { some: 'test data' };
|
|
let resolveFn;
|
|
let rejectFn;
|
|
describe('with both handlers', () => {
|
|
beforeEach(() => {
|
|
requests.networkRequest({
|
|
requestKey,
|
|
promise: new Promise((resolve, reject) => {
|
|
resolveFn = resolve;
|
|
rejectFn = reject;
|
|
}),
|
|
onSuccess,
|
|
onFailure,
|
|
})(dispatch);
|
|
});
|
|
test('calls startRequest action with requestKey', async () => {
|
|
expect(dispatch.mock.calls).toEqual([[actions.requests.startRequest(requestKey)]]);
|
|
});
|
|
describe('on success', () => {
|
|
beforeEach(async () => {
|
|
await resolveFn(testData);
|
|
});
|
|
it('dispatches completeRequest', async () => {
|
|
expect(dispatch.mock.calls).toEqual([
|
|
[actions.requests.startRequest(requestKey)],
|
|
[actions.requests.completeRequest({ requestKey, response: testData })],
|
|
]);
|
|
});
|
|
it('calls onSuccess with response', async () => {
|
|
expect(onSuccess).toHaveBeenCalledWith(testData);
|
|
expect(onFailure).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
describe('on failure', () => {
|
|
beforeEach(async () => {
|
|
await rejectFn(testData);
|
|
});
|
|
test('dispatches completeRequest', async () => {
|
|
expect(dispatch.mock.calls).toEqual([
|
|
[actions.requests.startRequest(requestKey)],
|
|
[actions.requests.failRequest({ requestKey, error: testData })],
|
|
]);
|
|
});
|
|
test('calls onSuccess with response', async () => {
|
|
expect(onFailure).toHaveBeenCalledWith(testData);
|
|
expect(onSuccess).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
});
|
|
describe('without onSuccess and onFailure', () => {
|
|
test('calls startRequest action with requestKey', async () => {
|
|
requests.networkRequest({ requestKey, promise: Promise.resolve(testData) })(dispatch);
|
|
expect(dispatch.mock.calls).toEqual([[actions.requests.startRequest(requestKey)]]);
|
|
});
|
|
it('on success dispatches completeRequest', async () => {
|
|
await requests.networkRequest({ requestKey, promise: Promise.resolve(testData) })(dispatch);
|
|
expect(dispatch.mock.calls).toEqual([
|
|
[actions.requests.startRequest(requestKey)],
|
|
[actions.requests.completeRequest({ requestKey, response: testData })],
|
|
]);
|
|
});
|
|
it('on failure disaptches completeRequest', async () => {
|
|
await requests.networkRequest({ requestKey, promise: Promise.reject(testData) })(dispatch);
|
|
expect(dispatch.mock.calls).toEqual([
|
|
[actions.requests.startRequest(requestKey)],
|
|
[actions.requests.failRequest({ requestKey, error: testData })],
|
|
]);
|
|
});
|
|
});
|
|
});
|
|
|
|
/*
|
|
const testNetworkRequestAction = ({
|
|
action,
|
|
args,
|
|
expectedData,
|
|
expectedString,
|
|
}) => {
|
|
let dispatchedAction;
|
|
beforeEach(() => {
|
|
action({ ...args, onSuccess, onFailure })(dispatch);
|
|
[[dispatchedAction]] = dispatch.mock.calls;
|
|
});
|
|
it('dispatches networkRequest', () => {
|
|
expect(dispatchedAction.networkRequest).not.toEqual(undefined);
|
|
});
|
|
test('forwards onSuccess and onFailure', () => {
|
|
expect(dispatchedAction.networkRequest.onSuccess).toEqual(onSuccess);
|
|
expect(dispatchedAction.networkRequest.onFailure).toEqual(onFailure);
|
|
});
|
|
test(expectedString, () => {
|
|
expect(dispatchedAction.networkRequest).toEqual({
|
|
...expectedData,
|
|
onSuccess,
|
|
onFailure,
|
|
});
|
|
});
|
|
};
|
|
*/
|
|
|
|
describe('network request actions', () => {
|
|
beforeEach(() => {
|
|
requests.networkRequest = jest.fn(args => ({ networkRequest: args }));
|
|
});
|
|
describe('initializeList', () => {
|
|
});
|
|
});
|
|
});
|