Skip to content

Commit

Permalink
fix(graphCardSelectors): handle malformed api response
Browse files Browse the repository at this point in the history
* apply fallback for handling expected, but missing, api properties
  • Loading branch information
cdcabrera committed Nov 15, 2019
1 parent 2fb501f commit cb1ab49
Show file tree
Hide file tree
Showing 3 changed files with 137 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,72 @@ Object {
}
`;

exports[`GraphCardSelectors should populate data on a RHEL product ID when api response provided mismatches index or date: rhelGraphCard: data populated on mismatch fulfilled 1`] = `
exports[`GraphCardSelectors should populate data on a RHEL product ID when the api response is missing expected properties: rhelGraphCard: data populated, missing properties 1`] = `
Object {
"endDate": 2019-07-20T00:00:00.000Z,
"error": false,
"fulfilled": true,
"graphData": Object {
"hypervisor": Array [
Object {
"date": 2019-09-04T00:00:00.000Z,
"x": 0,
"y": 0,
},
Object {
"date": 2019-09-05T00:00:00.000Z,
"x": 1,
"y": 1,
},
Object {
"date": 2019-09-06T00:00:00.000Z,
"x": 2,
"y": 0,
},
],
"sockets": Array [
Object {
"date": 2019-09-04T00:00:00.000Z,
"x": 0,
"y": 1,
},
Object {
"date": 2019-09-05T00:00:00.000Z,
"x": 1,
"y": 0,
},
Object {
"date": 2019-09-06T00:00:00.000Z,
"x": 2,
"y": 2,
},
],
"threshold": Array [
Object {
"date": 2019-09-04T00:00:00.000Z,
"x": 0,
"y": 100,
},
Object {
"date": 2019-09-05T00:00:00.000Z,
"x": 1,
"y": 0,
},
Object {
"date": 2019-09-06T00:00:00.000Z,
"x": 2,
"y": 100,
},
],
},
"graphGranularity": "daily",
"initialLoad": false,
"pending": false,
"startDate": 2019-06-20T00:00:00.000Z,
}
`;

exports[`GraphCardSelectors should populate data on a RHEL product ID when the api response provided mismatches index or date: rhelGraphCard: data populated on mismatch fulfilled 1`] = `
Object {
"endDate": 2019-07-20T00:00:00.000Z,
"error": false,
Expand Down
70 changes: 69 additions & 1 deletion src/redux/selectors/__tests__/graphCardSelectors.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ describe('GraphCardSelectors', () => {
).toMatchSnapshot('rhelGraphCard: granularity mismatch on component');
});

it('should populate data on a RHEL product ID when api response provided mismatches index or date', () => {
it('should populate data on a RHEL product ID when the api response provided mismatches index or date', () => {
const state = {
rhelGraph: {
component: {
Expand Down Expand Up @@ -152,6 +152,74 @@ describe('GraphCardSelectors', () => {
);
});

it('should populate data on a RHEL product ID when the api response is missing expected properties', () => {
const state = {
rhelGraph: {
component: {
graphGranularity: rhelApiTypes.RHSM_API_QUERY_GRANULARITY_TYPES.DAILY,
...dateHelpers.getRangedDateTime(rhelApiTypes.RHSM_API_QUERY_GRANULARITY_TYPES.DAILY)
},
capacity: {
fulfilled: true,
metaQuery: {
[rhelApiTypes.RHSM_API_QUERY_GRANULARITY]: rhelApiTypes.RHSM_API_QUERY_GRANULARITY_TYPES.DAILY
},
data: {
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA]: [
{
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.DATE]: '2019-09-04T00:00:00.000Z',
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.SOCKETS]: 100,
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HYPERVISOR_SOCKETS]: 50,
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.PHYSICAL_SOCKETS]: 50
},
{
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.DATE]: '2019-09-05T00:00:00.000Z',
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.SOCKETS]: 0,
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HYPERVISOR_SOCKETS]: 0,
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.PHYSICAL_SOCKETS]: 0
},
{
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.DATE]: '2019-09-06T00:00:00.000Z',
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.SOCKETS]: 100,
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HYPERVISOR_SOCKETS]: 50,
[rhelApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.PHYSICAL_SOCKETS]: 50
}
]
}
},
report: {
fulfilled: true,
metaQuery: {
[rhelApiTypes.RHSM_API_QUERY_GRANULARITY]: rhelApiTypes.RHSM_API_QUERY_GRANULARITY_TYPES.DAILY
},
data: {
[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA]: [
{
[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]: '2019-09-04T00:00:00.000Z',
[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.SOCKETS]: 2,
[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_SOCKETS]: 1
},
{
[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]: '2019-09-05T00:00:00.000Z',
[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.SOCKETS]: 2,
[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_SOCKETS]: 1
},
{
[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]: '2019-09-06T00:00:00.000Z',
[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.SOCKETS]: 4,
[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_SOCKETS]: 2
}
]
}
}
}
};

expect(graphCardSelectors.rhelGraphCard(state)).toMatchSnapshot(
'rhelGraphCard: data populated, missing properties'
);
});

it('should map a fulfilled RHEL product ID response to an aggregated output', () => {
const state = {
rhelGraph: {
Expand Down
4 changes: 2 additions & 2 deletions src/redux/selectors/graphCardSelectors.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,13 @@ const rhelGraphCardSelector = createSelector(
updatedData.graphData.sockets.push({
date,
x: index,
y: Number.parseInt(value[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_SOCKETS], 10)
y: Number.parseInt(value[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_SOCKETS], 10) || 0
});

updatedData.graphData.hypervisor.push({
date,
x: index,
y: Number.parseInt(value[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_SOCKETS], 10)
y: Number.parseInt(value[rhelApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_SOCKETS], 10) || 0
});

updatedData.graphData.threshold.push({
Expand Down

0 comments on commit cb1ab49

Please sign in to comment.