Skip to content

Commit

Permalink
fix(reduxHelpers,middleware): issues/260 expose error data
Browse files Browse the repository at this point in the history
* reduxHelpers, expose error data correctly, expand test checks
* statusMiddleware, add data to dispatch
  • Loading branch information
cdcabrera committed May 7, 2020
1 parent a642eb3 commit 6032408
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 7 deletions.
13 changes: 13 additions & 0 deletions src/redux/common/__tests__/__snapshots__/reduxHelpers.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -129,10 +129,14 @@ exports[`ReduxHelpers should get a date from a service call response: ARRAY date

exports[`ReduxHelpers should get a date from a service call response: date 1`] = `"Fri, 07 Feb 2020 10:46:53 GMT"`;

exports[`ReduxHelpers should get a date from a service call response: error response date 1`] = `"Tue, 11 Feb 2020 15:27:16 GMT"`;

exports[`ReduxHelpers should get a http status from a service call response: ARRAY mismatched status 1`] = `400`;

exports[`ReduxHelpers should get a http status from a service call response: ARRAY status 1`] = `200`;

exports[`ReduxHelpers should get a http status from a service call response: error response status 1`] = `403`;

exports[`ReduxHelpers should get a http status from a service call response: fallback status 1`] = `200`;

exports[`ReduxHelpers should get a http status from a service call response: missing status 1`] = `0`;
Expand All @@ -155,6 +159,8 @@ exports[`ReduxHelpers should get a message from a service call response: respons

exports[`ReduxHelpers should get a message from a service call response: response for 4XX 1`] = `"Request failed with status code 400"`;

exports[`ReduxHelpers should get a message from a service call response: response payload for 4XX 1`] = `"Request failed with status code 403"`;

exports[`ReduxHelpers should get data from a service call response: ARRAY data 1`] = `
Array [
Object {
Expand Down Expand Up @@ -185,6 +191,13 @@ Array [
]
`;

exports[`ReduxHelpers should get data from a service call response: error response data 1`] = `
Object {
"dolor": "sit",
"lorem": "ipsum",
}
`;

exports[`ReduxHelpers should have specific functions: reduxHelpers 1`] = `
Object {
"FULFILLED_ACTION": [Function],
Expand Down
50 changes: 50 additions & 0 deletions src/redux/common/__tests__/reduxHelpers.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,19 @@ describe('ReduxHelpers', () => {
})
).toMatchSnapshot('response for 4XX');

expect(
reduxHelpers.getMessageFromResults({
payload: {
response: {
status: 403,
statusText: 'Forbidden',
data: { lorem: 'ipsum', dolor: 'sit' }
},
message: 'Request failed with status code 403'
}
})
).toMatchSnapshot('response payload for 4XX');

expect(
reduxHelpers.getMessageFromResults([
{
Expand Down Expand Up @@ -129,6 +142,16 @@ describe('ReduxHelpers', () => {
})
).toMatchSnapshot('status');

expect(
reduxHelpers.getStatusFromResults({
payload: {
response: {
status: 403
}
}
})
).toMatchSnapshot('error response status');

expect(
reduxHelpers.getStatusFromResults([
{
Expand Down Expand Up @@ -169,6 +192,18 @@ describe('ReduxHelpers', () => {
})
).toMatchSnapshot('date');

expect(
reduxHelpers.getDateFromResults({
payload: {
response: {
headers: {
date: 'Tue, 11 Feb 2020 15:27:16 GMT'
}
}
}
})
).toMatchSnapshot('error response date');

expect(
reduxHelpers.getDateFromResults([
{
Expand Down Expand Up @@ -201,6 +236,21 @@ describe('ReduxHelpers', () => {
})
).toMatchSnapshot('data');

expect(
reduxHelpers.getDataFromResults({
payload: {
response: {
headers: {
date: 'Tue, 11 Feb 2020 15:27:16 GMT'
},
status: 403,
statusText: 'Forbidden',
data: { lorem: 'ipsum', dolor: 'sit' }
}
}
})
).toMatchSnapshot('error response data');

expect(
reduxHelpers.getDataFromResults({
payload: {
Expand Down
14 changes: 7 additions & 7 deletions src/redux/common/reduxHelpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,10 @@ const getMessageFromResults = results => {
return null;
}

const status = _get(updatedResults, 'response.status', updatedResults.status);
const statusResponse = _get(updatedResults, 'response.statusText', updatedResults.statusText);
const messageResponse = _get(updatedResults, 'response.message', updatedResults.message);
const dataResponse = _get(updatedResults, 'response.data', updatedResults.data);
const status = _get(updatedResults.response || updatedResults, 'status', 0);
const statusResponse = _get(updatedResults.response || updatedResults, 'statusText', '');
const messageResponse = _get(updatedResults, 'message');
const dataResponse = _get(updatedResults.response || updatedResults, 'data', null);
const formattedStatus = (status && `${status} `) || '';

if (messageResponse && typeof messageResponse === 'string') {
Expand Down Expand Up @@ -122,7 +122,7 @@ const getDateFromResults = results => {
return null;
}

return _get(updatedResults, 'headers.date', null);
return _get(updatedResults.response || updatedResults, 'headers.date', null);
};

/**
Expand All @@ -138,7 +138,7 @@ const getStatusFromResults = results => {
return 0;
}

return _get(updatedResults, 'response.status', updatedResults.status) || 0;
return _get(updatedResults.response || updatedResults, 'status', 0);
};

/**
Expand Down Expand Up @@ -198,7 +198,7 @@ const setStateProp = (prop, data, options) => {
* @returns {Array|object}
*/
const singlePromiseDataResponseFromArray = results => {
const updatedResults = results.payload || results;
const updatedResults = (results.payload && results.payload.response) || results.payload || results;

if (Array.isArray(updatedResults)) {
return updatedResults.map(value => value.data || {});
Expand Down
3 changes: 3 additions & 0 deletions src/redux/middleware/statusMiddleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const statusMiddleware = (config = {}) => {

if (httpStatus > 99) {
const message = reduxHelpers.getMessageFromResults({ ...action });
const data = reduxHelpers.getDataFromResults({ ...action });
const payloadConfig = { ...(action.payload.config || {}) };
const range = `${Math.floor(httpStatus / 100)}${rangeFiller}`;

Expand All @@ -37,6 +38,7 @@ const statusMiddleware = (config = {}) => {
type: `${range}${statusDelimiter}${rangeSuffix}`,
status: httpStatus,
config: payloadConfig,
data,
range,
message
});
Expand All @@ -47,6 +49,7 @@ const statusMiddleware = (config = {}) => {
type: `${httpStatus}${statusDelimiter}${statusSuffix}`,
status: httpStatus,
config: payloadConfig,
data,
range,
message
});
Expand Down

0 comments on commit 6032408

Please sign in to comment.