Skip to content

Commit

Permalink
added test
Browse files Browse the repository at this point in the history
  • Loading branch information
shahzad31 committed Mar 20, 2020
1 parent 23d0400 commit 648f25d
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/

import { call, put } from 'redux-saga/effects';
import { fetchEffectFactory } from '../fetch_effect';
import { indexStatusAction } from '../../actions';

describe('fetch saga effect factory', () => {
const asyncAction = indexStatusAction;
const calledAction = asyncAction.get();
let fetchEffect;

it('works with success workflow', () => {
const indexStatusResult = { indexExists: true, docCount: 2712532 };
const fetchStatus = async () => {
return { indexExists: true, docCount: 2712532 };
};
fetchEffect = fetchEffectFactory(
fetchStatus,
asyncAction.success,
asyncAction.fail
)(calledAction);
let next = fetchEffect.next();

expect(next.value).toEqual(call(fetchStatus, calledAction.payload));

const successResult = put(asyncAction.success(indexStatusResult));

next = fetchEffect.next(indexStatusResult);

expect(next.value).toEqual(successResult);
});

it('works with error workflow', () => {
const indexStatusResultError = new Error('no heartbeat index found');
const fetchStatus = async () => {
return indexStatusResultError;
};
fetchEffect = fetchEffectFactory(
fetchStatus,
asyncAction.success,
asyncAction.fail
)(calledAction);
let next = fetchEffect.next();

expect(next.value).toEqual(call(fetchStatus, calledAction.payload));

const errorResult = put(asyncAction.fail(indexStatusResultError));

next = fetchEffect.next(indexStatusResultError);

expect(next.value).toEqual(errorResult);
});

it('works with throw error workflow', () => {
const unExpectedError = new Error('no url found, so throw error');
const fetchStatus = async () => {
return await fetch('/some/url');
};
fetchEffect = fetchEffectFactory(
fetchStatus,
asyncAction.success,
asyncAction.fail
)(calledAction);
let next = fetchEffect.next().value;

expect(next).toEqual(call(fetchStatus, calledAction.payload));

const unexpectedErrorResult = put(asyncAction.fail(unExpectedError));

next = fetchEffect.next(unExpectedError);

expect(next.value).toEqual(unexpectedErrorResult);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,8 @@ export function fetchEffectFactory<T, R, S, F>(
) {
return function*(action: Action<T>) {
try {
const {
payload: { ...params },
} = action;
const response = yield call(fetch, params);
const response = yield call(fetch, action.payload);

if (response instanceof Error) {
// eslint-disable-next-line no-console
console.error(response);
Expand Down

0 comments on commit 648f25d

Please sign in to comment.