diff --git a/src/components/graphCard/__tests__/__snapshots__/graphCard.deprecated.test.js.snap b/src/components/graphCard/__tests__/__snapshots__/graphCard.deprecated.test.js.snap deleted file mode 100644 index ce9ecdbe5..000000000 --- a/src/components/graphCard/__tests__/__snapshots__/graphCard.deprecated.test.js.snap +++ /dev/null @@ -1,241 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`GraphCard Component should render a non-connected component: non-connected 1`] = ` - - -
- -
-
- -
- -
- - <h2 - className="pf-c-title pf-m-lg" - data-ouia-component-id="OUIA-Generated-Title-1" - data-ouia-component-type="PF4/Title" - data-ouia-safe={true} - /> - -
-
- -
- -
- -
-
- - -
-
- -
-
- - -
- - -
-
- -
-
- -
-
-
-`; - -exports[`GraphCard Component should render multiple states: error state 1`] = ` - - - - - - </CardTitle> - <CardActions - className="blur" - /> - </CardHeader> - </MinHeight> - <MinHeight - key="bodyMinHeight" - minHeight={0} - updateOnContent={false} - updateOnResize={true} - > - <CardBody> - <div - className="blur" - > - <GraphCardChart - graphData={ - { - "physicalSockets": [ - { - "date": 2019-06-01T00:00:00.000Z, - "x": 0, - "y": 10, - }, - { - "date": 2019-06-08T00:00:00.000Z, - "x": 1, - "y": 12, - }, - { - "date": 2019-06-25T00:00:00.000Z, - "x": 2, - "y": 3, - }, - ], - } - } - useProductGraphConfig={[Function]} - useProductGraphTallyQuery={[Function]} - /> - </div> - </CardBody> - </MinHeight> -</Card> -`; - -exports[`GraphCard Component should render multiple states: pending state 1`] = ` -<Card - className="curiosity-usage-graph" -> - <MinHeight - key="headerMinHeight" - minHeight={0} - updateOnContent={false} - updateOnResize={true} - > - <CardHeader> - <CardTitle> - <Title - headingLevel="h2" - size="lg" - /> - </CardTitle> - <CardActions - className="" - /> - </CardHeader> - </MinHeight> - <MinHeight - key="bodyMinHeight" - minHeight={0} - updateOnContent={false} - updateOnResize={true} - > - <CardBody> - <div - className="fadein" - > - <Loader - skeletonProps={ - { - "size": "sm", - } - } - tableProps={{}} - variant="graph" - /> - </div> - </CardBody> - </MinHeight> -</Card> -`; - -exports[`GraphCard Component should return an empty render when disabled: disabled component 1`] = `""`; diff --git a/src/components/graphCard/__tests__/__snapshots__/graphCardChart.deprecated.test.js.snap b/src/components/graphCard/__tests__/__snapshots__/graphCardChart.deprecated.test.js.snap deleted file mode 100644 index 2043e28d9..000000000 --- a/src/components/graphCard/__tests__/__snapshots__/graphCardChart.deprecated.test.js.snap +++ /dev/null @@ -1,80 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`GraphCardChart Component should filter result sets: filtered dataSets 1`] = ` -[ - { - "data": [ - { - "date": 2019-06-01T00:00:00.000Z, - "x": 0, - "y": 10, - }, - { - "date": 2019-06-08T00:00:00.000Z, - "x": 1, - "y": 12, - }, - { - "date": 2019-06-25T00:00:00.000Z, - "x": 2, - "y": 3, - }, - ], - "id": "loremIpsumSockets", - "isStacked": true, - "isThreshold": false, - "strokeWidth": 2, - }, - { - "data": [ - { - "date": 2019-06-01T00:00:00.000Z, - "x": 0, - "y": 10, - }, - { - "date": 2019-06-08T00:00:00.000Z, - "x": 1, - "y": 12, - }, - { - "date": 2019-06-25T00:00:00.000Z, - "x": 2, - "y": 3, - }, - ], - "id": "thresholdLoremIpsumSockets", - "isStacked": false, - "isThreshold": true, - "stroke": "#4cb140", - "strokeDasharray": "4,3", - "strokeWidth": 3, - }, -] -`; - -exports[`GraphCardChart Component should render a basic component: basic 1`] = ` -<Chart - chartLegend={[Function]} - chartTooltip={[Function]} - dataSets={[]} - key="chart_{"granularity":"Daily"}" - padding={ - { - "bottom": 75, - "left": 55, - "right": 55, - "top": 50, - } - } - themeColor="blue" - xAxisChartLabel={null} - xAxisFixLabelOverlap={true} - xAxisLabelIncrement={5} - xAxisTickFormat={[Function]} - xValueFormat={null} - yAxisChartLabel={null} - yAxisTickFormat={[Function]} - yValueFormat={null} -/> -`; diff --git a/src/components/graphCard/__tests__/graphCard.deprecated.test.js b/src/components/graphCard/__tests__/graphCard.deprecated.test.js deleted file mode 100644 index b295b6db9..000000000 --- a/src/components/graphCard/__tests__/graphCard.deprecated.test.js +++ /dev/null @@ -1,102 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; -import { GraphCard } from '../graphCard.deprecated'; -import { - RHSM_API_QUERY_GRANULARITY_TYPES as GRANULARITY_TYPES, - RHSM_API_QUERY_TYPES -} from '../../../types/rhsmApiTypes'; - -describe('GraphCard Component', () => { - it('should render a non-connected component', async () => { - const props = { - useProduct: () => ({ productId: 'lorem' }), - useProductGraphTallyQuery: () => ({ - [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY, - [RHSM_API_QUERY_TYPES.END_DATE]: '2021-02-24T23:59:59.999Z', - [RHSM_API_QUERY_TYPES.START_DATE]: '2021-01-25T00:00:00.000Z' - }) - }; - const component = await mountHookComponent(<GraphCard {...props} />); - - expect(component).toMatchSnapshot('non-connected'); - }); - - it('should render multiple states', async () => { - const props = { - graphData: { - physicalSockets: [ - { - date: new Date('2019-06-01T00:00:00Z'), - y: 10, - x: 0 - }, - { - date: new Date('2019-06-08T00:00:00Z'), - y: 12, - x: 1 - }, - { - date: new Date('2019-06-25T00:00:00Z'), - y: 3, - x: 2 - } - ] - }, - useProduct: () => ({ productId: 'lorem' }), - useProductGraphTallyQuery: () => ({ - [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY, - [RHSM_API_QUERY_TYPES.END_DATE]: '2021-02-24T23:59:59.999Z', - [RHSM_API_QUERY_TYPES.START_DATE]: '2021-01-25T00:00:00.000Z' - }) - }; - const component = await shallowHookComponent(<GraphCard {...props} />); - - component.setProps({ - error: true - }); - - expect(component).toMatchSnapshot('error state'); - - component.setProps({ - error: false, - pending: true - }); - - expect(component).toMatchSnapshot('pending state'); - }); - - it('should return an empty render when disabled', () => { - const props = { - isDisabled: true, - useProduct: () => ({ productId: 'lorem' }), - useProductGraphTallyQuery: () => ({ - [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY, - [RHSM_API_QUERY_TYPES.END_DATE]: '2021-02-24T23:59:59.999Z', - [RHSM_API_QUERY_TYPES.START_DATE]: '2021-01-25T00:00:00.000Z' - }) - }; - const component = shallow(<GraphCard {...props} />); - - expect(component).toMatchSnapshot('disabled component'); - }); - - it('should allow a custom display for card actions', async () => { - const actionDisplay = jest.fn(); - const props = { - useProduct: () => ({ productId: 'lorem' }), - useProductGraphConfig: () => ({ - settings: { - actionDisplay - } - }), - useProductGraphTallyQuery: () => ({ - [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY, - [RHSM_API_QUERY_TYPES.END_DATE]: '2021-02-24T23:59:59.999Z', - [RHSM_API_QUERY_TYPES.START_DATE]: '2021-01-25T00:00:00.000Z' - }) - }; - - shallow(<GraphCard {...props} />); - expect(actionDisplay).toHaveBeenCalledTimes(1); - }); -}); diff --git a/src/components/graphCard/__tests__/graphCardChart.deprecated.test.js b/src/components/graphCard/__tests__/graphCardChart.deprecated.test.js deleted file mode 100644 index da9eee73b..000000000 --- a/src/components/graphCard/__tests__/graphCardChart.deprecated.test.js +++ /dev/null @@ -1,95 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; -import { GraphCardChart } from '../graphCardChart.deprecated'; -import { - RHSM_API_QUERY_GRANULARITY_TYPES as GRANULARITY_TYPES, - RHSM_API_QUERY_TYPES -} from '../../../types/rhsmApiTypes'; -import { Chart } from '../../chart/chart'; - -describe('GraphCardChart Component', () => { - it('should render a basic component', () => { - const props = { - useProductGraphTallyQuery: () => ({ - [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY - }) - }; - const component = shallow(<GraphCardChart {...props} />); - - expect(component).toMatchSnapshot('basic'); - }); - - it('should filter result sets', async () => { - const props = { - graphData: { - loremIpsumSockets: [ - { - date: new Date('2019-06-01T00:00:00Z'), - y: 10, - x: 0 - }, - { - date: new Date('2019-06-08T00:00:00Z'), - y: 12, - x: 1 - }, - { - date: new Date('2019-06-25T00:00:00Z'), - y: 3, - x: 2 - } - ], - dolorSitSockets: [ - { - date: new Date('2019-06-01T00:00:00Z'), - y: 10, - x: 0 - }, - { - date: new Date('2019-06-08T00:00:00Z'), - y: 12, - x: 1 - }, - { - date: new Date('2019-06-25T00:00:00Z'), - y: 3, - x: 2 - } - ], - thresholdLoremIpsumSockets: [ - { - date: new Date('2019-06-01T00:00:00Z'), - y: 10, - x: 0 - }, - { - date: new Date('2019-06-08T00:00:00Z'), - y: 12, - x: 1 - }, - { - date: new Date('2019-06-25T00:00:00Z'), - y: 3, - x: 2 - } - ] - }, - useProductGraphConfig: () => ({ - filters: [ - { - id: 'loremIpsumSockets' - }, - { - id: 'thresholdLoremIpsumSockets' - } - ] - }), - useProductGraphTallyQuery: () => ({ - [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY - }) - }; - const component = await shallowHookComponent(<GraphCardChart {...props} />); - - expect(component.find(Chart).prop('dataSets')).toMatchSnapshot('filtered dataSets'); - }); -}); diff --git a/src/components/graphCard/graphCard.deprecated.js b/src/components/graphCard/graphCard.deprecated.js deleted file mode 100644 index f45b4acc9..000000000 --- a/src/components/graphCard/graphCard.deprecated.js +++ /dev/null @@ -1,157 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { Card, CardTitle, CardHeader, CardActions, CardBody, Title } from '@patternfly/react-core'; -import { useShallowCompareEffect } from 'react-use'; -import { connect, reduxActions, reduxSelectors } from '../../redux'; -import { useProduct, useProductGraphConfig, useProductGraphTallyQuery } from '../productView/productViewContext'; -import { helpers } from '../../common'; -import { RHSM_API_QUERY_TYPES } from '../../types/rhsmApiTypes'; -import { Loader } from '../loader/loader'; -import { MinHeight } from '../minHeight/minHeight'; -import { GraphCardChart } from './graphCardChart.deprecated'; - -/** - * A chart/graph card. - * - * @param {object} props - * @param {Node} props.cardTitle - * @param {Node} props.children - * @param {boolean} props.error - * @param {Function} props.getGraphReportsCapacity - * @param {object} props.graphData - * @param {object} props.meta - * @param {boolean} props.isDisabled - * @param {boolean} props.pending - * @param {Function} props.useProduct - * @param {Function} props.useProductGraphConfig - * @param {Function} props.useProductGraphTallyQuery - * @returns {Node} - */ -const GraphCard = ({ - cardTitle, - children, - error, - getGraphReportsCapacity, - graphData, - meta, - isDisabled, - pending, - useProduct: useAliasProduct, - useProductGraphConfig: useAliasProductGraphConfig, - useProductGraphTallyQuery: useAliasProductGraphTallyQuery -}) => { - const { productId } = useAliasProduct(); - const { settings } = useAliasProductGraphConfig(); - const query = useAliasProductGraphTallyQuery(); - - useShallowCompareEffect(() => { - const { - [RHSM_API_QUERY_TYPES.START_DATE]: startDate, - [RHSM_API_QUERY_TYPES.END_DATE]: endDate, - [RHSM_API_QUERY_TYPES.GRANULARITY]: granularity - } = query; - - if (!isDisabled && granularity && startDate && endDate && productId) { - getGraphReportsCapacity(productId, query); - } - }, [getGraphReportsCapacity, isDisabled, productId, query]); - - if (isDisabled) { - return null; - } - - let actionDisplay = null; - - if (typeof settings?.actionDisplay === 'function') { - actionDisplay = settings.actionDisplay({ data: { ...graphData }, meta: { ...meta } }); - } - - return ( - <Card className="curiosity-usage-graph"> - <MinHeight key="headerMinHeight"> - <CardHeader> - <CardTitle> - <Title headingLevel="h2" size="lg"> - {cardTitle} - - - - {actionDisplay} - {children} - - - - - -
- {pending && } - {!pending && } -
-
-
-
- ); -}; - -/** - * Prop types. - * - * @type {{getGraphReportsCapacity: Function, useProduct: Function, useProductGraphTallyQuery: Function, - * useProductGraphConfig: Function, children: Node, meta: object, pending: boolean, graphData: object, - * isDisabled: boolean, error: boolean, cardTitle: Node}} - */ -GraphCard.propTypes = { - cardTitle: PropTypes.node, - children: PropTypes.node, - error: PropTypes.bool, - getGraphReportsCapacity: PropTypes.func, - graphData: PropTypes.object, - isDisabled: PropTypes.bool, - meta: PropTypes.object, - pending: PropTypes.bool, - useProduct: PropTypes.func, - useProductGraphConfig: PropTypes.func, - useProductGraphTallyQuery: PropTypes.func -}; - -/** - * Default props. - * - * @type {{getGraphReportsCapacity: Function, useProduct: Function, useProductGraphTallyQuery: Function, - * useProductGraphConfig: Function, children: Node, meta: object, pending: boolean, graphData: object, - * isDisabled: boolean, error: boolean, cardTitle: Node}} - */ -GraphCard.defaultProps = { - cardTitle: null, - children: null, - error: false, - getGraphReportsCapacity: helpers.noop, - graphData: {}, - isDisabled: helpers.UI_DISABLED_GRAPH, - meta: {}, - pending: false, - useProduct, - useProductGraphConfig, - useProductGraphTallyQuery -}; - -/** - * Apply actions to props. - * - * @param {Function} dispatch - * @returns {object} - */ -const mapDispatchToProps = dispatch => ({ - getGraphReportsCapacity: (id, query) => dispatch(reduxActions.rhsm.getGraphReportsCapacity(id, query)) -}); - -/** - * Create a selector from applied state, props. - * - * @type {Function} - */ -const makeMapStateToProps = reduxSelectors.graphCard.makeGraphCard(); - -const ConnectedGraphCard = connect(makeMapStateToProps, mapDispatchToProps)(GraphCard); - -export { ConnectedGraphCard as default, ConnectedGraphCard, GraphCard }; diff --git a/src/components/graphCard/graphCardChart.deprecated.js b/src/components/graphCard/graphCardChart.deprecated.js deleted file mode 100644 index 14f2de8af..000000000 --- a/src/components/graphCard/graphCardChart.deprecated.js +++ /dev/null @@ -1,100 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { chart_color_green_300 as chartColorGreenDark } from '@patternfly/react-tokens'; -import { useProductGraphConfig, useProductGraphTallyQuery } from '../productView/productViewContext'; -import { graphCardHelpers } from './graphCardHelpers'; -import { Chart } from '../chart/chart'; -import GraphCardChartLegend from './graphCardChartLegend'; -import GraphCardChartTooltip from './graphCardChartTooltip'; -import { RHSM_API_QUERY_TYPES } from '../../types/rhsmApiTypes'; - -/** - * A chart/graph. - * - * @param {object} props - * @param {object} props.graphData - * @param {Function} props.useProductGraphConfig - * @param {Function} props.useProductGraphTallyQuery - * @returns {Node} - */ -const GraphCardChart = ({ - graphData, - useProductGraphConfig: useAliasProductGraphConfig, - useProductGraphTallyQuery: useAliasProductGraphTallyQuery -}) => { - const { filters } = useAliasProductGraphConfig(); - const query = useAliasProductGraphTallyQuery(); - const { [RHSM_API_QUERY_TYPES.GRANULARITY]: granularity } = query; - - const chartAreaProps = { - xAxisLabelIncrement: graphCardHelpers.getChartXAxisLabelIncrement(granularity), - xAxisTickFormat: ({ item, previousItem, tick }) => - graphCardHelpers.xAxisTickFormat({ - tick, - date: item.date, - previousDate: previousItem.date, - granularity - }), - yAxisTickFormat: graphCardHelpers.yAxisTickFormat - }; - - const filteredGraphData = data => { - const filtered = key => { - const tempFiltered = { - data: data[key], - id: key, - strokeWidth: 2, - isStacked: !/^threshold/.test(key), - isThreshold: /^threshold/.test(key) - }; - - if (/^threshold/.test(key)) { - tempFiltered.stroke = chartColorGreenDark.value; - tempFiltered.strokeDasharray = '4,3'; - tempFiltered.strokeWidth = 3; - } - - return tempFiltered; - }; - - if (filters?.length) { - return filters.map(value => Object.assign(filtered(value.id), value)); - } - - return Object.keys(data).map(key => filtered(key)); - }; - - return ( - } - chartTooltip={({ datum }) => } - /> - ); -}; - -/** - * Prop types. - * - * @type {{useProductGraphTallyQuery: Function, useProductGraphConfig: Function, graphData: object}} - */ -GraphCardChart.propTypes = { - graphData: PropTypes.object, - useProductGraphConfig: PropTypes.func, - useProductGraphTallyQuery: PropTypes.func -}; - -/** - * Default props. - * - * @type {{useProductGraphTallyQuery: Function, useProductGraphConfig: Function, graphData: object}} - */ -GraphCardChart.defaultProps = { - graphData: {}, - useProductGraphConfig, - useProductGraphTallyQuery -}; - -export { GraphCardChart as default, GraphCardChart }; diff --git a/src/components/i18n/__tests__/__snapshots__/i18n.test.js.snap b/src/components/i18n/__tests__/__snapshots__/i18n.test.js.snap index 16427babe..744f0ad0e 100644 --- a/src/components/i18n/__tests__/__snapshots__/i18n.test.js.snap +++ b/src/components/i18n/__tests__/__snapshots__/i18n.test.js.snap @@ -165,15 +165,6 @@ exports[`I18n Component should generate a predictable locale key output snapshot }, ], }, - { - "file": "./src/components/inventoryCard/inventoryList.deprecated.js", - "keys": [ - { - "key": "curiosity-inventory.tab", - "match": "t('curiosity-inventory.tab', { context: 'disabled' })", - }, - ], - }, { "file": "./src/components/inventoryTabs/inventoryTabs.js", "keys": [ @@ -272,18 +263,6 @@ exports[`I18n Component should generate a predictable locale key output snapshot { "file": "./src/components/productView/productView.js", "keys": [ - { - "key": "curiosity-graph.cardHeadingDescription", - "match": "t('curiosity-graph.cardHeadingDescription', { context: productId })", - }, - { - "key": "curiosity-graph.cardHeading", - "match": "t('curiosity-graph.cardHeading', { context: productId })", - }, - { - "key": "curiosity-inventory.tabHosts", - "match": "t('curiosity-inventory.tabHosts', { context: [productId] })", - }, { "key": "curiosity-inventory.tabHosts", "match": "t('curiosity-inventory.tabHosts', { context: [productId] })", @@ -744,10 +723,6 @@ exports[`I18n Component should have locale keys that exist in the default langua "file": "./src/components/inventoryCard/inventoryCard.js", "key": "curiosity-inventory.tab", }, - { - "file": "./src/components/inventoryCard/inventoryList.deprecated.js", - "key": "curiosity-inventory.tab", - }, { "file": "./src/components/toolbar/toolbarFieldGranularity.js", "key": "curiosity-toolbar.granularity", diff --git a/src/components/inventoryCard/__tests__/__snapshots__/inventoryList.deprecated.test.js.snap b/src/components/inventoryCard/__tests__/__snapshots__/inventoryList.deprecated.test.js.snap deleted file mode 100644 index bada807f7..000000000 --- a/src/components/inventoryCard/__tests__/__snapshots__/inventoryList.deprecated.test.js.snap +++ /dev/null @@ -1,561 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`InventoryList Component should handle expandable guests data: number of guests 1`] = ` - -`; - -exports[`InventoryList Component should handle expandable guests data: number of guests, and id 1`] = ` -
, - }, - ] - } - summary={null} - t={[Function]} - variant="compact" -/> -`; - -exports[`InventoryList Component should handle expandable guests data: number of guests, id, and NO expandable guests display 1`] = ` -
-`; - -exports[`InventoryList Component should handle updating paging through redux state: dispatch onPage 1`] = ` -[ - [ - [ - { - "offset": 10, - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_offset", - "viewId": "lorem", - }, - { - "limit": 10, - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_limit", - "viewId": "lorem", - }, - ], - ], - [ - [ - { - "offset": 20, - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_offset", - "viewId": "lorem", - }, - { - "limit": 10, - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_limit", - "viewId": "lorem", - }, - ], - ], - [ - [ - { - "offset": 0, - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_offset", - "viewId": "lorem", - }, - { - "limit": 20, - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_limit", - "viewId": "lorem", - }, - ], - ], - [ - [ - { - "offset": 0, - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_offset", - "viewId": "lorem", - }, - { - "limit": 50, - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_limit", - "viewId": "lorem", - }, - ], - ], -] -`; - -exports[`InventoryList Component should handle updating sorting through redux state: dispatch filter 1`] = ` -[ - [ - [ - { - "dir": "asc", - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_dir", - "viewId": "lorem", - }, - { - "sort": "sockets", - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_sort", - "viewId": "lorem", - }, - ], - ], - [ - [ - { - "dir": "desc", - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_dir", - "viewId": "lorem", - }, - { - "sort": "sockets", - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_sort", - "viewId": "lorem", - }, - ], - ], - [ - [ - { - "dir": "asc", - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_dir", - "viewId": "lorem", - }, - { - "sort": "sockets", - "type": "SET_QUERY_RHSM_HOSTS_INVENTORY_sort", - "viewId": "lorem", - }, - ], - ], -] -`; - -exports[`InventoryList Component should handle variations in data: filtered data 1`] = ` - - - - - - - - - - - - - -
-
- - - - - - - - - - - -`; - -exports[`InventoryList Component should handle variations in data: variable data 1`] = ` - - - - - - - - - - - - - -
-
- - - - - - - - - - - -`; - -exports[`InventoryList Component should render a non-connected component: non-connected 1`] = ` - - - - - - - - - - - - - -
-
- - - - - - - - - - - -`; - -exports[`InventoryList Component should return an empty render when disabled: disabled component 1`] = ` - - - - t(curiosity-inventory.tab, {"context":"disabled"}) - - - -`; diff --git a/src/components/inventoryCard/__tests__/inventoryList.deprecated.test.js b/src/components/inventoryCard/__tests__/inventoryList.deprecated.test.js deleted file mode 100644 index f3edf1184..000000000 --- a/src/components/inventoryCard/__tests__/inventoryList.deprecated.test.js +++ /dev/null @@ -1,152 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; -import { SortByDirection } from '@patternfly/react-table'; -import Table from '../../table/table'; -import { InventoryList } from '../inventoryList.deprecated'; -import { store } from '../../../redux'; -import { RHSM_API_QUERY_TYPES } from '../../../types/rhsmApiTypes'; - -describe('InventoryList Component', () => { - let mockDispatch; - - beforeEach(() => { - mockDispatch = jest.spyOn(store, 'dispatch').mockImplementation((type, data) => ({ type, data })); - }); - - afterEach(() => { - jest.clearAllMocks(); - }); - - it('should render a non-connected component', () => { - const props = { - query: { - [RHSM_API_QUERY_TYPES.LIMIT]: 10, - [RHSM_API_QUERY_TYPES.OFFSET]: 0 - }, - productId: 'lorem' - }; - - const component = shallow(); - expect(component).toMatchSnapshot('non-connected'); - }); - - it('should return an empty render when disabled', () => { - const props = { - query: { - [RHSM_API_QUERY_TYPES.LIMIT]: 10, - [RHSM_API_QUERY_TYPES.OFFSET]: 0 - }, - productId: 'lorem', - listData: [ - { lorem: 'ipsum', dolor: 'sit' }, - { lorem: 'sit', dolor: 'amet' } - ], - itemCount: 2, - isDisabled: true - }; - const component = shallow(); - - expect(component).toMatchSnapshot('disabled component'); - }); - - it('should handle variations in data', () => { - const props = { - query: { - [RHSM_API_QUERY_TYPES.LIMIT]: 10, - [RHSM_API_QUERY_TYPES.OFFSET]: 0 - }, - productId: 'lorem', - listData: [ - { lorem: 'ipsum', dolor: 'sit' }, - { lorem: 'sit', dolor: 'amet' } - ], - itemCount: 2 - }; - - const component = shallow(); - expect(component).toMatchSnapshot('variable data'); - - component.setProps({ - filterInventoryData: [{ id: 'lorem' }] - }); - - expect(component).toMatchSnapshot('filtered data'); - }); - - it('should handle expandable guests data', () => { - const props = { - query: { - [RHSM_API_QUERY_TYPES.LIMIT]: 10, - [RHSM_API_QUERY_TYPES.OFFSET]: 0 - }, - productId: 'lorem', - listData: [{ lorem: 'sit', dolor: 'amet', numberOfGuests: 1 }], - itemCount: 1 - }; - - const component = shallow(); - expect(component.find(Table)).toMatchSnapshot('number of guests'); - - component.setProps({ - ...props, - listData: [{ lorem: 'sit', dolor: 'amet', numberOfGuests: 1, subscriptionManagerId: 'loremIpsum' }] - }); - - expect(component.find(Table)).toMatchSnapshot('number of guests, and id'); - - component.setProps({ - ...props, - listData: [{ lorem: 'sit', dolor: 'amet', numberOfGuests: 2, subscriptionManagerId: 'loremIpsum' }], - settings: { - hasGuests: data => { - const { numberOfGuests = 0, subscriptionManagerId = null } = data; - return numberOfGuests > 2 && subscriptionManagerId; - } - } - }); - - expect(component.find(Table)).toMatchSnapshot('number of guests, id, and NO expandable guests display'); - }); - - it('should handle updating sorting through redux state', () => { - const props = { - query: { - [RHSM_API_QUERY_TYPES.LIMIT]: 10, - [RHSM_API_QUERY_TYPES.OFFSET]: 0 - }, - productId: 'lorem', - listData: [ - { lorem: 'ipsum', dolor: 'sit' }, - { lorem: 'sit', dolor: 'amet' } - ], - itemCount: 2 - }; - - const component = shallow(); - const componentInstance = component.instance(); - - componentInstance.onColumnSort({}, { direction: SortByDirection.asc, id: 'sockets' }); - componentInstance.onColumnSort({}, { direction: SortByDirection.desc, id: 'sockets' }); - componentInstance.onColumnSort({}, { direction: SortByDirection.asc, id: 'loremIpsumBrokenOnPurpose' }); - componentInstance.onColumnSort({}, { direction: SortByDirection.asc, id: 'sockets' }); - - expect(mockDispatch.mock.calls).toMatchSnapshot('dispatch filter'); - }); - - it('should handle updating paging through redux state', () => { - const props = { - query: {}, - productId: 'lorem' - }; - - const component = shallow(); - const componentInstance = component.instance(); - - componentInstance.onPage({ offset: 10, perPage: 10 }); - componentInstance.onPage({ offset: 20, perPage: 10 }); - componentInstance.onPage({ offset: 0, perPage: 20 }); - componentInstance.onPage({ offset: 0, perPage: 50 }); - - expect(mockDispatch.mock.calls).toMatchSnapshot('dispatch onPage'); - }); -}); diff --git a/src/components/inventoryCard/inventoryList.deprecated.js b/src/components/inventoryCard/inventoryList.deprecated.js deleted file mode 100644 index bacba5f70..000000000 --- a/src/components/inventoryCard/inventoryList.deprecated.js +++ /dev/null @@ -1,379 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import _isEqual from 'lodash/isEqual'; -import { SortByDirection, TableVariant } from '@patternfly/react-table'; -import { Bullseye, Card, CardActions, CardBody, CardFooter, CardHeader, CardHeaderMain } from '@patternfly/react-core'; -import { TableToolbar } from '@redhat-cloud-services/frontend-components/TableToolbar'; -import _camelCase from 'lodash/camelCase'; -import { helpers } from '../../common'; -import { connect, reduxActions, reduxSelectors, reduxTypes, store } from '../../redux'; -import Table from '../table/table'; -import { Loader } from '../loader/loader'; -import { MinHeight } from '../minHeight/minHeight'; -import GuestsList from '../inventoryGuests/guestsList.deprecated'; -import { inventoryCardHelpers } from './inventoryCardHelpers'; -import Pagination from '../pagination/pagination'; -import { ToolbarFieldDisplayName } from '../toolbar/toolbarFieldDisplayName'; -import { paginationHelpers } from '../pagination/paginationHelpers'; -import { - RHSM_API_QUERY_SORT_DIRECTION_TYPES as SORT_DIRECTION_TYPES, - RHSM_API_QUERY_SORT_TYPES as SORT_TYPES, - RHSM_API_QUERY_TYPES -} from '../../types/rhsmApiTypes'; -import { translate } from '../i18n/i18n'; - -/** - * A hosts system inventory component. - * - * @augments React.Component - * @fires onColumnSort - * @fires onPage - * @fires onUpdateInventoryData - */ -class InventoryList extends React.Component { - componentDidMount() { - this.onUpdateInventoryData(); - } - - componentDidUpdate(prevProps) { - const { productId, query } = this.props; - - if (productId !== prevProps.productId || !_isEqual(query, prevProps.query)) { - this.onUpdateInventoryData(); - } - } - - /** - * On column sort update state. - * - * @event onColumnSort - * @param {object} data pass-through inventory data. - * @param {object} sortParams - * @param {string} sortParams.direction - * @param {string} sortParams.id column identifier - */ - onColumnSort = (data, { direction, id }) => { - const { productId } = this.props; - const updatedSortColumn = Object.values(SORT_TYPES).find(value => _camelCase(value) === id); - let updatedDirection; - - if (!updatedSortColumn) { - if (helpers.DEV_MODE || helpers.REVIEW_MODE) { - console.warn(`Sorting can only be performed on select fields, confirm field ${id} is allowed.`); - } - return; - } - - switch (direction) { - case SortByDirection.desc: - updatedDirection = SORT_DIRECTION_TYPES.DESCENDING; - break; - default: - updatedDirection = SORT_DIRECTION_TYPES.ASCENDING; - break; - } - - store.dispatch([ - { - type: reduxTypes.query.SET_QUERY_RHSM_HOSTS_INVENTORY_TYPES[RHSM_API_QUERY_TYPES.DIRECTION], - viewId: productId, - [RHSM_API_QUERY_TYPES.DIRECTION]: updatedDirection - }, - { - type: reduxTypes.query.SET_QUERY_RHSM_HOSTS_INVENTORY_TYPES[RHSM_API_QUERY_TYPES.SORT], - viewId: productId, - [RHSM_API_QUERY_TYPES.SORT]: updatedSortColumn - } - ]); - }; - - /** - * On paging and on perPage events. - * - * @event onPage - * @param {object} params - * @param {number} params.offset - * @param {number} params.perPage - */ - onPage = ({ offset, perPage }) => { - const { productId } = this.props; - - store.dispatch([ - { - type: reduxTypes.query.SET_QUERY_RHSM_HOSTS_INVENTORY_TYPES[RHSM_API_QUERY_TYPES.OFFSET], - viewId: productId, - [RHSM_API_QUERY_TYPES.OFFSET]: offset - }, - { - type: reduxTypes.query.SET_QUERY_RHSM_HOSTS_INVENTORY_TYPES[RHSM_API_QUERY_TYPES.LIMIT], - viewId: productId, - [RHSM_API_QUERY_TYPES.LIMIT]: perPage - } - ]); - }; - - /** - * Call the RHSM APIs, apply filters. - * - * @event onUpdateInventoryData - */ - onUpdateInventoryData = () => { - const { getHostsInventory, isDisabled, productId, query } = this.props; - - if (!isDisabled && productId) { - getHostsInventory(productId, query); - } - }; - - /** - * Render an inventory table. - * - * @returns {Node} - */ - renderTable() { - const { filterGuestsData, filterInventoryData, listData, productId, query, session, settings } = this.props; - let updatedColumnHeaders = []; - - const updatedRows = listData.map(({ ...cellData }) => { - const { columnHeaders, cells } = inventoryCardHelpers.parseRowCellsListData({ - filters: inventoryCardHelpers.parseInventoryFilters({ - filters: filterInventoryData, - onSort: this.onColumnSort, - query - }), - cellData, - session - }); - - updatedColumnHeaders = columnHeaders; - - const guestsId = cellData?.subscriptionManagerId; - let hasGuests = cellData?.numberOfGuests > 0 && guestsId; - - // Apply hasGuests callback, return boolean - if (typeof settings?.hasGuests === 'function') { - hasGuests = settings.hasGuests({ ...cellData }, { ...session }); - } - - return { - cells, - expandedContent: - (hasGuests && ( - - )) || - undefined - }; - }); - - return ( -
- ); - } - - /** - * Render an inventory card. - * - * @returns {Node} - */ - render() { - const { - error, - filterInventoryData, - fulfilled, - isDisabled, - itemCount, - listData, - pending, - perPageDefault, - query, - t, - viewId - } = this.props; - - if (isDisabled) { - return ( - - - {t('curiosity-inventory.tab', { context: 'disabled' })} - - - ); - } - - const updatedPerPage = query[RHSM_API_QUERY_TYPES.LIMIT] || perPageDefault; - const updatedOffset = query[RHSM_API_QUERY_TYPES.OFFSET]; - const isLastPage = paginationHelpers.isLastPage(updatedOffset, updatedPerPage, itemCount); - - // Set an updated key to force refresh minHeight - const minHeightContentRefreshKey = - (fulfilled === true && itemCount < updatedPerPage && `bodyMinHeight-${updatedPerPage}-resize`) || - (fulfilled === true && isLastPage && `bodyMinHeight-${updatedPerPage}-resize`) || - (error === true && `bodyMinHeight-${updatedPerPage}-resize`) || - `bodyMinHeight-${updatedPerPage}`; - - return ( - - - - - - - - - - - - - -
- {pending && ( - cellWidth)) || [], - rowCount: listData?.length || updatedPerPage, - variant: TableVariant.compact - }} - /> - )} - {!pending && this.renderTable()} -
-
-
- - - - - - - -
- ); - } -} - -/** - * Prop types. - * - * @type {{settings:object, productId: string, listData: Array, session: object, pending: boolean, - * query: object, fulfilled: boolean, getHostsInventory: Function, error: boolean, - * itemCount: number, viewId: string, t: Function, filterInventoryData: Array, filterGuestsData: Array, - * perPageDefault: number, isDisabled: boolean}} - */ -InventoryList.propTypes = { - error: PropTypes.bool, - fulfilled: PropTypes.bool, - filterGuestsData: PropTypes.array, - filterInventoryData: PropTypes.arrayOf( - PropTypes.shape({ - id: PropTypes.string, - header: PropTypes.oneOfType([ - PropTypes.shape({ - title: PropTypes.node.isRequired - }), - PropTypes.func, - PropTypes.node - ]), - cell: PropTypes.oneOfType([ - PropTypes.shape({ - title: PropTypes.node.isRequired - }), - PropTypes.func, - PropTypes.node - ]) - }).isRequired - ), - getHostsInventory: PropTypes.func, - isDisabled: PropTypes.bool, - itemCount: PropTypes.number, - listData: PropTypes.array, - pending: PropTypes.bool, - productId: PropTypes.string.isRequired, - perPageDefault: PropTypes.number, - query: PropTypes.object.isRequired, - session: PropTypes.object, - settings: PropTypes.shape({ - hasGuests: PropTypes.func - }), - t: PropTypes.func, - viewId: PropTypes.string -}; - -/** - * Default props. - * - * @type {{settings: object, listData: Array, session: object, pending: boolean, fulfilled: boolean, - * getHostsInventory: Function, error: boolean, itemCount: number, viewId: string, t: translate, - * filterInventoryData: Array, filterGuestsData: Array, perPageDefault: number, isDisabled: boolean}} - */ -InventoryList.defaultProps = { - error: false, - fulfilled: false, - filterGuestsData: [], - filterInventoryData: [], - getHostsInventory: helpers.noop, - isDisabled: helpers.UI_DISABLED_TABLE_HOSTS, - itemCount: 0, - listData: [], - pending: false, - perPageDefault: 10, - session: {}, - settings: {}, - t: translate, - viewId: 'inventoryList' -}; - -/** - * Apply actions to props. - * - * @param {Function} dispatch - * @returns {object} - */ -const mapDispatchToProps = dispatch => ({ - getHostsInventory: (id, query) => dispatch(reduxActions.rhsm.getHostsInventory(id, query)) -}); - -/** - * Create a selector from applied state, props. - * - * @type {Function} - */ -const makeMapStateToProps = reduxSelectors.inventoryList.makeInventoryList(); - -const ConnectedInventoryList = connect(makeMapStateToProps, mapDispatchToProps)(InventoryList); - -export { ConnectedInventoryList as default, ConnectedInventoryList, InventoryList }; diff --git a/src/components/inventoryGuests/__tests__/__snapshots__/guestsList.deprecated.test.js.snap b/src/components/inventoryGuests/__tests__/__snapshots__/guestsList.deprecated.test.js.snap deleted file mode 100644 index 33829edc4..000000000 --- a/src/components/inventoryGuests/__tests__/__snapshots__/guestsList.deprecated.test.js.snap +++ /dev/null @@ -1,267 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`GuestsList Component should handle multiple display states: fulfilled 1`] = ` -
-
-
-
- - - -`; - -exports[`GuestsList Component should handle multiple display states: initial pending 1`] = ` -
- -
-`; - -exports[`GuestsList Component should handle multiple display states: paged pending 1`] = ` -
-
-
-
- -
-
-
-
-`; - -exports[`GuestsList Component should handle updating paging state: state 1`] = ` -{ - "initialState": { - "currentPage": 0, - "limit": 100, - "previousData": [], - }, - "scrollComplete": { - "currentPage": 1, - "limit": 100, - "previousData": [ - { - "dolor": "sit", - "lorem": "ipsum", - }, - ], - }, - "scrollProgress": { - "currentPage": 0, - "limit": 100, - "previousData": [], - }, -} -`; - -exports[`GuestsList Component should handle variations in data: filtered data 1`] = ` -
-
-
-
- - - -`; - -exports[`GuestsList Component should handle variations in data: variable data 1`] = ` -
-
-
-
- - - -`; - -exports[`GuestsList Component should render a non-connected component: non-connected 1`] = ` -
-
-
-
-
-`; diff --git a/src/components/inventoryGuests/__tests__/guestsList.deprecated.test.js b/src/components/inventoryGuests/__tests__/guestsList.deprecated.test.js deleted file mode 100644 index c775a3c82..000000000 --- a/src/components/inventoryGuests/__tests__/guestsList.deprecated.test.js +++ /dev/null @@ -1,83 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; -import { GuestsList } from '../guestsList.deprecated'; - -describe('GuestsList Component', () => { - it('should render a non-connected component', () => { - const props = { - id: 'lorem', - numberOfGuests: 0 - }; - - const component = shallow(); - expect(component).toMatchSnapshot('non-connected'); - }); - - it('should handle variations in data', () => { - const props = { - id: 'lorem', - numberOfGuests: 2, - listData: [ - { lorem: 'ipsum', dolor: 'sit' }, - { lorem: 'amet', dolor: 'amet' } - ] - }; - - const component = shallow(); - expect(component).toMatchSnapshot('variable data'); - - component.setProps({ - filterGuestsData: [{ id: 'lorem' }] - }); - - expect(component).toMatchSnapshot('filtered data'); - }); - - it('should handle multiple display states', () => { - const props = { - id: 'lorem', - numberOfGuests: 1, - pending: true - }; - - const component = shallow(); - expect(component).toMatchSnapshot('initial pending'); - - component.setProps({ - pending: false, - listData: [{ lorem: 'ipsum', dolor: 'sit' }] - }); - - expect(component).toMatchSnapshot('fulfilled'); - - component.setState({ currentPage: 1 }); - - component.setProps({ - pending: true, - listData: [] - }); - - expect(component).toMatchSnapshot('paged pending'); - }); - - it('should handle updating paging state', () => { - const props = { - id: 'lorem', - numberOfGuests: 111, - listData: [{ lorem: 'ipsum', dolor: 'sit' }] - }; - - const component = shallow(); - const componentInstance = component.instance(); - - const initialState = component.state(); - - componentInstance.onScroll({ target: { scrollHeight: 100, scrollTop: 20, clientHeight: 100 } }); - const scrollProgress = component.state(); - - componentInstance.onScroll({ target: { scrollHeight: 100, scrollTop: 0, clientHeight: 100 } }); - const scrollComplete = component.state(); - - expect({ initialState, scrollProgress, scrollComplete }).toMatchSnapshot('state'); - }); -}); diff --git a/src/components/inventoryGuests/guestsList.deprecated.js b/src/components/inventoryGuests/guestsList.deprecated.js deleted file mode 100644 index 7f371bc0c..000000000 --- a/src/components/inventoryGuests/guestsList.deprecated.js +++ /dev/null @@ -1,267 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { TableVariant } from '@patternfly/react-table'; -import { helpers } from '../../common'; -import { apiQueries, connect, reduxActions, reduxSelectors } from '../../redux'; -import { Loader } from '../loader/loader'; -import { inventoryCardHelpers } from '../inventoryCard/inventoryCardHelpers'; -import { RHSM_API_QUERY_TYPES } from '../../types/rhsmApiTypes'; -import { Table } from '../table/table'; - -/** - * ToDo: Consider removing the query prop entirely. - * The current API doesn't allow setting more than "offset" and "limit" - */ -/** - * ToDo: Review moving the "onScroll" layout into a standalone component. - */ -/** - * A system inventory guests component. - * - * @augments React.Component - * @fires onUpdateGuestsData - * @fires onScroll - */ -class GuestsList extends React.Component { - state = { currentPage: 0, limit: 100, previousData: [] }; - - componentDidMount() { - this.onUpdateGuestsData(); - } - - componentDidUpdate(prevProps, prevState) { - const { currentPage } = this.state; - - if (currentPage !== prevState.currentPage) { - this.onUpdateGuestsData(); - } - } - - /** - * Call the RHSM APIs, apply filters. - * - * @event onUpdateGuestsData - */ - onUpdateGuestsData = () => { - const { currentPage, limit } = this.state; - const { getHostsInventoryGuests, query, id } = this.props; - - if (id) { - const updatedQuery = { - ...query, - [RHSM_API_QUERY_TYPES.LIMIT]: limit, - [RHSM_API_QUERY_TYPES.OFFSET]: currentPage * limit || 0 - }; - - const { inventoryGuestsQuery } = apiQueries.parseRhsmQuery(updatedQuery); - getHostsInventoryGuests(id, inventoryGuestsQuery); - } - }; - - /** - * Update page state. - * - * @event onScroll - * @param {object} event - */ - onScroll = event => { - const { target } = event; - const { currentPage, limit, previousData } = this.state; - const { numberOfGuests, pending, listData } = this.props; - - const bottom = target.scrollHeight - target.scrollTop === target.clientHeight; - - if (numberOfGuests > (currentPage + 1) * limit && bottom && !pending) { - const newPage = currentPage + 1; - const updatedData = [...previousData, ...(listData || [])]; - - this.setState({ - previousData: updatedData, - currentPage: newPage - }); - } - }; - - renderLoader() { - const { currentPage } = this.state; - const { filterGuestsData, listData, pending } = this.props; - - if (currentPage > 0 && pending) { - const scrollLoader = ( - cellWidth)) || [], - rowCount: 0, - variant: TableVariant.compact - }} - /> - ); - - return
{scrollLoader}
; - } - - return null; - } - - /** - * ToDo: Consider moving the "meaning of life" into the default props on iteration. - * For everyone else... move the 42 into default props, possibly the 275. - */ - /** - * Render a guests table. - * - * @returns {Node} - */ - renderTable() { - const { previousData } = this.state; - const { filterGuestsData, listData, numberOfGuests, session } = this.props; - let updatedColumnHeaders = []; - - const updatedRows = [...previousData, ...(listData || [])].map(({ ...cellData }) => { - const { columnHeaders, cells } = inventoryCardHelpers.parseRowCellsListData({ - filters: filterGuestsData, - cellData, - session - }); - - updatedColumnHeaders = columnHeaders; - - return { - cells - }; - }); - - // Include the table header - let updatedHeight = (numberOfGuests + 1) * 42; - updatedHeight = (updatedHeight < 275 && updatedHeight) || 275; - - return ( -
-
- {this.renderLoader()} - {(updatedRows.length && ( -
- )) || - null} - - - ); - } - - /** - * Render a guest list table. - * - * @returns {Node} - */ - render() { - const { currentPage } = this.state; - const { error, filterGuestsData, listData, numberOfGuests, pending, perPageDefault } = this.props; - - return ( -
- {pending && currentPage === 0 && ( - cellWidth)) || [], - rowCount: numberOfGuests < perPageDefault ? numberOfGuests : perPageDefault, - variant: TableVariant.compact - }} - /> - )} - {((!pending && currentPage === 0) || currentPage > 0) && this.renderTable()} -
- ); - } -} - -/** - * Prop types. - * - * @type {{listData: Array, getHostsInventoryGuests: Function, session: object, filterGuestsData: object, - * pending: boolean, query: object, numberOfGuests: number, perPageDefault: number, id: string, - * error: boolean}} - */ -GuestsList.propTypes = { - error: PropTypes.bool, - filterGuestsData: PropTypes.arrayOf( - PropTypes.shape({ - id: PropTypes.string, - header: PropTypes.oneOfType([ - PropTypes.shape({ - title: PropTypes.node.isRequired - }), - PropTypes.func, - PropTypes.node - ]), - cell: PropTypes.oneOfType([ - PropTypes.shape({ - title: PropTypes.node.isRequired - }), - PropTypes.func, - PropTypes.node - ]) - }).isRequired - ), - getHostsInventoryGuests: PropTypes.func, - listData: PropTypes.array, - id: PropTypes.string.isRequired, - numberOfGuests: PropTypes.number.isRequired, - pending: PropTypes.bool, - perPageDefault: PropTypes.number, - query: PropTypes.object, - session: PropTypes.object -}; - -/** - * Default props. - * - * @type {{listData: Array, getHostsInventoryGuests: Function, session: object, filterGuestsData: Array, - * pending: boolean, query: object, perPageDefault: number, error: boolean}} - */ -GuestsList.defaultProps = { - error: false, - filterGuestsData: [], - getHostsInventoryGuests: helpers.noop, - listData: [], - pending: false, - perPageDefault: 5, - query: {}, - session: {} -}; - -/** - * Apply actions to props. - * - * @param {Function} dispatch - * @returns {object} - */ -const mapDispatchToProps = dispatch => ({ - getHostsInventoryGuests: (id, query) => dispatch(reduxActions.rhsm.getHostsInventoryGuests(id, query)) -}); - -/** - * Create a selector from applied state, props. - * - * @type {Function} - */ -const makeMapStateToProps = reduxSelectors.guestsList.makeGuestsList(); - -const ConnectedGuestsList = connect(makeMapStateToProps, mapDispatchToProps)(GuestsList); - -export { ConnectedGuestsList as default, ConnectedGuestsList, GuestsList }; diff --git a/src/components/productView/productView.js b/src/components/productView/productView.js index fb49498cd..51568f797 100644 --- a/src/components/productView/productView.js +++ b/src/components/productView/productView.js @@ -1,21 +1,14 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Tooltip, TooltipPosition } from '@patternfly/react-core'; -import InfoCircleIcon from '@patternfly/react-icons/dist/js/icons/info-circle-icon'; import { useRouteDetail } from '../../hooks/useRouter'; import { ProductViewContext } from './productViewContext'; import { PageLayout, PageHeader, PageSection, PageToolbar, PageMessages, PageColumns } from '../pageLayout/pageLayout'; -import { apiQueries } from '../../redux'; -import { ConnectedGraphCard as ConnectedGraphCardDeprecated } from '../graphCard/graphCard.deprecated'; import { GraphCard } from '../graphCard/graphCard'; import { Toolbar } from '../toolbar/toolbar'; -import { ConnectedInventoryList as ConnectedInventoryListDeprecated } from '../inventoryCard/inventoryList.deprecated'; import { InventoryCard } from '../inventoryCard/inventoryCard'; import { InventoryCardHosts } from '../inventoryCard/inventoryCardHosts'; import { helpers } from '../../common'; import BannerMessages from '../bannerMessages/bannerMessages'; -import { SelectPosition } from '../form/select'; -import { ToolbarFieldGranularity } from '../toolbar/toolbarFieldGranularity'; import InventoryTabs, { InventoryTab } from '../inventoryTabs/inventoryTabs'; import { InventoryCardSubscriptions } from '../inventoryCardSubscriptions/inventoryCardSubscriptions'; import { RHSM_INTERNAL_PRODUCT_DISPLAY_TYPES as DISPLAY_TYPES } from '../../services/rhsm/rhsmConstants'; @@ -26,62 +19,19 @@ import { translate } from '../i18n/i18n'; * * @param {object} props * @param {Function} props.t - * @param {Node|boolean} props.toolbarGraph - * @param {boolean} props.toolbarGraphDescription * @param {Function} props.useRouteDetail * @returns {Node} */ -const ProductView = ({ t, toolbarGraph, toolbarGraphDescription, useRouteDetail: useAliasRouteDetail }) => { +const ProductView = ({ t, useRouteDetail: useAliasRouteDetail }) => { const { productParameter: routeProductLabel, productConfig } = useAliasRouteDetail(); const renderProduct = config => { - const { - graphTallyQuery, - inventoryHostsQuery, - inventorySubscriptionsQuery, - query, - initialGuestsFilters, - initialInventoryFilters, - initialInventorySettings, - initialSubscriptionsInventoryFilters, - productDisplay, - productId, - viewId - } = config; + const { initialInventoryFilters, initialSubscriptionsInventoryFilters, productDisplay, productId, viewId } = config; if (!productId || !viewId) { return null; } - const { graphTallyQuery: initialGraphTallyQuery, inventoryHostsQuery: initialInventoryHostsQuery } = - apiQueries.parseRhsmQuery(query, { graphTallyQuery, inventoryHostsQuery, inventorySubscriptionsQuery }); - - let graphCardTooltip = null; - - if (toolbarGraphDescription) { - graphCardTooltip = ( - {t('curiosity-graph.cardHeadingDescription', { context: productId })}

} - position={TooltipPosition.top} - enableFlip={false} - distance={5} - entryDelay={100} - exitDelay={0} - > - - - -
- ); - } - - const graphCardTitle = ( - - {t('curiosity-graph.cardHeading', { context: productId })} - {graphCardTooltip} - - ); - return ( {productDisplay !== DISPLAY_TYPES.HOURLY && } @@ -89,19 +39,7 @@ const ProductView = ({ t, toolbarGraph, toolbarGraphDescription, useRouteDetail: - {productDisplay === DISPLAY_TYPES.LEGACY && ( - - {(React.isValidElement(toolbarGraph) && toolbarGraph) || - (toolbarGraph !== false && )} - - )} - {productDisplay !== DISPLAY_TYPES.LEGACY && } + - {!helpers.UI_DISABLED_TABLE_HOSTS && productDisplay === DISPLAY_TYPES.LEGACY && initialInventoryFilters && ( + {!helpers.UI_DISABLED_TABLE_HOSTS && productDisplay !== DISPLAY_TYPES.HOURLY && initialInventoryFilters && ( - + )} - {!helpers.UI_DISABLED_TABLE_HOSTS && - productDisplay !== DISPLAY_TYPES.LEGACY && - productDisplay !== DISPLAY_TYPES.HOURLY && - initialInventoryFilters && ( - - - - )} {!helpers.UI_DISABLED_TABLE_INSTANCES && productDisplay === DISPLAY_TYPES.HOURLY && initialInventoryFilters && ( @@ -175,24 +94,20 @@ const ProductView = ({ t, toolbarGraph, toolbarGraphDescription, useRouteDetail: /** * Prop types. * - * @type {{t: translate, toolbarGraph: (Node|boolean), toolbarGraphDescription: boolean, useRouteDetail: Function}} + * @type {{t: translate, useRouteDetail: Function}} */ ProductView.propTypes = { t: PropTypes.func, - toolbarGraph: PropTypes.oneOfType([PropTypes.node, PropTypes.bool]), - toolbarGraphDescription: PropTypes.bool, useRouteDetail: PropTypes.func }; /** * Default props. * - * @type {{t: translate, toolbarGraph: (Node|boolean), toolbarGraphDescription: boolean, useRouteDetail: Function}} + * @type {{t: translate, useRouteDetail: Function}} */ ProductView.defaultProps = { t: translate, - toolbarGraph: null, - toolbarGraphDescription: false, useRouteDetail }; diff --git a/src/redux/common/__tests__/__snapshots__/apiQueries.test.js.snap b/src/redux/common/__tests__/__snapshots__/apiQueries.test.js.snap deleted file mode 100644 index d36e85111..000000000 --- a/src/redux/common/__tests__/__snapshots__/apiQueries.test.js.snap +++ /dev/null @@ -1,37 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ApiQueries should have specific functions: apiQueries 1`] = ` -{ - "parseRhsmQuery": [Function], -} -`; - -exports[`ApiQueries should parse a query object into specific api facets: rhsm 1`] = ` -{ - "graphTallyQuery": { - "granularity": "Daily", - }, - "inventoryGuestsQuery": { - "limit": 10, - "offset": 0, - }, - "inventoryHostsQuery": { - "limit": 10, - "offset": 0, - }, - "inventorySubscriptionsQuery": { - "limit": 10, - "offset": 0, - }, - "query": { - "granularity": "Daily", - "limit": 10, - "offset": 0, - }, - "toolbarQuery": { - "granularity": "Daily", - "limit": 10, - "offset": 0, - }, -} -`; diff --git a/src/redux/common/__tests__/apiQueries.test.js b/src/redux/common/__tests__/apiQueries.test.js deleted file mode 100644 index e3452ec2e..000000000 --- a/src/redux/common/__tests__/apiQueries.test.js +++ /dev/null @@ -1,20 +0,0 @@ -import { apiQueries } from '../apiQueries'; -import { - RHSM_API_QUERY_GRANULARITY_TYPES as GRANULARITY_TYPES, - RHSM_API_QUERY_TYPES -} from '../../../types/rhsmApiTypes'; - -describe('ApiQueries', () => { - it('should have specific functions', () => { - expect(apiQueries).toMatchSnapshot('apiQueries'); - }); - - it('should parse a query object into specific api facets', () => { - const rhsmApiQuery = { - [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY, - [RHSM_API_QUERY_TYPES.LIMIT]: 10, - [RHSM_API_QUERY_TYPES.OFFSET]: 0 - }; - expect(apiQueries.parseRhsmQuery(rhsmApiQuery)).toMatchSnapshot('rhsm'); - }); -}); diff --git a/src/redux/common/apiQueries.js b/src/redux/common/apiQueries.js deleted file mode 100644 index 42404aa93..000000000 --- a/src/redux/common/apiQueries.js +++ /dev/null @@ -1,37 +0,0 @@ -import { rhsmConstants } from '../../services/rhsm/rhsmConstants'; -import { reduxHelpers } from './reduxHelpers'; - -/** - * Parse a query object against a schema for specific RHSM endpoints. - * - * @param {object} query - * @param {object} queries - * @returns {{graphTallyQuery: object, inventoryHostsQuery: object, inventorySubscriptionsQuery: object, - * query: object, inventoryGuestsQuery: object, toolbarQuery: object}} - */ -const parseRhsmQuery = (query = {}, queries = {}) => { - const { graphTallyQuery, inventoryGuestsQuery, inventoryHostsQuery, inventorySubscriptionsQuery } = queries; - - const updatedGraphTallyQuery = reduxHelpers.setApiQuery(query, rhsmConstants.RHSM_API_QUERY_SET_TALLY_CAPACITY_TYPES); - const updatedInventoryGuestsQuery = reduxHelpers.setApiQuery(query, rhsmConstants.RHSM_API_QUERY_SET_INVENTORY_TYPES); - const updatedInventoryHostsQuery = reduxHelpers.setApiQuery(query, rhsmConstants.RHSM_API_QUERY_SET_INVENTORY_TYPES); - const updatedInventorySubscriptionsQuery = reduxHelpers.setApiQuery( - query, - rhsmConstants.RHSM_API_QUERY_SET_INVENTORY_TYPES - ); - - return { - query, - graphTallyQuery: { ...updatedGraphTallyQuery, ...graphTallyQuery }, - inventoryGuestsQuery: { ...updatedInventoryGuestsQuery, ...inventoryGuestsQuery }, - inventoryHostsQuery: { ...updatedInventoryHostsQuery, ...inventoryHostsQuery }, - inventorySubscriptionsQuery: { ...updatedInventorySubscriptionsQuery, ...inventorySubscriptionsQuery }, - toolbarQuery: query - }; -}; - -const apiQueries = { - parseRhsmQuery -}; - -export { apiQueries as default, apiQueries }; diff --git a/src/redux/common/index.js b/src/redux/common/index.js index 8f4132fd7..979ae9b16 100644 --- a/src/redux/common/index.js +++ b/src/redux/common/index.js @@ -1,4 +1,3 @@ -import { apiQueries } from './apiQueries'; import { reduxHelpers } from './reduxHelpers'; -export { reduxHelpers as default, reduxHelpers, apiQueries }; +export { reduxHelpers as default, reduxHelpers }; diff --git a/src/redux/index.js b/src/redux/index.js index ed597257a..197de88e0 100644 --- a/src/redux/index.js +++ b/src/redux/index.js @@ -2,10 +2,9 @@ import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; import { store } from './store'; import { reduxActions } from './actions'; -import { reduxHelpers, apiQueries } from './common'; +import { reduxHelpers } from './common'; import { storeHooks } from './hooks'; import { reduxReducers } from './reducers'; -import { reduxSelectors } from './selectors'; import { reduxTypes } from './types'; /** @@ -18,15 +17,4 @@ import { reduxTypes } from './types'; const connectRouter = (mapStateToProps, mapDispatchToProps) => component => withRouter(connect(mapStateToProps, mapDispatchToProps)(component)); -export { - apiQueries, - connect, - connectRouter, - reduxActions, - reduxHelpers, - reduxReducers, - reduxSelectors, - reduxTypes, - store, - storeHooks -}; +export { connect, connectRouter, reduxActions, reduxHelpers, reduxReducers, reduxTypes, store, storeHooks }; diff --git a/src/redux/selectors/__tests__/__snapshots__/graphCardSelectors.test.js.snap b/src/redux/selectors/__tests__/__snapshots__/graphCardSelectors.test.js.snap deleted file mode 100644 index 96ea1ad22..000000000 --- a/src/redux/selectors/__tests__/__snapshots__/graphCardSelectors.test.js.snap +++ /dev/null @@ -1,2179 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`GraphCardSelectors should handle pending state on a product ID: pending 1`] = ` -{ - "error": false, - "fulfilled": false, - "graphData": {}, - "meta": {}, - "pending": true, - "query": { - "granularity": "Daily", - }, - "status": undefined, -} -`; - -exports[`GraphCardSelectors should map a fulfilled product ID response to an aggregated output: fulfilled 1`] = ` -{ - "error": false, - "fulfilled": true, - "graphData": { - "cloudCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 2, - "y": 0, - }, - ], - "cloudInstanceCount": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 2, - "y": 0, - }, - ], - "cloudSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 2, - "y": 0, - }, - ], - "coreHours": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 2, - "y": 0, - }, - ], - "cores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 2, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 1, - "y": 2, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 2, - "y": 4, - }, - ], - "hypervisorCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 1, - "y": 1, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 2, - "y": 2, - }, - ], - "hypervisorSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 1, - "y": 1, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 2, - "y": 2, - }, - ], - "instanceHours": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 2, - "y": 0, - }, - ], - "physicalCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 1, - "y": 1, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 2, - "y": 2, - }, - ], - "physicalSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 1, - "y": 1, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 2, - "y": null, - }, - ], - "sockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 2, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 1, - "y": 2, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 2, - "y": 4, - }, - ], - "thresholdCloudCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": true, - "x": 1, - "y": null, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": true, - "x": 2, - "y": null, - }, - ], - "thresholdCloudInstanceCount": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": true, - "x": 1, - "y": null, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": true, - "x": 2, - "y": null, - }, - ], - "thresholdCloudSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": true, - "x": 1, - "y": null, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": true, - "x": 2, - "y": null, - }, - ], - "thresholdCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": true, - "x": 1, - "y": null, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": true, - "x": 2, - "y": null, - }, - ], - "thresholdHypervisorCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": true, - "x": 1, - "y": null, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": true, - "x": 2, - "y": null, - }, - ], - "thresholdHypervisorSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 50, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": true, - "x": 1, - "y": null, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": true, - "x": 2, - "y": null, - }, - ], - "thresholdPhysicalCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": true, - "x": 1, - "y": null, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": true, - "x": 2, - "y": null, - }, - ], - "thresholdPhysicalSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 50, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": true, - "x": 1, - "y": null, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": true, - "x": 2, - "y": null, - }, - ], - "thresholdSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 100, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": true, - "x": 1, - "y": null, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": true, - "x": 2, - "y": null, - }, - ], - }, - "meta": { - "count": undefined, - "totalCoreHours": undefined, - "totalInstanceHours": undefined, - }, - "pending": false, - "query": { - "granularity": "Daily", - }, - "status": undefined, -} -`; - -exports[`GraphCardSelectors should pass minimal data on a product ID without a product ID provided: no product id error 1`] = ` -{ - "error": false, - "fulfilled": false, - "graphData": {}, - "meta": {}, - "pending": false, - "query": { - "granularity": "Daily", - }, - "status": undefined, -} -`; - -exports[`GraphCardSelectors should pass minimal data on a product ID without granularity provided: no granularity error 1`] = ` -{ - "error": false, - "fulfilled": false, - "graphData": {}, - "meta": {}, - "pending": false, - "query": {}, - "status": undefined, -} -`; - -exports[`GraphCardSelectors should pass minimal data on missing a reducer response: missing reducer error 1`] = ` -{ - "error": false, - "fulfilled": false, - "graphData": {}, - "meta": {}, - "pending": false, - "query": {}, - "status": undefined, -} -`; - -exports[`GraphCardSelectors should populate data from the in memory cache: cached data: ERROR, query mismatch 1`] = ` -{ - "error": false, - "fulfilled": true, - "graphData": { - "cloudCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "cloudInstanceCount": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "cloudSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "coreHours": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "cores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 2, - }, - ], - "hypervisorCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "hypervisorSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "instanceHours": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "physicalCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "physicalSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "sockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 2, - }, - ], - "thresholdCloudCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdCloudInstanceCount": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdCloudSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdHypervisorCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdHypervisorSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 50, - }, - ], - "thresholdPhysicalCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdPhysicalSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 50, - }, - ], - "thresholdSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 100, - }, - ], - }, - "meta": { - "count": undefined, - "totalCoreHours": undefined, - "totalInstanceHours": undefined, - }, - "pending": false, - "query": { - "granularity": "Daily", - }, - "status": undefined, -} -`; - -exports[`GraphCardSelectors should populate data from the in memory cache: cached data: cache used and pending 1`] = ` -{ - "error": false, - "fulfilled": true, - "graphData": { - "cloudCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "cloudInstanceCount": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "cloudSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "coreHours": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "cores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 2, - }, - ], - "hypervisorCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "hypervisorSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "instanceHours": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "physicalCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "physicalSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "sockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 2, - }, - ], - "thresholdCloudCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdCloudInstanceCount": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdCloudSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdHypervisorCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdHypervisorSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 50, - }, - ], - "thresholdPhysicalCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdPhysicalSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 50, - }, - ], - "thresholdSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 100, - }, - ], - }, - "meta": { - "count": undefined, - "totalCoreHours": undefined, - "totalInstanceHours": undefined, - }, - "pending": false, - "query": { - "granularity": "Daily", - }, - "status": undefined, -} -`; - -exports[`GraphCardSelectors should populate data from the in memory cache: cached data: initial fulfilled 1`] = ` -{ - "error": false, - "fulfilled": true, - "graphData": { - "cloudCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "cloudInstanceCount": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "cloudSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "coreHours": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "cores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 2, - }, - ], - "hypervisorCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "hypervisorSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "instanceHours": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "physicalCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "physicalSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "sockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 2, - }, - ], - "thresholdCloudCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdCloudInstanceCount": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdCloudSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdHypervisorCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdHypervisorSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 50, - }, - ], - "thresholdPhysicalCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdPhysicalSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 50, - }, - ], - "thresholdSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 100, - }, - ], - }, - "meta": { - "count": undefined, - "totalCoreHours": undefined, - "totalInstanceHours": undefined, - }, - "pending": false, - "query": { - "granularity": "Daily", - }, - "status": undefined, -} -`; - -exports[`GraphCardSelectors should populate data from the in memory cache: cached data: update and fulfilled 1`] = ` -{ - "error": false, - "fulfilled": true, - "graphData": { - "cloudCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "cloudInstanceCount": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "cloudSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "coreHours": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "cores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 2, - }, - ], - "hypervisorCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "hypervisorSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "instanceHours": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 0, - }, - ], - "physicalCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "physicalSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 1, - }, - ], - "sockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasCloudigradeData": true, - "hasCloudigradeMismatch": true, - "hasData": true, - "x": 0, - "y": 2, - }, - ], - "thresholdCloudCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdCloudInstanceCount": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdCloudSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdHypervisorCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdHypervisorSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 50, - }, - ], - "thresholdPhysicalCores": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 0, - }, - ], - "thresholdPhysicalSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 50, - }, - ], - "thresholdSockets": [ - { - "date": 2018-07-04T00:00:00.000Z, - "hasInfinite": false, - "x": 0, - "y": 100, - }, - ], - }, - "meta": { - "count": undefined, - "totalCoreHours": undefined, - "totalInstanceHours": undefined, - }, - "pending": false, - "query": { - "granularity": "Daily", - }, - "status": undefined, -} -`; - -exports[`GraphCardSelectors should populate data on a product ID when the api response is missing expected properties: data populated, missing properties 1`] = ` -{ - "error": false, - "fulfilled": true, - "graphData": { - "cloudCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 0, - }, - ], - "cloudInstanceCount": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 0, - }, - ], - "cloudSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 0, - }, - ], - "coreHours": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 0, - }, - ], - "cores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 0, - }, - ], - "hasCloudigradeData": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 0, - }, - ], - "hasCloudigradeMismatch": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 0, - }, - ], - "hasData": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 0, - }, - ], - "hypervisorCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 0, - }, - ], - "hypervisorSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 1, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 0, - }, - ], - "instanceHours": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 0, - }, - ], - "physicalCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 0, - }, - ], - "physicalSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 1, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 2, - }, - ], - "sockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 2, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 1, - "y": 2, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 2, - "y": 4, - }, - ], - "thresholdCloudCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": undefined, - "x": 2, - "y": 0, - }, - ], - "thresholdCloudInstanceCount": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": undefined, - "x": 2, - "y": 0, - }, - ], - "thresholdCloudSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": undefined, - "x": 2, - "y": 0, - }, - ], - "thresholdCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": undefined, - "x": 2, - "y": 0, - }, - ], - "thresholdHasInfiniteQuantity": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": undefined, - "x": 2, - "y": 0, - }, - ], - "thresholdHypervisorCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": undefined, - "x": 2, - "y": 0, - }, - ], - "thresholdHypervisorSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 50, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": undefined, - "x": 2, - "y": 50, - }, - ], - "thresholdPhysicalCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": undefined, - "x": 2, - "y": 0, - }, - ], - "thresholdPhysicalSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 50, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": undefined, - "x": 2, - "y": 50, - }, - ], - "thresholdSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 100, - }, - { - "date": 2019-09-05T00:00:00.000Z, - "hasInfinite": undefined, - "x": 1, - "y": 0, - }, - { - "date": 2019-09-06T00:00:00.000Z, - "hasInfinite": undefined, - "x": 2, - "y": 100, - }, - ], - }, - "meta": { - "count": undefined, - "totalCoreHours": undefined, - "totalInstanceHours": undefined, - }, - "pending": false, - "query": { - "granularity": "Daily", - }, - "status": undefined, -} -`; - -exports[`GraphCardSelectors should populate data on a product ID when the api response provided mismatches index or date: data populated on mismatch fulfilled 1`] = ` -{ - "error": false, - "fulfilled": true, - "graphData": { - "cloudCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - ], - "cloudInstanceCount": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - ], - "cloudSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - ], - "coreHours": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 1000.03, - }, - ], - "cores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 2, - }, - ], - "hasCloudigradeData": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - ], - "hasCloudigradeMismatch": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - ], - "hasData": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - ], - "hypervisorCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 1, - }, - ], - "hypervisorSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 1, - }, - ], - "instanceHours": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 0, - }, - ], - "physicalCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 1, - }, - ], - "physicalSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 1, - }, - ], - "sockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasCloudigradeData": undefined, - "hasCloudigradeMismatch": undefined, - "hasData": undefined, - "x": 0, - "y": 2, - }, - ], - "thresholdCloudCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - ], - "thresholdCloudInstanceCount": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - ], - "thresholdCloudSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - ], - "thresholdCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - ], - "thresholdDate": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - ], - "thresholdHasInfiniteQuantity": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - ], - "thresholdHypervisorCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - ], - "thresholdHypervisorSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - ], - "thresholdPhysicalCores": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - ], - "thresholdPhysicalSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - ], - "thresholdSockets": [ - { - "date": 2019-09-04T00:00:00.000Z, - "hasInfinite": undefined, - "x": 0, - "y": 0, - }, - ], - }, - "meta": { - "count": undefined, - "totalCoreHours": undefined, - "totalInstanceHours": undefined, - }, - "pending": false, - "query": { - "granularity": "Daily", - }, - "status": undefined, -} -`; - -exports[`GraphCardSelectors should return specific selectors: selectors 1`] = ` -{ - "graphCard": [Function], - "makeGraphCard": [Function], -} -`; diff --git a/src/redux/selectors/__tests__/__snapshots__/guestsListSelectors.test.js.snap b/src/redux/selectors/__tests__/__snapshots__/guestsListSelectors.test.js.snap deleted file mode 100644 index 74fc6d2f3..000000000 --- a/src/redux/selectors/__tests__/__snapshots__/guestsListSelectors.test.js.snap +++ /dev/null @@ -1,84 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`GuestsListSelectors should handle pending state on an ID: pending 1`] = ` -{ - "error": false, - "fulfilled": false, - "listData": [], - "pending": true, - "status": undefined, -} -`; - -exports[`GuestsListSelectors should map a fulfilled ID response to an aggregated output: fulfilled 1`] = ` -{ - "error": false, - "fulfilled": true, - "listData": [ - { - "displayName": "db.lorem.com", - "insightsId": "d6214a0b-b344-4778-831c-d53dcacb2da3", - "lastSeen": 2019-07-03T00:00:00.000Z, - "subscriptionManagerId": "adafd9d5-5b00-42fa-a6c9-75801d45cc6d", - }, - { - "displayName": "db.ipsum.com", - "insightsId": "9358e312-1c9f-42f4-8910-dcef6e970852", - "lastSeen": 2019-09-04T00:00:00.000Z, - "subscriptionManagerId": "b101a72f-1859-4489-acb8-d6d31c2578c4", - }, - ], - "pending": false, - "status": undefined, -} -`; - -exports[`GuestsListSelectors should pass minimal data on an ID without an ID provided: no id error 1`] = ` -{ - "error": false, - "fulfilled": false, - "listData": [], - "pending": false, - "status": undefined, -} -`; - -exports[`GuestsListSelectors should pass minimal data on missing a reducer response: missing reducer error 1`] = ` -{ - "error": false, - "fulfilled": false, - "listData": [], - "pending": false, - "status": undefined, -} -`; - -exports[`GuestsListSelectors should populate data on an ID when the api response is missing expected properties: data populated, missing properties 1`] = ` -{ - "error": false, - "fulfilled": true, - "listData": [ - { - "displayName": null, - "insightsId": "d6214a0b-b344-4778-831c-d53dcacb2da3", - "lastSeen": null, - "subscriptionManagerId": "adafd9d5-5b00-42fa-a6c9-75801d45cc6d", - }, - { - "displayName": "db.example.com", - "insightsId": "9358e312-1c9f-42f4-8910-dcef6e970852", - "lastSeen": 2019-09-04T00:00:00.000Z, - "subscriptionManagerId": null, - }, - ], - "pending": false, - "status": undefined, -} -`; - -exports[`GuestsListSelectors should return specific selectors: selectors 1`] = ` -{ - "guestsList": [Function], - "makeGuestsList": [Function], -} -`; diff --git a/src/redux/selectors/__tests__/__snapshots__/inventoryListSelectors.test.js.snap b/src/redux/selectors/__tests__/__snapshots__/inventoryListSelectors.test.js.snap deleted file mode 100644 index 017618112..000000000 --- a/src/redux/selectors/__tests__/__snapshots__/inventoryListSelectors.test.js.snap +++ /dev/null @@ -1,275 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`InventoryListSelectors should handle pending state on a product ID: pending 1`] = ` -{ - "error": false, - "fulfilled": false, - "itemCount": 0, - "listData": [], - "pending": true, - "query": {}, - "status": undefined, -} -`; - -exports[`InventoryListSelectors should map a fulfilled product ID response to an aggregated output: fulfilled 1`] = ` -{ - "error": false, - "fulfilled": true, - "itemCount": 0, - "listData": [ - { - "cloudProvider": null, - "coreHours": null, - "cores": 2, - "displayName": "db.lorem.com", - "hardwareType": "physical", - "insightsId": "d6214a0b-b344-4778-831c-d53dcacb2da3", - "inventoryId": null, - "lastSeen": 2019-07-03T00:00:00.000Z, - "measurementType": null, - "numberOfGuests": null, - "sockets": 1, - "subscriptionManagerId": null, - }, - { - "cloudProvider": null, - "coreHours": null, - "cores": 2, - "displayName": "db.ipsum.com", - "hardwareType": "physical", - "insightsId": "9358e312-1c9f-42f4-8910-dcef6e970852", - "inventoryId": null, - "lastSeen": 2019-09-04T00:00:00.000Z, - "measurementType": null, - "numberOfGuests": null, - "sockets": 1, - "subscriptionManagerId": null, - }, - ], - "pending": false, - "query": { - "sla": "Premium", - }, - "status": undefined, -} -`; - -exports[`InventoryListSelectors should pass minimal data on a product ID without a product ID provided: no product id error 1`] = ` -{ - "error": false, - "fulfilled": false, - "itemCount": 0, - "listData": [], - "pending": false, - "query": {}, - "status": undefined, -} -`; - -exports[`InventoryListSelectors should pass minimal data on missing a reducer response: missing reducer error 1`] = ` -{ - "error": false, - "fulfilled": false, - "itemCount": 0, - "listData": [], - "pending": false, - "query": {}, - "status": undefined, -} -`; - -exports[`InventoryListSelectors should populate data from the in memory cache: cached data: ERROR, cancelled API call, maintain prior response 1`] = ` -{ - "error": false, - "fulfilled": true, - "itemCount": 0, - "listData": [ - { - "cloudProvider": null, - "coreHours": null, - "cores": 2, - "displayName": "db.ipsum.com", - "hardwareType": "physical", - "insightsId": "9358e312-1c9f-42f4-8910-dcef6e970852", - "inventoryId": null, - "lastSeen": 2019-09-04T00:00:00.000Z, - "measurementType": null, - "numberOfGuests": null, - "sockets": 1, - "subscriptionManagerId": null, - }, - ], - "pending": false, - "query": { - "sla": "Premium", - }, - "status": undefined, -} -`; - -exports[`InventoryListSelectors should populate data from the in memory cache: cached data: cache used and pending 1`] = ` -{ - "error": false, - "fulfilled": true, - "itemCount": 0, - "listData": [ - { - "cloudProvider": null, - "coreHours": null, - "cores": 2, - "displayName": "db.lorem.com", - "hardwareType": "physical", - "insightsId": "d6214a0b-b344-4778-831c-d53dcacb2da3", - "inventoryId": null, - "lastSeen": 2019-07-03T00:00:00.000Z, - "measurementType": null, - "numberOfGuests": null, - "sockets": 1, - "subscriptionManagerId": null, - }, - ], - "pending": false, - "query": { - "sla": "Premium", - }, - "status": undefined, -} -`; - -exports[`InventoryListSelectors should populate data from the in memory cache: cached data: initial fulfilled 1`] = ` -{ - "error": false, - "fulfilled": true, - "itemCount": 0, - "listData": [ - { - "cloudProvider": null, - "coreHours": null, - "cores": 2, - "displayName": "db.lorem.com", - "hardwareType": "physical", - "insightsId": "d6214a0b-b344-4778-831c-d53dcacb2da3", - "inventoryId": null, - "lastSeen": 2019-07-03T00:00:00.000Z, - "measurementType": null, - "numberOfGuests": null, - "sockets": 1, - "subscriptionManagerId": null, - }, - ], - "pending": false, - "query": { - "sla": "Premium", - }, - "status": undefined, -} -`; - -exports[`InventoryListSelectors should populate data from the in memory cache: cached data: query updated and fulfilled 1`] = ` -{ - "error": false, - "fulfilled": true, - "itemCount": 0, - "listData": [ - { - "cloudProvider": null, - "coreHours": null, - "cores": 3, - "displayName": "db.ipsum-lorem.com", - "hardwareType": "virtual", - "insightsId": "XXXXXXXXX-1c9f-42f4-8910-dcef6e970852", - "inventoryId": null, - "lastSeen": 2019-09-05T00:00:00.000Z, - "measurementType": null, - "numberOfGuests": null, - "sockets": 2, - "subscriptionManagerId": null, - }, - ], - "pending": false, - "query": { - "sla": "", - }, - "status": undefined, -} -`; - -exports[`InventoryListSelectors should populate data from the in memory cache: cached data: updated and fulfilled 1`] = ` -{ - "error": false, - "fulfilled": true, - "itemCount": 0, - "listData": [ - { - "cloudProvider": null, - "coreHours": null, - "cores": 2, - "displayName": "db.ipsum.com", - "hardwareType": "physical", - "insightsId": "9358e312-1c9f-42f4-8910-dcef6e970852", - "inventoryId": null, - "lastSeen": 2019-09-04T00:00:00.000Z, - "measurementType": null, - "numberOfGuests": null, - "sockets": 1, - "subscriptionManagerId": null, - }, - ], - "pending": false, - "query": { - "sla": "Premium", - }, - "status": undefined, -} -`; - -exports[`InventoryListSelectors should populate data on a product ID when the api response is missing expected properties: data populated, missing properties 1`] = ` -{ - "error": false, - "fulfilled": true, - "itemCount": 0, - "listData": [ - { - "cloudProvider": null, - "coreHours": null, - "cores": 2, - "displayName": null, - "hardwareType": null, - "insightsId": "d6214a0b-b344-4778-831c-d53dcacb2da3", - "inventoryId": null, - "lastSeen": null, - "measurementType": null, - "numberOfGuests": null, - "sockets": 1, - "subscriptionManagerId": null, - }, - { - "cloudProvider": null, - "coreHours": null, - "cores": null, - "displayName": "db.example.com", - "hardwareType": "physical", - "insightsId": "9358e312-1c9f-42f4-8910-dcef6e970852", - "inventoryId": null, - "lastSeen": 2019-09-04T00:00:00.000Z, - "measurementType": null, - "numberOfGuests": null, - "sockets": null, - "subscriptionManagerId": null, - }, - ], - "pending": false, - "query": { - "sla": "Premium", - }, - "status": undefined, -} -`; - -exports[`InventoryListSelectors should return specific selectors: selectors 1`] = ` -{ - "inventoryList": [Function], - "makeInventoryList": [Function], -} -`; diff --git a/src/redux/selectors/__tests__/__snapshots__/userSelectors.test.js.snap b/src/redux/selectors/__tests__/__snapshots__/userSelectors.test.js.snap deleted file mode 100644 index c63ab6ee4..000000000 --- a/src/redux/selectors/__tests__/__snapshots__/userSelectors.test.js.snap +++ /dev/null @@ -1,76 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`UserSelectors should pass error state data through response: error state data 1`] = ` -{ - "session": { - "admin": false, - "authorized": {}, - "entitled": false, - "error": true, - "errorCodes": [ - "loremIpsum", - ], - "errorMessage": "lorem ipsum", - "permissions": {}, - "status": 403, - }, -} -`; - -exports[`UserSelectors should pass existing state data through response: existing state data 1`] = ` -{ - "session": { - "admin": false, - "authorized": {}, - "entitled": false, - "error": false, - "permissions": {}, - }, -} -`; - -exports[`UserSelectors should pass minimal data on missing a reducer response: missing reducer error 1`] = ` -{ - "session": { - "admin": false, - "authorized": {}, - "entitled": false, - "error": false, - "permissions": {}, - }, -} -`; - -exports[`UserSelectors should pass transformed data on fulfill: fulfilled state data 1`] = ` -{ - "session": { - "admin": false, - "authorized": { - "subscriptions": true, - }, - "entitled": true, - "error": false, - "permissions": [ - { - "subscriptions": { - "all": true, - "resources": { - "*": { - "*": [], - "loremCustom": [], - "read": [], - }, - }, - }, - }, - ], - }, -} -`; - -exports[`UserSelectors should return specific selectors: selectors 1`] = ` -{ - "makeUserSession": [Function], - "userSession": [Function], -} -`; diff --git a/src/redux/selectors/__tests__/graphCardSelectors.test.js b/src/redux/selectors/__tests__/graphCardSelectors.test.js deleted file mode 100644 index 0a3a3c789..000000000 --- a/src/redux/selectors/__tests__/graphCardSelectors.test.js +++ /dev/null @@ -1,413 +0,0 @@ -import graphCardSelectors from '../graphCardSelectors'; -import { - RHSM_API_QUERY_GRANULARITY_TYPES as GRANULARITY_TYPES, - RHSM_API_QUERY_TYPES, - rhsmApiTypes -} from '../../../types/rhsmApiTypes'; - -describe('GraphCardSelectors', () => { - it('should return specific selectors', () => { - expect(graphCardSelectors).toMatchSnapshot('selectors'); - }); - - it('should pass minimal data on missing a reducer response', () => { - const state = {}; - expect(graphCardSelectors.graphCard(state)).toMatchSnapshot('missing reducer error'); - }); - - it('should pass minimal data on a product ID without granularity provided', () => { - const props = { - viewId: 'test', - productId: 'Lorem Ipsum ID missing granularity' - }; - const state = { - graph: { - reportCapacity: { - fulfilled: true, - metaId: 'Lorem Ipsum ID missing granularity', - metaQuery: {}, - data: [ - { [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA]: [] }, - { [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA]: [] } - ] - } - } - }; - - expect(graphCardSelectors.graphCard(state, props)).toMatchSnapshot('no granularity error'); - }); - - it('should pass minimal data on a product ID without a product ID provided', () => { - const props = { - viewId: 'test', - productId: undefined, - query: { [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY } - }; - const state = { - graph: { - reportCapacity: { - fulfilled: true, - metaId: undefined, - metaQuery: { - [RHSM_API_QUERY_TYPES.GRANULARITY]: rhsmApiTypes.RHSM_API_QUERY_GRANULARITY_TYPES.DAILY - }, - data: [ - { [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA]: [] }, - { [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA]: [] } - ] - } - } - }; - - expect(graphCardSelectors.graphCard(state, props)).toMatchSnapshot('no product id error'); - }); - - it('should handle pending state on a product ID', () => { - const props = { - viewId: 'test', - productId: 'Lorem Ipsum ID pending state', - query: { [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY } - }; - const state = { - graph: { - reportCapacity: { - 'Lorem Ipsum ID pending state': { - pending: true, - metaId: 'Lorem Ipsum ID pending state', - metaQuery: { - [RHSM_API_QUERY_TYPES.GRANULARITY]: rhsmApiTypes.RHSM_API_QUERY_GRANULARITY_TYPES.DAILY - }, - data: [ - { [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA]: [] }, - { [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA]: [] } - ] - } - } - } - }; - - expect(graphCardSelectors.graphCard(state, props)).toMatchSnapshot('pending'); - }); - - it('should populate data on a product ID when the api response provided mismatches index or date', () => { - const props = { - viewId: 'test', - productId: 'Lorem Ipsum mismatched index or date', - query: { [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY } - }; - const state = { - graph: { - reportCapacity: { - 'Lorem Ipsum mismatched index or date': { - fulfilled: true, - metaId: 'Lorem Ipsum mismatched index or date', - metaQuery: { - [RHSM_API_QUERY_TYPES.GRANULARITY]: rhsmApiTypes.RHSM_API_QUERY_GRANULARITY_TYPES.DAILY - }, - data: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]: '2019-09-04T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.CORES]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.CORE_HOURS]: 1000.02578, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.SOCKETS]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_CORES]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_CORES]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_SOCKETS]: 1 - } - ] - }, - { [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA]: [] } - ] - } - } - } - }; - - expect(graphCardSelectors.graphCard(state, props)).toMatchSnapshot('data populated on mismatch fulfilled'); - }); - - it('should populate data on a product ID when the api response is missing expected properties', () => { - const props = { - viewId: 'test', - productId: 'Lorem Ipsum missing expected properties', - query: { [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY } - }; - const state = { - graph: { - reportCapacity: { - 'Lorem Ipsum missing expected properties': { - fulfilled: true, - metaId: 'Lorem Ipsum missing expected properties', - metaQuery: { - [RHSM_API_QUERY_TYPES.GRANULARITY]: rhsmApiTypes.RHSM_API_QUERY_GRANULARITY_TYPES.DAILY - }, - data: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]: '2019-09-04T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.SOCKETS]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_SOCKETS]: 1 - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]: '2019-09-05T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.SOCKETS]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_SOCKETS]: 1 - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]: '2019-09-06T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.SOCKETS]: 4, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_SOCKETS]: 2 - } - ] - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.DATE]: '2019-09-04T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.SOCKETS]: 100, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HYPERVISOR_SOCKETS]: 50, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.PHYSICAL_SOCKETS]: 50 - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.DATE]: '2019-09-05T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.SOCKETS]: 0, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HYPERVISOR_SOCKETS]: 0, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.PHYSICAL_SOCKETS]: 0 - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.DATE]: '2019-09-06T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.SOCKETS]: 100, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HYPERVISOR_SOCKETS]: 50, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.PHYSICAL_SOCKETS]: 50 - } - ] - } - ] - } - } - } - }; - - expect(graphCardSelectors.graphCard(state, props)).toMatchSnapshot('data populated, missing properties'); - }); - - it('should map a fulfilled product ID response to an aggregated output', () => { - const props = { - viewId: 'test', - productId: 'Lorem Ipsum fulfilled aggregated output', - query: { [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY } - }; - const state = { - graph: { - reportCapacity: { - 'Lorem Ipsum fulfilled aggregated output': { - fulfilled: true, - metaId: 'Lorem Ipsum fulfilled aggregated output', - metaQuery: { - [RHSM_API_QUERY_TYPES.GRANULARITY]: rhsmApiTypes.RHSM_API_QUERY_GRANULARITY_TYPES.DAILY - }, - data: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]: '2019-09-04T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.CORES]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.SOCKETS]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_CORES]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_CORES]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_DATA]: true, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_CLOUDIGRADE_DATA]: true, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_CLOUDIGRADE_MISMATCH]: true - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]: '2019-09-05T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.CORES]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.SOCKETS]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_CORES]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_CORES]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_DATA]: true, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_CLOUDIGRADE_DATA]: true, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_CLOUDIGRADE_MISMATCH]: true - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]: '2019-09-06T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.CORES]: 4, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.SOCKETS]: 4, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_CORES]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_SOCKETS]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_CORES]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_SOCKETS]: null, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_DATA]: true, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_CLOUDIGRADE_DATA]: true, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_CLOUDIGRADE_MISMATCH]: true - } - ] - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.DATE]: '2019-09-04T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.SOCKETS]: 100, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HYPERVISOR_SOCKETS]: 50, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.PHYSICAL_SOCKETS]: 50, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HAS_INFINITE]: false - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.DATE]: '2019-09-05T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.SOCKETS]: 0, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HYPERVISOR_SOCKETS]: 0, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.PHYSICAL_SOCKETS]: 0, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HAS_INFINITE]: true - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.DATE]: '2019-09-06T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.SOCKETS]: 100, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HYPERVISOR_SOCKETS]: null, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.PHYSICAL_SOCKETS]: 50, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HAS_INFINITE]: true - } - ] - } - ] - } - } - } - }; - - expect(graphCardSelectors.graphCard(state, props)).toMatchSnapshot('fulfilled'); - }); - - it('should populate data from the in memory cache', () => { - const props = { - viewId: 'cache-test', - productId: 'Lorem Ipsum ID cached', - query: { [RHSM_API_QUERY_TYPES.GRANULARITY]: GRANULARITY_TYPES.DAILY } - }; - const stateInitialFulfilled = { - graph: { - reportCapacity: { - 'Lorem Ipsum ID cached': { - fulfilled: true, - metaId: 'Lorem Ipsum ID cached', - metaQuery: { - [RHSM_API_QUERY_TYPES.GRANULARITY]: rhsmApiTypes.RHSM_API_QUERY_GRANULARITY_TYPES.DAILY - }, - data: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]: '2019-09-04T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.CORES]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.SOCKETS]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_CORES]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_CORES]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_DATA]: true, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_CLOUDIGRADE_DATA]: true, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_CLOUDIGRADE_MISMATCH]: true - } - ] - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.DATE]: '2019-09-04T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.SOCKETS]: 100, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HYPERVISOR_SOCKETS]: 50, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.PHYSICAL_SOCKETS]: 50, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HAS_INFINITE]: false - } - ] - } - ] - } - } - } - }; - - expect(graphCardSelectors.graphCard(stateInitialFulfilled, props)).toMatchSnapshot( - 'cached data: initial fulfilled' - ); - - const statePending = { - graph: { - reportCapacity: { - 'Lorem Ipsum ID cached': { - ...stateInitialFulfilled.graph.reportCapacity['Lorem Ipsum ID cached'], - pending: true - } - } - } - }; - - expect(graphCardSelectors.graphCard(statePending, props)).toMatchSnapshot('cached data: cache used and pending'); - - const stateFulfilled = { - graph: { - reportCapacity: { - 'Lorem Ipsum ID cached': { - ...stateInitialFulfilled.graph.reportCapacity['Lorem Ipsum ID cached'], - fulfilled: true, - data: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]: '2018-07-04T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.CORES]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.SOCKETS]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_CORES]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HYPERVISOR_SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_CORES]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.PHYSICAL_SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_DATA]: true, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_CLOUDIGRADE_DATA]: true, - [rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_CLOUDIGRADE_MISMATCH]: true - } - ] - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.DATE]: '2018-07-04T00:00:00.000Z', - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.SOCKETS]: 100, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HYPERVISOR_SOCKETS]: 50, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.PHYSICAL_SOCKETS]: 50, - [rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HAS_INFINITE]: false - } - ] - } - ] - } - } - } - }; - - expect(graphCardSelectors.graphCard(stateFulfilled, props)).toMatchSnapshot('cached data: update and fulfilled'); - - const stateFulfilledQueryMismatch = { - graph: { - reportCapacity: { - 'Lorem Ipsum ID cached': { - ...stateInitialFulfilled.graph.reportCapacity['Lorem Ipsum ID cached'], - metaQuery: { - [RHSM_API_QUERY_TYPES.GRANULARITY]: rhsmApiTypes.RHSM_API_QUERY_GRANULARITY_TYPES.WEEKLY - } - } - } - } - }; - - expect(graphCardSelectors.graphCard(stateFulfilledQueryMismatch, props)).toMatchSnapshot( - 'cached data: ERROR, query mismatch' - ); - }); -}); diff --git a/src/redux/selectors/__tests__/guestsListSelectors.test.js b/src/redux/selectors/__tests__/guestsListSelectors.test.js deleted file mode 100644 index 026445584..000000000 --- a/src/redux/selectors/__tests__/guestsListSelectors.test.js +++ /dev/null @@ -1,131 +0,0 @@ -import guestsListSelectors from '../guestsListSelectors'; -import { rhsmApiTypes } from '../../../types/rhsmApiTypes'; - -describe('GuestsListSelectors', () => { - it('should return specific selectors', () => { - expect(guestsListSelectors).toMatchSnapshot('selectors'); - }); - - it('should pass minimal data on missing a reducer response', () => { - const state = {}; - expect(guestsListSelectors.guestsList(state)).toMatchSnapshot('missing reducer error'); - }); - - it('should pass minimal data on an ID without an ID provided', () => { - const props = { - id: undefined - }; - const state = { - inventory: { - hostsGuests: { - fulfilled: true, - metaId: undefined, - metaQuery: {}, - data: { [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: [] } - } - } - }; - - expect(guestsListSelectors.guestsList(state, props)).toMatchSnapshot('no id error'); - }); - - it('should handle pending state on an ID', () => { - const props = { - id: 'Lorem Ipsum ID pending state' - }; - const state = { - inventory: { - hostsGuests: { - 'Lorem Ipsum ID pending state': { - pending: true, - metaId: 'Lorem Ipsum ID pending state', - metaQuery: {}, - data: { [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: [] } - } - } - } - }; - - expect(guestsListSelectors.guestsList(state, props)).toMatchSnapshot('pending'); - }); - - it('should populate data on an ID when the api response is missing expected properties', () => { - const props = { - id: 'Lorem Ipsum missing expected properties' - }; - const state = { - inventory: { - hostsGuests: { - 'Lorem Ipsum missing expected properties': { - fulfilled: true, - metaId: 'Lorem Ipsum missing expected properties', - metaQuery: { - [rhsmApiTypes.RHSM_API_QUERY_TYPES.LIMIT]: 10, - [rhsmApiTypes.RHSM_API_QUERY_TYPES.OFFSET]: 0 - }, - data: { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.ID]: - 'd6214a0b-b344-4778-831c-d53dcacb2da3', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.SUBSCRIPTION_ID]: - 'adafd9d5-5b00-42fa-a6c9-75801d45cc6d' - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.ID]: - '9358e312-1c9f-42f4-8910-dcef6e970852', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.NAME]: 'db.example.com', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.LAST_SEEN]: '2019-09-04T00:00:00.000Z' - } - ] - } - } - } - } - }; - - expect(guestsListSelectors.guestsList(state, props)).toMatchSnapshot('data populated, missing properties'); - }); - - it('should map a fulfilled ID response to an aggregated output', () => { - const props = { - id: 'Lorem Ipsum fulfilled aggregated output' - }; - const state = { - inventory: { - hostsGuests: { - 'Lorem Ipsum fulfilled aggregated output': { - fulfilled: true, - metaId: 'Lorem Ipsum fulfilled aggregated output', - metaQuery: { - [rhsmApiTypes.RHSM_API_QUERY_TYPES.LIMIT]: 10, - [rhsmApiTypes.RHSM_API_QUERY_TYPES.OFFSET]: 0 - }, - data: { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.ID]: - 'd6214a0b-b344-4778-831c-d53dcacb2da3', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.NAME]: 'db.lorem.com', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.SUBSCRIPTION_ID]: - 'adafd9d5-5b00-42fa-a6c9-75801d45cc6d', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.LAST_SEEN]: '2019-07-03T00:00:00.000Z' - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.ID]: - '9358e312-1c9f-42f4-8910-dcef6e970852', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.NAME]: 'db.ipsum.com', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.SUBSCRIPTION_ID]: - 'b101a72f-1859-4489-acb8-d6d31c2578c4', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES.LAST_SEEN]: '2019-09-04T00:00:00.000Z' - } - ] - } - } - } - } - }; - - expect(guestsListSelectors.guestsList(state, props)).toMatchSnapshot('fulfilled'); - }); -}); diff --git a/src/redux/selectors/__tests__/inventoryListSelectors.test.js b/src/redux/selectors/__tests__/inventoryListSelectors.test.js deleted file mode 100644 index e00ff2268..000000000 --- a/src/redux/selectors/__tests__/inventoryListSelectors.test.js +++ /dev/null @@ -1,273 +0,0 @@ -import inventoryListSelectors from '../inventoryListSelectors'; -import { rhsmApiTypes } from '../../../types/rhsmApiTypes'; - -describe('InventoryListSelectors', () => { - it('should return specific selectors', () => { - expect(inventoryListSelectors).toMatchSnapshot('selectors'); - }); - - it('should pass minimal data on missing a reducer response', () => { - const state = {}; - expect(inventoryListSelectors.inventoryList(state)).toMatchSnapshot('missing reducer error'); - }); - - it('should pass minimal data on a product ID without a product ID provided', () => { - const props = { - viewId: 'test', - productId: undefined, - query: {} - }; - const state = { - inventory: { - hostsInventory: { - fulfilled: true, - metaId: undefined, - metaQuery: {}, - data: { [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: [] } - } - } - }; - - expect(inventoryListSelectors.inventoryList(state, props)).toMatchSnapshot('no product id error'); - }); - - it('should handle pending state on a product ID', () => { - const props = { - viewId: 'test', - productId: 'Lorem Ipsum ID pending state' - }; - const state = { - inventory: { - hostsInventory: { - 'Lorem Ipsum ID pending state': { - pending: true, - metaId: 'Lorem Ipsum ID pending state', - metaQuery: {}, - data: { [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: [] } - } - } - } - }; - - expect(inventoryListSelectors.inventoryList(state, props)).toMatchSnapshot('pending'); - }); - - it('should populate data on a product ID when the api response is missing expected properties', () => { - const props = { - viewId: 'test', - productId: 'Lorem Ipsum missing expected properties', - query: { - [rhsmApiTypes.RHSM_API_QUERY_TYPES.SLA]: rhsmApiTypes.RHSM_API_QUERY_SLA_TYPES.PREMIUM - } - }; - const state = { - inventory: { - hostsInventory: { - 'Lorem Ipsum missing expected properties': { - fulfilled: true, - metaId: 'Lorem Ipsum missing expected properties', - metaQuery: { - [rhsmApiTypes.RHSM_API_QUERY_TYPES.SLA]: rhsmApiTypes.RHSM_API_QUERY_SLA_TYPES.PREMIUM - }, - data: { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.ID]: 'd6214a0b-b344-4778-831c-d53dcacb2da3', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.CORES]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.SOCKETS]: 1 - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.ID]: '9358e312-1c9f-42f4-8910-dcef6e970852', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.NAME]: 'db.example.com', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.HARDWARE]: 'physical', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.LAST_SEEN]: '2019-09-04T00:00:00.000Z' - } - ] - } - } - } - } - }; - - expect(inventoryListSelectors.inventoryList(state, props)).toMatchSnapshot('data populated, missing properties'); - }); - - it('should map a fulfilled product ID response to an aggregated output', () => { - const props = { - viewId: 'test', - productId: 'Lorem Ipsum fulfilled aggregated output', - query: { - [rhsmApiTypes.RHSM_API_QUERY_TYPES.SLA]: rhsmApiTypes.RHSM_API_QUERY_SLA_TYPES.PREMIUM - } - }; - const state = { - inventory: { - hostsInventory: { - 'Lorem Ipsum fulfilled aggregated output': { - fulfilled: true, - metaId: 'Lorem Ipsum fulfilled aggregated output', - metaQuery: { - [rhsmApiTypes.RHSM_API_QUERY_TYPES.SLA]: rhsmApiTypes.RHSM_API_QUERY_SLA_TYPES.PREMIUM - }, - data: { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.ID]: 'd6214a0b-b344-4778-831c-d53dcacb2da3', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.NAME]: 'db.lorem.com', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.CORES]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.HARDWARE]: 'physical', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.LAST_SEEN]: '2019-07-03T00:00:00.000Z' - }, - { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.ID]: '9358e312-1c9f-42f4-8910-dcef6e970852', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.NAME]: 'db.ipsum.com', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.CORES]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.HARDWARE]: 'physical', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.LAST_SEEN]: '2019-09-04T00:00:00.000Z' - } - ] - } - } - } - } - }; - - expect(inventoryListSelectors.inventoryList(state, props)).toMatchSnapshot('fulfilled'); - }); - - it('should populate data from the in memory cache', () => { - const props = { - viewId: 'cache-test', - productId: 'Lorem Ipsum ID cached', - query: { - [rhsmApiTypes.RHSM_API_QUERY_TYPES.SLA]: rhsmApiTypes.RHSM_API_QUERY_SLA_TYPES.PREMIUM - } - }; - const stateInitialFulfilled = { - inventory: { - hostsInventory: { - 'Lorem Ipsum ID cached': { - fulfilled: true, - metaId: 'Lorem Ipsum ID cached', - metaQuery: { - [rhsmApiTypes.RHSM_API_QUERY_TYPES.SLA]: rhsmApiTypes.RHSM_API_QUERY_SLA_TYPES.PREMIUM - }, - data: { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.ID]: 'd6214a0b-b344-4778-831c-d53dcacb2da3', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.NAME]: 'db.lorem.com', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.CORES]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.HARDWARE]: 'physical', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.LAST_SEEN]: '2019-07-03T00:00:00.000Z' - } - ] - } - } - } - } - }; - - expect(inventoryListSelectors.inventoryList(stateInitialFulfilled, props)).toMatchSnapshot( - 'cached data: initial fulfilled' - ); - - const statePending = { - inventory: { - hostsInventory: { - 'Lorem Ipsum ID cached': { - ...stateInitialFulfilled.inventory.hostsInventory['Lorem Ipsum ID cached'], - pending: true - } - } - } - }; - - expect(inventoryListSelectors.inventoryList(statePending, props)).toMatchSnapshot( - 'cached data: cache used and pending' - ); - - const stateFulfilled = { - inventory: { - hostsInventory: { - 'Lorem Ipsum ID cached': { - ...stateInitialFulfilled.inventory.hostsInventory['Lorem Ipsum ID cached'], - fulfilled: true, - data: { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.ID]: '9358e312-1c9f-42f4-8910-dcef6e970852', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.NAME]: 'db.ipsum.com', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.CORES]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.SOCKETS]: 1, - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.HARDWARE]: 'physical', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.LAST_SEEN]: '2019-09-04T00:00:00.000Z' - } - ] - } - } - } - } - }; - - expect(inventoryListSelectors.inventoryList(stateFulfilled, props)).toMatchSnapshot( - 'cached data: updated and fulfilled' - ); - - const stateCancelled = { - inventory: { - hostsInventory: { - 'Lorem Ipsum ID cached': { - ...stateInitialFulfilled.inventory.hostsInventory['Lorem Ipsum ID cached'], - cancelled: true, - fulfilled: false - } - } - } - }; - - expect(inventoryListSelectors.inventoryList(stateCancelled, props)).toMatchSnapshot( - 'cached data: ERROR, cancelled API call, maintain prior response' - ); - - const stateFulfilledQueryUpdated = { - inventory: { - hostsInventory: { - 'Lorem Ipsum ID cached': { - ...stateInitialFulfilled.inventory.hostsInventory['Lorem Ipsum ID cached'], - metaQuery: { - [rhsmApiTypes.RHSM_API_QUERY_TYPES.SLA]: rhsmApiTypes.RHSM_API_QUERY_SLA_TYPES.NONE - }, - fulfilled: true, - data: { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: [ - { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.ID]: 'XXXXXXXXX-1c9f-42f4-8910-dcef6e970852', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.NAME]: 'db.ipsum-lorem.com', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.CORES]: 3, - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.SOCKETS]: 2, - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.HARDWARE]: 'virtual', - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.LAST_SEEN]: '2019-09-05T00:00:00.000Z' - } - ] - } - } - } - }, - view: { - query: { - 'Lorem Ipsum ID cached': { - [rhsmApiTypes.RHSM_API_QUERY_TYPES.SLA]: rhsmApiTypes.RHSM_API_QUERY_SLA_TYPES.NONE - } - } - } - }; - - expect(inventoryListSelectors.inventoryList(stateFulfilledQueryUpdated, props)).toMatchSnapshot( - 'cached data: query updated and fulfilled' - ); - }); -}); diff --git a/src/redux/selectors/__tests__/userSelectors.test.js b/src/redux/selectors/__tests__/userSelectors.test.js deleted file mode 100644 index 7de27c0ed..000000000 --- a/src/redux/selectors/__tests__/userSelectors.test.js +++ /dev/null @@ -1,76 +0,0 @@ -import userSelectors from '../userSelectors'; - -describe('UserSelectors', () => { - it('should return specific selectors', () => { - expect(userSelectors).toMatchSnapshot('selectors'); - }); - - it('should pass minimal data on missing a reducer response', () => { - const state = {}; - expect(userSelectors.userSession(state)).toMatchSnapshot('missing reducer error'); - }); - - it('should pass existing state data through response', () => { - const state = { - user: { - session: { - locale: 'en-US' - } - } - }; - - expect(userSelectors.userSession(state)).toMatchSnapshot('existing state data'); - }); - - it('should pass error state data through response', () => { - const state = { - user: { - errors: { - error: true, - errorCodes: ['loremIpsum'], - errorMessage: 'lorem ipsum', - status: 403 - } - } - }; - - expect(userSelectors.userSession(state)).toMatchSnapshot('error state data'); - }); - - it('should pass transformed data on fulfill', () => { - const state = { - user: { - auth: { - fulfilled: true, - data: [ - { - isAdmin: false, - isEntitled: true - }, - { - permissions: [ - { - subscriptions: { - all: true, - resources: { - '*': { - '*': [], - loremCustom: [], - read: [] - } - } - } - } - ], - authorized: { - subscriptions: true - } - } - ] - } - } - }; - - expect(userSelectors.userSession(state)).toMatchSnapshot('fulfilled state data'); - }); -}); diff --git a/src/redux/selectors/graphCardSelectors.js b/src/redux/selectors/graphCardSelectors.js deleted file mode 100644 index 5b4e38e3f..000000000 --- a/src/redux/selectors/graphCardSelectors.js +++ /dev/null @@ -1,208 +0,0 @@ -import { createSelector } from 'reselect'; -import LruCache from 'lru-cache'; -import moment from 'moment'; -import _isEqual from 'lodash/isEqual'; -import _camelCase from 'lodash/camelCase'; -import { rhsmApiTypes } from '../../types/rhsmApiTypes'; -import { reduxHelpers } from '../common/reduxHelpers'; -import { apiQueries } from '../common'; - -/** - * Selector cache. - * - * @private - * @type {object} - */ -const selectorCache = new LruCache({ - ttl: Number.parseInt(process.env.REACT_APP_SELECTOR_CACHE, 10), - max: 10, - allowStale: true, - updateAgeOnGet: true -}); - -/** - * Return a combined state, props object. - * - * @private - * @param {object} state - * @param {object} props - * @returns {object} - */ -const statePropsFilter = (state, props = {}) => ({ - ...state.graph?.reportCapacity?.[props.productId], - ...{ - viewId: props.viewId, - productId: props.productId - } -}); - -/** - * Return a combined query object. - * - * @param {object} state - * @param {object} props - * @returns {object} - */ -const queryFilter = (state, props = {}) => { - const { graphTallyQuery: query } = apiQueries.parseRhsmQuery( - { - ...props.query, - ...state.view?.query?.[props.productId], - ...state.view?.query?.[props.viewId] - }, - { - graphTallyQuery: { ...state.view?.graphTallyQuery?.[props.viewId] } - } - ); - - return query; -}; - -/** - * Create selector, transform combined state, props into a consumable graph/charting object. - * - * @type {{pending: boolean, fulfilled: boolean, graphData: object, error: boolean, status: (*|number)}} - */ -const selector = createSelector([statePropsFilter, queryFilter], (response, query = {}) => { - const { viewId = null, productId = null, metaId, metaQuery = {}, ...responseData } = response || {}; - - const updatedResponseData = { - error: responseData.error || false, - fulfilled: false, - pending: responseData.pending || responseData.cancelled || false, - graphData: {}, - meta: {}, - query, - status: responseData.status - }; - - const responseMetaQuery = { ...metaQuery }; - - const cache = - (viewId && productId && selectorCache.get(`${viewId}_${productId}_${JSON.stringify(query)}`)) || undefined; - - Object.assign(updatedResponseData, { ...cache }); - - if (responseData.fulfilled && productId === metaId && _isEqual(query, responseMetaQuery)) { - const [report, capacity] = responseData.data; - const reportData = report?.[rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA] || []; - const reportMeta = report?.[rhsmApiTypes.RHSM_API_RESPONSE_META] || {}; - const capacityData = capacity?.[rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA] || []; - - /** - * ToDo: Reevaluate this reset on graphData when working with Reselect's memoize. - * Creating a new object i.e. updatedResponseData.graphData = {}; causes an update, - * which in turn causes the graph to reload and flash. - */ - Object.keys(updatedResponseData.graphData).forEach(graphDataKey => { - updatedResponseData.graphData[graphDataKey] = []; - }); - - // Populate expected API response values with undefined - const [tallySchema = {}, capacitySchema = {}] = reduxHelpers.setResponseSchemas([ - rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES, - rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES - ]); - - // Apply "display logic" then return a custom value for Reporting graph entries - const customReportValue = (data, key, presetData) => ({ - ...presetData, - hasData: data[rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_DATA], - hasCloudigradeData: data[rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_CLOUDIGRADE_DATA], - hasCloudigradeMismatch: data[rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.HAS_CLOUDIGRADE_MISMATCH] - }); - - // Apply "display logic" then return a custom value for Capacity graph entries - const customCapacityValue = (data, key, { date, x, y }) => ({ - date, - x, - y: data[rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HAS_INFINITE] === true ? null : y, - hasInfinite: data[rhsmApiTypes.RHSM_API_RESPONSE_CAPACITY_DATA_TYPES.HAS_INFINITE] - }); - - // Generate reflected graph data for number, undefined, and null - reportData.forEach((value, index) => { - const date = moment.utc(value[rhsmApiTypes.RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES.DATE]).startOf('day').toDate(); - - const generateGraphData = ({ graphDataObj, keyPrefix = '', customValue = null }) => { - Object.keys(graphDataObj).forEach(graphDataObjKey => { - if ( - typeof graphDataObj[graphDataObjKey] === 'number' || - graphDataObj[graphDataObjKey] === undefined || - graphDataObj[graphDataObjKey] === null - ) { - const casedGraphDataObjKey = _camelCase(`${keyPrefix} ${graphDataObjKey}`).trim(); - - if (!updatedResponseData.graphData[casedGraphDataObjKey]) { - updatedResponseData.graphData[casedGraphDataObjKey] = []; - } - - let generatedY; - - if (typeof graphDataObj[graphDataObjKey] === 'number') { - generatedY = - (Number.isInteger(graphDataObj[graphDataObjKey]) && - Number.parseInt(graphDataObj[graphDataObjKey], 10)) || - Number.parseFloat(Number.parseFloat(graphDataObj[graphDataObjKey]).toFixed(2)); - } else if (graphDataObj[graphDataObjKey] === undefined) { - generatedY = 0; - } else if (graphDataObj[graphDataObjKey] === null) { - generatedY = graphDataObj[graphDataObjKey]; - } - - const updatedItem = - (typeof customValue === 'function' && - customValue(graphDataObj, graphDataObjKey, { date, x: index, y: generatedY })) || - {}; - - updatedResponseData.graphData[casedGraphDataObjKey][index] = { - date, - x: index, - y: generatedY, - ...updatedItem - }; - } - }); - }; - - generateGraphData({ graphDataObj: { ...tallySchema, ...value }, customValue: customReportValue }); - generateGraphData({ - graphDataObj: { ...capacitySchema, ...capacityData[index] }, - keyPrefix: 'threshold', - customValue: customCapacityValue - }); - }); - - // Generate normalized properties - const [updatedReportMeta] = reduxHelpers.setNormalizedResponse({ - schema: rhsmApiTypes.RHSM_API_RESPONSE_META_TYPES, - data: reportMeta - }); - - const [meta = {}] = updatedReportMeta || []; - - // Update response and cache - Object.assign(updatedResponseData.meta, meta); - updatedResponseData.fulfilled = true; - selectorCache.set(`${viewId}_${productId}_${JSON.stringify(query)}`, { ...updatedResponseData }); - } - - return updatedResponseData; -}); - -/** - * Expose selector instance. For scenarios where a selector is reused across component instances. - * - * @param {object} defaultProps - * @returns {{pending: boolean, fulfilled: boolean, graphData: object, error: boolean, status: (*|number)}} - */ -const makeSelector = defaultProps => (state, props) => ({ - ...selector(state, props, defaultProps) -}); - -const graphCardSelectors = { - graphCard: selector, - makeGraphCard: makeSelector -}; - -export { graphCardSelectors as default, graphCardSelectors, selector, makeSelector }; diff --git a/src/redux/selectors/guestsListSelectors.js b/src/redux/selectors/guestsListSelectors.js deleted file mode 100644 index 633ace05e..000000000 --- a/src/redux/selectors/guestsListSelectors.js +++ /dev/null @@ -1,79 +0,0 @@ -import { createSelector } from 'reselect'; -import { rhsmApiTypes } from '../../types/rhsmApiTypes'; -import { reduxHelpers } from '../common/reduxHelpers'; -import { selector as userSession } from './userSelectors'; - -/** - * Return a combined state, props object. - * - * @private - * @param {object} state - * @param {object} props - * @returns {object} - */ -const statePropsFilter = (state, props = {}) => ({ - ...state.inventory?.hostsGuests?.[props.id] -}); - -/** - * Create selector, transform combined state, props into a consumable object. - * - * @type {{listData: Array, pending: boolean, fulfilled: boolean, error: boolean, status: (*|number)}} - */ -const selector = createSelector([statePropsFilter], response => { - const { metaId, ...responseData } = response || {}; - - const updatedResponseData = { - error: responseData.error || false, - fulfilled: false, - pending: responseData.pending || responseData.cancelled || false, - listData: [], - status: responseData.status - }; - - if (responseData.fulfilled) { - const { [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: listData = [] } = responseData.data || {}; - - // Apply "display logic" then return a custom value for entries - const customInventoryValue = ({ key, value }) => { - switch (key) { - case rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.LAST_SEEN: - return (value && new Date(value)) || null; - default: - return value ?? null; - } - }; - - // Generate normalized properties - const [updatedListData] = reduxHelpers.setNormalizedResponse({ - schema: rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES, - data: listData, - customResponseValue: customInventoryValue - }); - - // Update response and cache - updatedResponseData.fulfilled = true; - updatedResponseData.listData = updatedListData; - } - - return updatedResponseData; -}); - -/** - * Expose selector instance. For scenarios where a selector is reused across component instances. - * - * @param {object} defaultProps - * @returns {{listData: Array, pending: boolean, fulfilled: boolean, error: boolean, session: object, - * status: (*|number)}} - */ -const makeSelector = defaultProps => (state, props) => ({ - ...userSession(state, props, defaultProps), - ...selector(state, props, defaultProps) -}); - -const guestsListSelectors = { - guestsList: selector, - makeGuestsList: makeSelector -}; - -export { guestsListSelectors as default, guestsListSelectors, selector, makeSelector }; diff --git a/src/redux/selectors/index.js b/src/redux/selectors/index.js deleted file mode 100644 index debc19620..000000000 --- a/src/redux/selectors/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import guestsListSelectors from './guestsListSelectors'; -import graphCardSelectors from './graphCardSelectors'; -import inventoryListSelectors from './inventoryListSelectors'; -import userSelectors from './userSelectors'; - -const reduxSelectors = { - guestsList: guestsListSelectors, - graphCard: graphCardSelectors, - inventoryList: inventoryListSelectors, - user: userSelectors -}; - -export { reduxSelectors as default, reduxSelectors }; diff --git a/src/redux/selectors/inventoryListSelectors.js b/src/redux/selectors/inventoryListSelectors.js deleted file mode 100644 index a4347e5c6..000000000 --- a/src/redux/selectors/inventoryListSelectors.js +++ /dev/null @@ -1,161 +0,0 @@ -import { createSelectorCreator, defaultMemoize } from 'reselect'; -import LruCache from 'lru-cache'; -import _isEqual from 'lodash/isEqual'; -import { rhsmApiTypes } from '../../types/rhsmApiTypes'; -import { reduxHelpers } from '../common/reduxHelpers'; -import { apiQueries } from '../common'; -import { selector as userSession } from './userSelectors'; - -/** - * Create a custom "are objects equal" selector. - * - * @private - * @type {Function}} - */ -const createDeepEqualSelector = createSelectorCreator(defaultMemoize, _isEqual); - -/** - * Selector cache. - * - * @private - * @type {object} - */ -const selectorCache = new LruCache({ - ttl: Number.parseInt(process.env.REACT_APP_SELECTOR_CACHE, 10), - max: 10, - allowStale: true, - updateAgeOnGet: true -}); - -/** - * Return a combined state, props object. - * - * @private - * @param {object} state - * @param {object} props - * @returns {object} - */ -const statePropsFilter = (state, props = {}) => ({ - ...state.inventory?.hostsInventory?.[props.productId], - ...{ - viewId: props.viewId, - productId: props.productId - } -}); - -/** - * Return a combined query object. - * - * @param {object} state - * @param {object} props - * @returns {object} - */ -const queryFilter = (state, props = {}) => { - const { inventoryHostsQuery: query } = apiQueries.parseRhsmQuery( - { - ...props.query, - ...state.view?.query?.[props.productId], - ...state.view?.query?.[props.viewId] - }, - { - inventoryHostsQuery: { - ...state.view?.inventoryHostsQuery?.[props.productId], - ...state.view?.inventoryHostsQuery?.[props.viewId] - } - } - ); - - return query; -}; - -/** - * Note: We use an in-memory cache to provide the user a pleasant UX experience. To - * aid in that UX we need "pending" to fire in scenarios that are not loaded in-memory. Because - * we load the cache first there are scenarios where the previous XHR call is still in state - * when a subsequent fulfilled XHR call comes through. Without the _isEqual(query, metaQuery) check - * the overlap of the prior fulfilled call interferes with the pending of the subsequent call. - */ -/** - * Create selector, transform combined state, props into a consumable object. - * - * @type {{pending: boolean, fulfilled: boolean, listData: object, error: boolean, status: (*|number)}} - */ -const selector = createDeepEqualSelector([statePropsFilter, queryFilter], (response, query = {}) => { - const { viewId = null, productId = null, metaId, metaQuery = {}, ...responseData } = response || {}; - - const updatedResponseData = { - error: responseData.error || false, - fulfilled: false, - pending: responseData.pending || responseData.cancelled || false, - listData: [], - itemCount: 0, - query, - status: responseData.status - }; - - const cache = - (viewId && productId && selectorCache.get(`${viewId}_${productId}_${JSON.stringify(query)}`)) || undefined; - - Object.assign(updatedResponseData, { ...cache }); - - if (responseData.fulfilled && productId === metaId && _isEqual(query, metaQuery)) { - const { - [rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA]: listData = [], - [rhsmApiTypes.RHSM_API_RESPONSE_META]: listMeta = {} - } = responseData.data || {}; - - updatedResponseData.listData.length = 0; - - // Apply "display logic" then return a custom value for entries - const customInventoryValue = ({ key, value }) => { - switch (key) { - case rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES.LAST_SEEN: - return (value && new Date(value)) || null; - default: - return value ?? null; - } - }; - - // Generate normalized properties - const [updatedListData, updatedListMeta] = reduxHelpers.setNormalizedResponse( - { - schema: rhsmApiTypes.RHSM_API_RESPONSE_INVENTORY_DATA_TYPES, - data: listData, - customResponseValue: customInventoryValue - }, - { - schema: rhsmApiTypes.RHSM_API_RESPONSE_META_TYPES, - data: listMeta - } - ); - - const [meta = {}] = updatedListMeta || []; - - // Update response and cache - updatedResponseData.itemCount = meta[rhsmApiTypes.RHSM_API_RESPONSE_META_TYPES.COUNT] ?? 0; - updatedResponseData.listData = updatedListData; - updatedResponseData.fulfilled = true; - selectorCache.set(`${viewId}_${productId}_${JSON.stringify(query)}`, { ...updatedResponseData }); - } - - return updatedResponseData; -}); - -/** - * Expose selector instance. For scenarios where a selector is reused across component instances. - * - * @param {object} defaultProps - * @returns {{pending: boolean, fulfilled: boolean, graphData: object, error: boolean, session: object, - * status: (*|number)}} - */ -const makeSelector = defaultProps => (state, props) => ({ - ...userSession(state, props, defaultProps), - ...selector(state, props, defaultProps) -}); - -const inventoryListSelectors = { - inventoryList: selector, - makeInventoryList: makeSelector -}; - -export { inventoryListSelectors as default, inventoryListSelectors, selector, makeSelector }; diff --git a/src/redux/selectors/userSelectors.js b/src/redux/selectors/userSelectors.js deleted file mode 100644 index 0f96bc8fe..000000000 --- a/src/redux/selectors/userSelectors.js +++ /dev/null @@ -1,74 +0,0 @@ -import { createSelectorCreator, defaultMemoize } from 'reselect'; -import _isEqual from 'lodash/isEqual'; - -/** - * ToDo: This selector can be removed after guestsList.deprecated and inventoryList.deprecated components are removed - */ -/** - * Create a custom "are objects equal" selector. - * - * @private - * @type {Function}} - */ -const createDeepEqualSelector = createSelectorCreator(defaultMemoize, _isEqual); - -/** - * Return a combined state, props object. - * - * @private - * @param {object} state - * @returns {object} - */ -const statePropsFilter = state => ({ - auth: { - ...state.user?.auth - }, - errors: { - ...state.user?.errors - } -}); - -/** - * Create selector, transform combined state, props into a consumable graph/charting object. - * - * @type {{session: {entitled: boolean, permissions: object, authorized: object, admin: boolean, - * error: boolean}}} - */ -const selector = createDeepEqualSelector([statePropsFilter], response => { - const { errors = {}, auth = {} } = response || {}; - const updatedSession = { - ...errors, - admin: false, - entitled: false, - error: errors?.error || false, - authorized: {}, - permissions: {} - }; - - if (!updatedSession?.error && auth?.fulfilled) { - const [user = {}, responsePermissions = {}] = auth?.data || []; - updatedSession.admin = user.isAdmin; - updatedSession.entitled = user.isEntitled; - updatedSession.permissions = responsePermissions.permissions; - updatedSession.authorized = responsePermissions.authorized; - } - - return { session: updatedSession }; -}); - -/** - * Expose selector instance. For scenarios where a selector is reused across component instances. - * - * @param {object} defaultProps - * @returns {{session: {entitled: boolean, permissions: Array, authorized: boolean, admin: boolean}}} - */ -const makeSelector = defaultProps => (state, props) => ({ - ...selector(state, props, defaultProps) -}); - -const userSessionSelectors = { - userSession: selector, - makeUserSession: makeSelector -}; - -export { userSessionSelectors as default, userSessionSelectors, selector, makeSelector }; diff --git a/src/types/__tests__/__snapshots__/index.test.js.snap b/src/types/__tests__/__snapshots__/index.test.js.snap deleted file mode 100644 index 60b7a1ef5..000000000 --- a/src/types/__tests__/__snapshots__/index.test.js.snap +++ /dev/null @@ -1,847 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ApiTypes should have specific API properties: all exported api types 1`] = ` -{ - "apiTypes": { - "rhsmApi": { - "RHSM_API_PATH_ID_TYPES": { - "OPENSHIFT": "OpenShift Container Platform", - "OPENSHIFT_DEDICATED_METRICS": "OpenShift-dedicated-metrics", - "OPENSHIFT_METRICS": "OpenShift-metrics", - "RHACS": "rhacs", - "RHEL": "RHEL", - "RHEL_ARM": "RHEL for ARM", - "RHEL_COMPUTE_NODE": "RHEL Compute Node", - "RHEL_DESKTOP": "RHEL Desktop", - "RHEL_IBM_POWER": "RHEL for IBM Power", - "RHEL_IBM_Z": "RHEL for IBM z", - "RHEL_SERVER": "RHEL Server", - "RHEL_WORKSTATION": "RHEL Workstation", - "RHEL_X86": "RHEL for x86", - "RHODS": "rhods", - "RHOSAK": "rhosak", - "SATELLITE": "Satellite", - "SATELLITE_CAPSULE": "Satellite Capsule", - "SATELLITE_SERVER": "Satellite Server", - }, - "RHSM_API_QUERY_GRANULARITY_TYPES": { - "DAILY": "Daily", - "MONTHLY": "Monthly", - "QUARTERLY": "Quarterly", - "WEEKLY": "Weekly", - }, - "RHSM_API_QUERY_SET_INVENTORY_GUESTS_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SET_INVENTORY_SUBSCRIPTIONS_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SET_INVENTORY_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SET_OPTIN_TYPES": { - "CONDUIT_SYNC": "enable_conduit_sync", - "TALLY_REPORT": "enable_tally_reporting", - "TALLY_SYNC": "enable_tally_sync", - }, - "RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES": { - "BILLING_PROVIDER": "billing_provider", - "CATEGORY": "category", - "END_DATE": "ending", - "GRANULARITY": "granularity", - "SLA": "sla", - "START_DATE": "beginning", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SLA_TYPES": { - "NONE": "", - "PREMIUM": "Premium", - "SELF": "Self-Support", - "STANDARD": "Standard", - }, - "RHSM_API_QUERY_SORT_DIRECTION_TYPES": { - "ASCENDING": "asc", - "DESCENDING": "desc", - }, - "RHSM_API_QUERY_SORT_TYPES": { - "CORES": "cores", - "CORE_HOURS": "core_hours", - "HARDWARE": "hardware_type", - "INSTANCE_HOURS": "instance_hours", - "LAST_SEEN": "last_seen", - "MEASUREMENT": "measurement_type", - "NAME": "display_name", - "SOCKETS": "sockets", - }, - "RHSM_API_QUERY_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "CATEGORY": "category", - "CONDUIT_SYNC": "enable_conduit_sync", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "GRANULARITY": "granularity", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "TALLY_REPORT": "enable_tally_reporting", - "TALLY_SYNC": "enable_tally_sync", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_UOM_TYPES": { - "CORES": "cores", - "SOCKETS": "sockets", - }, - "RHSM_API_QUERY_USAGE_TYPES": { - "DEVELOPMENT": "Development/Test", - "DISASTER": "Disaster Recovery", - "PRODUCTION": "Production", - "UNSPECIFIED": "", - }, - "RHSM_API_RESPONSE_CAPACITY_DATA": "data", - "RHSM_API_RESPONSE_CAPACITY_DATA_TYPES": { - "CLOUD_CORES": "cloud_cores", - "CLOUD_INSTANCES": "cloud_instance_count", - "CLOUD_SOCKETS": "cloud_sockets", - "CORES": "cores", - "DATE": "date", - "HAS_INFINITE": "has_infinite_quantity", - "HYPERVISOR_CORES": "hypervisor_cores", - "HYPERVISOR_SOCKETS": "hypervisor_sockets", - "PHYSICAL_CORES": "physical_cores", - "PHYSICAL_SOCKETS": "physical_sockets", - "SOCKETS": "sockets", - }, - "RHSM_API_RESPONSE_DATA": "data", - "RHSM_API_RESPONSE_ERROR_DATA": "errors", - "RHSM_API_RESPONSE_ERROR_DATA_CODE_TYPES": { - "GENERIC": "SUBSCRIPTIONS1003", - "OPTIN": "SUBSCRIPTIONS1004", - }, - "RHSM_API_RESPONSE_ERROR_DATA_TYPES": { - "CODE": "code", - }, - "RHSM_API_RESPONSE_INVENTORY_DATA": "data", - "RHSM_API_RESPONSE_INVENTORY_DATA_TYPES": { - "CLOUD_PROVIDER": "cloud_provider", - "CORES": "cores", - "CORE_HOURS": "core_hours", - "GUESTS": "number_of_guests", - "HARDWARE": "hardware_type", - "ID": "insights_id", - "INVENTORY_ID": "inventory_id", - "LAST_SEEN": "last_seen", - "MEASUREMENT": "measurement_type", - "NAME": "display_name", - "SOCKETS": "sockets", - "SUBSCRIPTION_ID": "subscription_manager_id", - }, - "RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES": { - "ID": "insights_id", - "LAST_SEEN": "last_seen", - "NAME": "display_name", - "SUBSCRIPTION_ID": "subscription_manager_id", - }, - "RHSM_API_RESPONSE_LINKS": "links", - "RHSM_API_RESPONSE_LINKS_TYPES": { - "FIRST": "first", - "LAST": "last", - "NEXT": "next", - "PREVIOUS": "previous", - }, - "RHSM_API_RESPONSE_META": "meta", - "RHSM_API_RESPONSE_META_TYPES": { - "COUNT": "count", - "TOTAL_CORE_HOURS": "total_core_hours", - "TOTAL_INSTANCE_HOURS": "total_instance_hours", - }, - "RHSM_API_RESPONSE_PRODUCTS_DATA": "data", - "RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES": { - "CLOUD_CORES": "cloud_cores", - "CLOUD_INSTANCES": "cloud_instance_count", - "CLOUD_SOCKETS": "cloud_sockets", - "CORES": "cores", - "CORE_HOURS": "core_hours", - "DATE": "date", - "HAS_CLOUDIGRADE_DATA": "has_cloudigrade_data", - "HAS_CLOUDIGRADE_MISMATCH": "has_cloudigrade_mismatch", - "HAS_DATA": "has_data", - "HYPERVISOR_CORES": "hypervisor_cores", - "HYPERVISOR_SOCKETS": "hypervisor_sockets", - "INSTANCE_HOURS": "instance_hours", - "PHYSICAL_CORES": "physical_cores", - "PHYSICAL_SOCKETS": "physical_sockets", - "SOCKETS": "sockets", - }, - }, - }, - "default": { - "rhsmApi": { - "RHSM_API_PATH_ID_TYPES": { - "OPENSHIFT": "OpenShift Container Platform", - "OPENSHIFT_DEDICATED_METRICS": "OpenShift-dedicated-metrics", - "OPENSHIFT_METRICS": "OpenShift-metrics", - "RHACS": "rhacs", - "RHEL": "RHEL", - "RHEL_ARM": "RHEL for ARM", - "RHEL_COMPUTE_NODE": "RHEL Compute Node", - "RHEL_DESKTOP": "RHEL Desktop", - "RHEL_IBM_POWER": "RHEL for IBM Power", - "RHEL_IBM_Z": "RHEL for IBM z", - "RHEL_SERVER": "RHEL Server", - "RHEL_WORKSTATION": "RHEL Workstation", - "RHEL_X86": "RHEL for x86", - "RHODS": "rhods", - "RHOSAK": "rhosak", - "SATELLITE": "Satellite", - "SATELLITE_CAPSULE": "Satellite Capsule", - "SATELLITE_SERVER": "Satellite Server", - }, - "RHSM_API_QUERY_GRANULARITY_TYPES": { - "DAILY": "Daily", - "MONTHLY": "Monthly", - "QUARTERLY": "Quarterly", - "WEEKLY": "Weekly", - }, - "RHSM_API_QUERY_SET_INVENTORY_GUESTS_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SET_INVENTORY_SUBSCRIPTIONS_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SET_INVENTORY_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SET_OPTIN_TYPES": { - "CONDUIT_SYNC": "enable_conduit_sync", - "TALLY_REPORT": "enable_tally_reporting", - "TALLY_SYNC": "enable_tally_sync", - }, - "RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES": { - "BILLING_PROVIDER": "billing_provider", - "CATEGORY": "category", - "END_DATE": "ending", - "GRANULARITY": "granularity", - "SLA": "sla", - "START_DATE": "beginning", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SLA_TYPES": { - "NONE": "", - "PREMIUM": "Premium", - "SELF": "Self-Support", - "STANDARD": "Standard", - }, - "RHSM_API_QUERY_SORT_DIRECTION_TYPES": { - "ASCENDING": "asc", - "DESCENDING": "desc", - }, - "RHSM_API_QUERY_SORT_TYPES": { - "CORES": "cores", - "CORE_HOURS": "core_hours", - "HARDWARE": "hardware_type", - "INSTANCE_HOURS": "instance_hours", - "LAST_SEEN": "last_seen", - "MEASUREMENT": "measurement_type", - "NAME": "display_name", - "SOCKETS": "sockets", - }, - "RHSM_API_QUERY_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "CATEGORY": "category", - "CONDUIT_SYNC": "enable_conduit_sync", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "GRANULARITY": "granularity", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "TALLY_REPORT": "enable_tally_reporting", - "TALLY_SYNC": "enable_tally_sync", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_UOM_TYPES": { - "CORES": "cores", - "SOCKETS": "sockets", - }, - "RHSM_API_QUERY_USAGE_TYPES": { - "DEVELOPMENT": "Development/Test", - "DISASTER": "Disaster Recovery", - "PRODUCTION": "Production", - "UNSPECIFIED": "", - }, - "RHSM_API_RESPONSE_CAPACITY_DATA": "data", - "RHSM_API_RESPONSE_CAPACITY_DATA_TYPES": { - "CLOUD_CORES": "cloud_cores", - "CLOUD_INSTANCES": "cloud_instance_count", - "CLOUD_SOCKETS": "cloud_sockets", - "CORES": "cores", - "DATE": "date", - "HAS_INFINITE": "has_infinite_quantity", - "HYPERVISOR_CORES": "hypervisor_cores", - "HYPERVISOR_SOCKETS": "hypervisor_sockets", - "PHYSICAL_CORES": "physical_cores", - "PHYSICAL_SOCKETS": "physical_sockets", - "SOCKETS": "sockets", - }, - "RHSM_API_RESPONSE_DATA": "data", - "RHSM_API_RESPONSE_ERROR_DATA": "errors", - "RHSM_API_RESPONSE_ERROR_DATA_CODE_TYPES": { - "GENERIC": "SUBSCRIPTIONS1003", - "OPTIN": "SUBSCRIPTIONS1004", - }, - "RHSM_API_RESPONSE_ERROR_DATA_TYPES": { - "CODE": "code", - }, - "RHSM_API_RESPONSE_INVENTORY_DATA": "data", - "RHSM_API_RESPONSE_INVENTORY_DATA_TYPES": { - "CLOUD_PROVIDER": "cloud_provider", - "CORES": "cores", - "CORE_HOURS": "core_hours", - "GUESTS": "number_of_guests", - "HARDWARE": "hardware_type", - "ID": "insights_id", - "INVENTORY_ID": "inventory_id", - "LAST_SEEN": "last_seen", - "MEASUREMENT": "measurement_type", - "NAME": "display_name", - "SOCKETS": "sockets", - "SUBSCRIPTION_ID": "subscription_manager_id", - }, - "RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES": { - "ID": "insights_id", - "LAST_SEEN": "last_seen", - "NAME": "display_name", - "SUBSCRIPTION_ID": "subscription_manager_id", - }, - "RHSM_API_RESPONSE_LINKS": "links", - "RHSM_API_RESPONSE_LINKS_TYPES": { - "FIRST": "first", - "LAST": "last", - "NEXT": "next", - "PREVIOUS": "previous", - }, - "RHSM_API_RESPONSE_META": "meta", - "RHSM_API_RESPONSE_META_TYPES": { - "COUNT": "count", - "TOTAL_CORE_HOURS": "total_core_hours", - "TOTAL_INSTANCE_HOURS": "total_instance_hours", - }, - "RHSM_API_RESPONSE_PRODUCTS_DATA": "data", - "RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES": { - "CLOUD_CORES": "cloud_cores", - "CLOUD_INSTANCES": "cloud_instance_count", - "CLOUD_SOCKETS": "cloud_sockets", - "CORES": "cores", - "CORE_HOURS": "core_hours", - "DATE": "date", - "HAS_CLOUDIGRADE_DATA": "has_cloudigrade_data", - "HAS_CLOUDIGRADE_MISMATCH": "has_cloudigrade_mismatch", - "HAS_DATA": "has_data", - "HYPERVISOR_CORES": "hypervisor_cores", - "HYPERVISOR_SOCKETS": "hypervisor_sockets", - "INSTANCE_HOURS": "instance_hours", - "PHYSICAL_CORES": "physical_cores", - "PHYSICAL_SOCKETS": "physical_sockets", - "SOCKETS": "sockets", - }, - }, - }, - "rhsmApiTypes": { - "RHSM_API_PATH_ID_TYPES": { - "OPENSHIFT": "OpenShift Container Platform", - "OPENSHIFT_DEDICATED_METRICS": "OpenShift-dedicated-metrics", - "OPENSHIFT_METRICS": "OpenShift-metrics", - "RHACS": "rhacs", - "RHEL": "RHEL", - "RHEL_ARM": "RHEL for ARM", - "RHEL_COMPUTE_NODE": "RHEL Compute Node", - "RHEL_DESKTOP": "RHEL Desktop", - "RHEL_IBM_POWER": "RHEL for IBM Power", - "RHEL_IBM_Z": "RHEL for IBM z", - "RHEL_SERVER": "RHEL Server", - "RHEL_WORKSTATION": "RHEL Workstation", - "RHEL_X86": "RHEL for x86", - "RHODS": "rhods", - "RHOSAK": "rhosak", - "SATELLITE": "Satellite", - "SATELLITE_CAPSULE": "Satellite Capsule", - "SATELLITE_SERVER": "Satellite Server", - }, - "RHSM_API_QUERY_GRANULARITY_TYPES": { - "DAILY": "Daily", - "MONTHLY": "Monthly", - "QUARTERLY": "Quarterly", - "WEEKLY": "Weekly", - }, - "RHSM_API_QUERY_SET_INVENTORY_GUESTS_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SET_INVENTORY_SUBSCRIPTIONS_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SET_INVENTORY_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SET_OPTIN_TYPES": { - "CONDUIT_SYNC": "enable_conduit_sync", - "TALLY_REPORT": "enable_tally_reporting", - "TALLY_SYNC": "enable_tally_sync", - }, - "RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES": { - "BILLING_PROVIDER": "billing_provider", - "CATEGORY": "category", - "END_DATE": "ending", - "GRANULARITY": "granularity", - "SLA": "sla", - "START_DATE": "beginning", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SLA_TYPES": { - "NONE": "", - "PREMIUM": "Premium", - "SELF": "Self-Support", - "STANDARD": "Standard", - }, - "RHSM_API_QUERY_SORT_DIRECTION_TYPES": { - "ASCENDING": "asc", - "DESCENDING": "desc", - }, - "RHSM_API_QUERY_SORT_TYPES": { - "CORES": "cores", - "CORE_HOURS": "core_hours", - "HARDWARE": "hardware_type", - "INSTANCE_HOURS": "instance_hours", - "LAST_SEEN": "last_seen", - "MEASUREMENT": "measurement_type", - "NAME": "display_name", - "SOCKETS": "sockets", - }, - "RHSM_API_QUERY_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "CATEGORY": "category", - "CONDUIT_SYNC": "enable_conduit_sync", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "GRANULARITY": "granularity", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "TALLY_REPORT": "enable_tally_reporting", - "TALLY_SYNC": "enable_tally_sync", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_UOM_TYPES": { - "CORES": "cores", - "SOCKETS": "sockets", - }, - "RHSM_API_QUERY_USAGE_TYPES": { - "DEVELOPMENT": "Development/Test", - "DISASTER": "Disaster Recovery", - "PRODUCTION": "Production", - "UNSPECIFIED": "", - }, - "RHSM_API_RESPONSE_CAPACITY_DATA": "data", - "RHSM_API_RESPONSE_CAPACITY_DATA_TYPES": { - "CLOUD_CORES": "cloud_cores", - "CLOUD_INSTANCES": "cloud_instance_count", - "CLOUD_SOCKETS": "cloud_sockets", - "CORES": "cores", - "DATE": "date", - "HAS_INFINITE": "has_infinite_quantity", - "HYPERVISOR_CORES": "hypervisor_cores", - "HYPERVISOR_SOCKETS": "hypervisor_sockets", - "PHYSICAL_CORES": "physical_cores", - "PHYSICAL_SOCKETS": "physical_sockets", - "SOCKETS": "sockets", - }, - "RHSM_API_RESPONSE_DATA": "data", - "RHSM_API_RESPONSE_ERROR_DATA": "errors", - "RHSM_API_RESPONSE_ERROR_DATA_CODE_TYPES": { - "GENERIC": "SUBSCRIPTIONS1003", - "OPTIN": "SUBSCRIPTIONS1004", - }, - "RHSM_API_RESPONSE_ERROR_DATA_TYPES": { - "CODE": "code", - }, - "RHSM_API_RESPONSE_INVENTORY_DATA": "data", - "RHSM_API_RESPONSE_INVENTORY_DATA_TYPES": { - "CLOUD_PROVIDER": "cloud_provider", - "CORES": "cores", - "CORE_HOURS": "core_hours", - "GUESTS": "number_of_guests", - "HARDWARE": "hardware_type", - "ID": "insights_id", - "INVENTORY_ID": "inventory_id", - "LAST_SEEN": "last_seen", - "MEASUREMENT": "measurement_type", - "NAME": "display_name", - "SOCKETS": "sockets", - "SUBSCRIPTION_ID": "subscription_manager_id", - }, - "RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES": { - "ID": "insights_id", - "LAST_SEEN": "last_seen", - "NAME": "display_name", - "SUBSCRIPTION_ID": "subscription_manager_id", - }, - "RHSM_API_RESPONSE_LINKS": "links", - "RHSM_API_RESPONSE_LINKS_TYPES": { - "FIRST": "first", - "LAST": "last", - "NEXT": "next", - "PREVIOUS": "previous", - }, - "RHSM_API_RESPONSE_META": "meta", - "RHSM_API_RESPONSE_META_TYPES": { - "COUNT": "count", - "TOTAL_CORE_HOURS": "total_core_hours", - "TOTAL_INSTANCE_HOURS": "total_instance_hours", - }, - "RHSM_API_RESPONSE_PRODUCTS_DATA": "data", - "RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES": { - "CLOUD_CORES": "cloud_cores", - "CLOUD_INSTANCES": "cloud_instance_count", - "CLOUD_SOCKETS": "cloud_sockets", - "CORES": "cores", - "CORE_HOURS": "core_hours", - "DATE": "date", - "HAS_CLOUDIGRADE_DATA": "has_cloudigrade_data", - "HAS_CLOUDIGRADE_MISMATCH": "has_cloudigrade_mismatch", - "HAS_DATA": "has_data", - "HYPERVISOR_CORES": "hypervisor_cores", - "HYPERVISOR_SOCKETS": "hypervisor_sockets", - "INSTANCE_HOURS": "instance_hours", - "PHYSICAL_CORES": "physical_cores", - "PHYSICAL_SOCKETS": "physical_sockets", - "SOCKETS": "sockets", - }, - }, -} -`; - -exports[`ApiTypes should have specific API properties: specific types 1`] = ` -{ - "rhsmApi": { - "RHSM_API_PATH_ID_TYPES": { - "OPENSHIFT": "OpenShift Container Platform", - "OPENSHIFT_DEDICATED_METRICS": "OpenShift-dedicated-metrics", - "OPENSHIFT_METRICS": "OpenShift-metrics", - "RHACS": "rhacs", - "RHEL": "RHEL", - "RHEL_ARM": "RHEL for ARM", - "RHEL_COMPUTE_NODE": "RHEL Compute Node", - "RHEL_DESKTOP": "RHEL Desktop", - "RHEL_IBM_POWER": "RHEL for IBM Power", - "RHEL_IBM_Z": "RHEL for IBM z", - "RHEL_SERVER": "RHEL Server", - "RHEL_WORKSTATION": "RHEL Workstation", - "RHEL_X86": "RHEL for x86", - "RHODS": "rhods", - "RHOSAK": "rhosak", - "SATELLITE": "Satellite", - "SATELLITE_CAPSULE": "Satellite Capsule", - "SATELLITE_SERVER": "Satellite Server", - }, - "RHSM_API_QUERY_GRANULARITY_TYPES": { - "DAILY": "Daily", - "MONTHLY": "Monthly", - "QUARTERLY": "Quarterly", - "WEEKLY": "Weekly", - }, - "RHSM_API_QUERY_SET_INVENTORY_GUESTS_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SET_INVENTORY_SUBSCRIPTIONS_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SET_INVENTORY_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SET_OPTIN_TYPES": { - "CONDUIT_SYNC": "enable_conduit_sync", - "TALLY_REPORT": "enable_tally_reporting", - "TALLY_SYNC": "enable_tally_sync", - }, - "RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES": { - "BILLING_PROVIDER": "billing_provider", - "CATEGORY": "category", - "END_DATE": "ending", - "GRANULARITY": "granularity", - "SLA": "sla", - "START_DATE": "beginning", - "USAGE": "usage", - }, - "RHSM_API_QUERY_SLA_TYPES": { - "NONE": "", - "PREMIUM": "Premium", - "SELF": "Self-Support", - "STANDARD": "Standard", - }, - "RHSM_API_QUERY_SORT_DIRECTION_TYPES": { - "ASCENDING": "asc", - "DESCENDING": "desc", - }, - "RHSM_API_QUERY_SORT_TYPES": { - "CORES": "cores", - "CORE_HOURS": "core_hours", - "HARDWARE": "hardware_type", - "INSTANCE_HOURS": "instance_hours", - "LAST_SEEN": "last_seen", - "MEASUREMENT": "measurement_type", - "NAME": "display_name", - "SOCKETS": "sockets", - }, - "RHSM_API_QUERY_TYPES": { - "BILLING_ACCOUNT_ID": "billing_account_id", - "BILLING_PROVIDER": "billing_provider", - "CATEGORY": "category", - "CONDUIT_SYNC": "enable_conduit_sync", - "DIRECTION": "dir", - "DISPLAY_NAME": "display_name_contains", - "END_DATE": "ending", - "GRANULARITY": "granularity", - "LIMIT": "limit", - "OFFSET": "offset", - "SLA": "sla", - "SORT": "sort", - "START_DATE": "beginning", - "TALLY_REPORT": "enable_tally_reporting", - "TALLY_SYNC": "enable_tally_sync", - "UOM": "uom", - "USAGE": "usage", - }, - "RHSM_API_QUERY_UOM_TYPES": { - "CORES": "cores", - "SOCKETS": "sockets", - }, - "RHSM_API_QUERY_USAGE_TYPES": { - "DEVELOPMENT": "Development/Test", - "DISASTER": "Disaster Recovery", - "PRODUCTION": "Production", - "UNSPECIFIED": "", - }, - "RHSM_API_RESPONSE_CAPACITY_DATA": "data", - "RHSM_API_RESPONSE_CAPACITY_DATA_TYPES": { - "CLOUD_CORES": "cloud_cores", - "CLOUD_INSTANCES": "cloud_instance_count", - "CLOUD_SOCKETS": "cloud_sockets", - "CORES": "cores", - "DATE": "date", - "HAS_INFINITE": "has_infinite_quantity", - "HYPERVISOR_CORES": "hypervisor_cores", - "HYPERVISOR_SOCKETS": "hypervisor_sockets", - "PHYSICAL_CORES": "physical_cores", - "PHYSICAL_SOCKETS": "physical_sockets", - "SOCKETS": "sockets", - }, - "RHSM_API_RESPONSE_DATA": "data", - "RHSM_API_RESPONSE_ERROR_DATA": "errors", - "RHSM_API_RESPONSE_ERROR_DATA_CODE_TYPES": { - "GENERIC": "SUBSCRIPTIONS1003", - "OPTIN": "SUBSCRIPTIONS1004", - }, - "RHSM_API_RESPONSE_ERROR_DATA_TYPES": { - "CODE": "code", - }, - "RHSM_API_RESPONSE_INVENTORY_DATA": "data", - "RHSM_API_RESPONSE_INVENTORY_DATA_TYPES": { - "CLOUD_PROVIDER": "cloud_provider", - "CORES": "cores", - "CORE_HOURS": "core_hours", - "GUESTS": "number_of_guests", - "HARDWARE": "hardware_type", - "ID": "insights_id", - "INVENTORY_ID": "inventory_id", - "LAST_SEEN": "last_seen", - "MEASUREMENT": "measurement_type", - "NAME": "display_name", - "SOCKETS": "sockets", - "SUBSCRIPTION_ID": "subscription_manager_id", - }, - "RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES": { - "ID": "insights_id", - "LAST_SEEN": "last_seen", - "NAME": "display_name", - "SUBSCRIPTION_ID": "subscription_manager_id", - }, - "RHSM_API_RESPONSE_LINKS": "links", - "RHSM_API_RESPONSE_LINKS_TYPES": { - "FIRST": "first", - "LAST": "last", - "NEXT": "next", - "PREVIOUS": "previous", - }, - "RHSM_API_RESPONSE_META": "meta", - "RHSM_API_RESPONSE_META_TYPES": { - "COUNT": "count", - "TOTAL_CORE_HOURS": "total_core_hours", - "TOTAL_INSTANCE_HOURS": "total_instance_hours", - }, - "RHSM_API_RESPONSE_PRODUCTS_DATA": "data", - "RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES": { - "CLOUD_CORES": "cloud_cores", - "CLOUD_INSTANCES": "cloud_instance_count", - "CLOUD_SOCKETS": "cloud_sockets", - "CORES": "cores", - "CORE_HOURS": "core_hours", - "DATE": "date", - "HAS_CLOUDIGRADE_DATA": "has_cloudigrade_data", - "HAS_CLOUDIGRADE_MISMATCH": "has_cloudigrade_mismatch", - "HAS_DATA": "has_data", - "HYPERVISOR_CORES": "hypervisor_cores", - "HYPERVISOR_SOCKETS": "hypervisor_sockets", - "INSTANCE_HOURS": "instance_hours", - "PHYSICAL_CORES": "physical_cores", - "PHYSICAL_SOCKETS": "physical_sockets", - "SOCKETS": "sockets", - }, - }, -} -`; diff --git a/src/types/__tests__/index.test.js b/src/types/__tests__/index.test.js deleted file mode 100644 index f022b26f5..000000000 --- a/src/types/__tests__/index.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import apiTypes, * as allApiTypes from '..'; - -describe('ApiTypes', () => { - it('should have specific API properties', () => { - expect(apiTypes).toMatchSnapshot('specific types'); - expect(allApiTypes).toMatchSnapshot('all exported api types'); - }); -}); diff --git a/src/types/index.js b/src/types/index.js deleted file mode 100644 index cd498dd00..000000000 --- a/src/types/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import { rhsmApiTypes } from './rhsmApiTypes'; - -const apiTypes = { - rhsmApi: rhsmApiTypes -}; - -export { apiTypes as default, apiTypes, rhsmApiTypes }; diff --git a/src/types/rhsmApiTypes.js b/src/types/rhsmApiTypes.js deleted file mode 100644 index e5e0e5f73..000000000 --- a/src/types/rhsmApiTypes.js +++ /dev/null @@ -1,451 +0,0 @@ -import { rhsmConstants } from '../services/rhsm/rhsmConstants'; - -/** - * ToDo: Clean up params, see userReducer. - */ -/** - * RHSM response Error DATA type. - * - * @type {string} - */ -const RHSM_API_RESPONSE_ERROR_DATA = rhsmConstants.RHSM_API_RESPONSE_ERRORS; - -/** - * ToDo: Clean up params, see userReducer. - */ -/** - * RHSM response Error DATA types. - * Schema/map of expected Error data response properties. - * - * @type {{CODE: string, DETAIL: string}} - */ -const RHSM_API_RESPONSE_ERROR_DATA_TYPES = { - ...rhsmConstants.RHSM_API_RESPONSE_ERRORS_TYPES -}; - -/** - * RHSM response Error DATA CODE types. - * - * @type {{GENERIC: string, OPTIN: string}} - */ -const RHSM_API_RESPONSE_ERROR_DATA_CODE_TYPES = { - ...rhsmConstants.RHSM_API_RESPONSE_ERRORS_CODE_TYPES -}; - -/** - * ToDo: Clean up params, unused. - */ -/** - * RHSM response links type. - * - * @type {string} - */ -const RHSM_API_RESPONSE_LINKS = 'links'; - -/** - * ToDo: Clean up params, unused. - */ -/** - * RHSM response LINKS type. - * Schema/map of expected inventory LINKS response properties. - * - * @type {string} - */ -const RHSM_API_RESPONSE_LINKS_TYPES = { - FIRST: 'first', - LAST: 'last', - PREVIOUS: 'previous', - NEXT: 'next' -}; - -/** - * RHSM response meta type. - * - * @type {string} - */ -const RHSM_API_RESPONSE_META = 'meta'; - -/** - * ToDo: Clean up params, used by deprecated graph component selector and deprecated inventory component selector. - * It appears some of these may need to move over towards rhsmSchemas.js - */ -/** - * RHSM response META types. - * Schema/map of expected META response properties. - * - * @type {{COUNT: string, TOTAL_INSTANCE_HOURS: string, TOTAL_CORE_HOURS: string}} - */ -const RHSM_API_RESPONSE_META_TYPES = { - COUNT: 'count', - TOTAL_CORE_HOURS: 'total_core_hours', - TOTAL_INSTANCE_HOURS: 'total_instance_hours' -}; - -/** - * RHSM response data type. - * - * @type {string} - */ -const RHSM_API_RESPONSE_DATA = 'data'; - -/** - * RHSM response Capacity DATA type. - * - * @type {string} - */ -const RHSM_API_RESPONSE_CAPACITY_DATA = RHSM_API_RESPONSE_DATA; - -/** - * ToDo: Clean up params, used by deprecated graph component selector. - * We may need to relocate this as part of a "capacity" schema some of these params towards rhsmSchemas.js - */ -/** - * RHSM response Capacity DATA types. - * Schema/map of expected Capacity data response properties. - * - * @type {{HYPERVISOR_SOCKETS: string, CORES: string, DATE: string, SOCKETS: string, PHYSICAL_SOCKETS: string, - * HYPERVISOR_CORES: string, HAS_INFINITE: string, PHYSICAL_CORES: string}} - */ -const RHSM_API_RESPONSE_CAPACITY_DATA_TYPES = { - CLOUD_CORES: 'cloud_cores', - CLOUD_INSTANCES: 'cloud_instance_count', - CLOUD_SOCKETS: 'cloud_sockets', - CORES: 'cores', - DATE: 'date', - HYPERVISOR_CORES: 'hypervisor_cores', - HYPERVISOR_SOCKETS: 'hypervisor_sockets', - PHYSICAL_CORES: 'physical_cores', - PHYSICAL_SOCKETS: 'physical_sockets', - SOCKETS: 'sockets', - HAS_INFINITE: 'has_infinite_quantity' -}; - -/** - * RHSM response inventory DATA type. - * - * @type {string} - */ -const RHSM_API_RESPONSE_INVENTORY_DATA = RHSM_API_RESPONSE_DATA; - -/** - * ToDo: Clean up params, used by deprecated inventory component and related selector. - */ -/** - * RHSM response inventory DATA types. - * Schema/map of expected inventory DATA response properties. - * - * @type {{CORES: string, CORE_HOURS: string, HARDWARE: string, SOCKETS: string, SUBSCRIPTION_ID: string, - * INVENTORY_ID: string, MEASUREMENT: string, ID: string, GUESTS: string, CLOUD_PROVIDER: string, - * LAST_SEEN: string, NAME: string}} - */ -const RHSM_API_RESPONSE_INVENTORY_DATA_TYPES = { - CLOUD_PROVIDER: 'cloud_provider', - CORES: 'cores', - CORE_HOURS: 'core_hours', - GUESTS: 'number_of_guests', - HARDWARE: 'hardware_type', - ID: 'insights_id', - INVENTORY_ID: 'inventory_id', - LAST_SEEN: 'last_seen', - MEASUREMENT: 'measurement_type', - NAME: 'display_name', - SOCKETS: 'sockets', - SUBSCRIPTION_ID: 'subscription_manager_id' -}; - -/** - * ToDo: Clean up params, used by deprecated guests component selector. - */ -/** - * RHSM response inventory guests DATA types. - * Schema/map of expected inventory guests DATA response properties. - * - * @type {{SUBSCRIPTION_ID: string, ID: string, NAME: string, LAST_SEEN: string}} - */ -const RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES = { - ID: 'insights_id', - NAME: 'display_name', - SUBSCRIPTION_ID: 'subscription_manager_id', - LAST_SEEN: 'last_seen' -}; - -/** - * RHSM response Reporting/Tally DATA type. - * - * @type {string} - */ -const RHSM_API_RESPONSE_PRODUCTS_DATA = RHSM_API_RESPONSE_DATA; - -/** - * ToDo: Clean up params, used by app message component, deprecated graph component, and Tally response selectors. - * May need to move part of this towards rhsmConstants.js - */ -/** - * RHSM response Reporting/Tally DATA types. - * Schema/map of expected Reporting/Tally DATA response properties. - * - * @type {{HYPERVISOR_SOCKETS: string, CORES: string, INSTANCE_HOURS: string, SOCKETS: string, CLOUD_CORES: string, - * HAS_DATA: string, PHYSICAL_SOCKETS: string, PHYSICAL_CORES: string, CLOUD_INSTANCES: string, DATE: string, - * CORE_HOURS: string, CLOUD_SOCKETS: string, HAS_CLOUDIGRADE_DATA: string, HAS_CLOUDIGRADE_MISMATCH: string, - * HYPERVISOR_CORES: string}} - */ -const RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES = { - CLOUD_CORES: 'cloud_cores', - CLOUD_INSTANCES: 'cloud_instance_count', - CLOUD_SOCKETS: 'cloud_sockets', - CORE_HOURS: 'core_hours', - CORES: 'cores', - DATE: 'date', - HYPERVISOR_CORES: 'hypervisor_cores', - HYPERVISOR_SOCKETS: 'hypervisor_sockets', - INSTANCE_HOURS: 'instance_hours', - PHYSICAL_CORES: 'physical_cores', - PHYSICAL_SOCKETS: 'physical_sockets', - SOCKETS: 'sockets', - HAS_CLOUDIGRADE_DATA: 'has_cloudigrade_data', - HAS_CLOUDIGRADE_MISMATCH: 'has_cloudigrade_mismatch', - HAS_DATA: 'has_data' -}; - -/** - * RHSM product id type values. - * - * @type {{RHEL_ARM: string, OPENSHIFT_METRICS: string, SATELLITE: string, RHEL_WORKSTATION: string, - * RHOSAK: string, RHEL_COMPUTE_NODE: string, RHEL_X86: string, OPENSHIFT: string, SATELLITE_SERVER: string, - * OPENSHIFT_DEDICATED_METRICS: string, RHEL_DESKTOP: string, RHEL: string, SATELLITE_CAPSULE: string, - * RHEL_SERVER: string, RHEL_IBM_Z: string, RHEL_IBM_POWER: string}} - */ -const RHSM_API_PATH_ID_TYPES = { - ...rhsmConstants.RHSM_API_PATH_PRODUCT_TYPES -}; - -/** - * RHSM API query/search parameter of GRANULARITY type values. - * Schema/map of expected query/search parameter granularity types. - * - * @type {{WEEKLY: string, QUARTERLY: string, DAILY: string, MONTHLY: string}} - */ -const RHSM_API_QUERY_GRANULARITY_TYPES = { - ...rhsmConstants.RHSM_API_QUERY_GRANULARITY_TYPES -}; - -/** - * ToDo: Clean up sort params since they're hosts API specific. - * Hosts is being deprecated in favor of instances API. Instances sort params - * can be found in /services/rhsm/rhsmConstants.js - */ -/** - * RHSM API query/search parameter SORT type values for HOSTS. - * - * @type {{CORES: string, CORE_HOURS: string, HARDWARE: string, SOCKETS: string, MEASUREMENT: string, - * LAST_SEEN: string, NAME: string}} - */ -const RHSM_API_QUERY_SORT_TYPES = { - CORES: 'cores', - CORE_HOURS: 'core_hours', - HARDWARE: 'hardware_type', - INSTANCE_HOURS: 'instance_hours', - LAST_SEEN: 'last_seen', - MEASUREMENT: 'measurement_type', - NAME: 'display_name', - SOCKETS: 'sockets' -}; - -/** - * RHSM API query/search parameter SORT DIRECTION type values. - * - * @type {{ASCENDING: string, DESCENDING: string}} - */ -const RHSM_API_QUERY_SORT_DIRECTION_TYPES = { - ...rhsmConstants.RHSM_API_QUERY_INVENTORY_SORT_DIRECTION_TYPES -}; - -/** - * RHSM API query/search parameter SLA type values. - * - * @type {{PREMIUM: string, SELF: string, NONE: string, STANDARD: string}} - */ -const RHSM_API_QUERY_SLA_TYPES = { - ...rhsmConstants.RHSM_API_QUERY_SLA_TYPES -}; - -/** - * RHSM API query/search parameter UOM type values. - * - * @type {{CORES: string, SOCKETS: string}} - */ -const RHSM_API_QUERY_UOM_TYPES = { - ...rhsmConstants.RHSM_API_QUERY_UOM_TYPES -}; - -/** - * RHSM API query/search parameter USAGE type values. - * - * @type {{UNSPECIFIED: string, DISASTER: string, DEVELOPMENT: string, PRODUCTION: string}} - */ -const RHSM_API_QUERY_USAGE_TYPES = { - ...rhsmConstants.RHSM_API_QUERY_USAGE_TYPES -}; - -/** - * ToDo: Clean up params, unused. - */ -/** - * RHSM API query/search parameter OPTIN type values. - * - * @type {{TALLY_SYNC: string, TALLY_REPORT: string, CONDUIT_SYNC: string}} - */ -const RHSM_API_QUERY_SET_OPTIN_TYPES = { - CONDUIT_SYNC: 'enable_conduit_sync', - TALLY_REPORT: 'enable_tally_reporting', - TALLY_SYNC: 'enable_tally_sync' -}; - -/** - * RHSM API query/search parameter CAPACITY type values. - * - * @type {{GRANULARITY: string, USAGE: string, END_DATE: string, SLA: string, START_DATE: string}} - */ -const RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES = { - ...rhsmConstants.RHSM_API_QUERY_SET_TALLY_CAPACITY_TYPES -}; - -/** - * RHSM API query/search parameter INVENTORY type values. - * - * @type {{UOM: string, USAGE: string, DIRECTION: string, SORT: string, OFFSET: string, - * SLA: string, LIMIT: string}} - */ -const RHSM_API_QUERY_SET_INVENTORY_TYPES = { - ...rhsmConstants.RHSM_API_QUERY_SET_INVENTORY_TYPES -}; - -/** - * RHSM API query/search parameter GUESTS INVENTORY type values. - * - * @type {{OFFSET: string, LIMIT: string}} - */ -const RHSM_API_QUERY_SET_INVENTORY_GUESTS_TYPES = { - ...rhsmConstants.RHSM_API_QUERY_SET_INVENTORY_TYPES -}; - -/** - * RHSM API query/search parameter SUBSCRIPTIONS INVENTORY type values. - * - * @type {{UOM: string, USAGE: string, DIRECTION: string, SORT: string, OFFSET: string, SLA: string, - * LIMIT: string}} - */ -const RHSM_API_QUERY_SET_INVENTORY_SUBSCRIPTIONS_TYPES = { - ...rhsmConstants.RHSM_API_QUERY_SET_INVENTORY_TYPES -}; - -/** - * RHSM API query/search parameter values. - * - * @type {{GRANULARITY: string, TALLY_SYNC: string, DIRECTION: string, END_DATE: string, - * SLA: string, START_DATE: string, LIMIT: string, UOM: string, TALLY_REPORT: string, - * USAGE: string, SORT: string, OFFSET: string, CONDUIT_SYNC: string}} - */ -const RHSM_API_QUERY_TYPES = { - ...RHSM_API_QUERY_SET_OPTIN_TYPES, - ...RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES, - ...RHSM_API_QUERY_SET_INVENTORY_TYPES, - ...RHSM_API_QUERY_SET_INVENTORY_GUESTS_TYPES, - ...RHSM_API_QUERY_SET_INVENTORY_SUBSCRIPTIONS_TYPES -}; - -/** - * RHSM API types. - * - * @type {{RHSM_API_QUERY_SET_INVENTORY_SUBSCRIPTIONS_TYPES: {UOM: string, USAGE: string, DIRECTION: string, SORT: string, OFFSET: string, - * SLA: string, LIMIT: string}, RHSM_API_RESPONSE_DATA: string, RHSM_API_RESPONSE_ERROR_DATA_CODE_TYPES: {GENERIC: string, OPTIN: string}, - * RHSM_API_RESPONSE_INVENTORY_DATA: string, RHSM_API_RESPONSE_CAPACITY_DATA: string, RHSM_API_RESPONSE_ERROR_DATA_TYPES: {CODE: string, - * DETAIL: string}, RHSM_API_RESPONSE_CAPACITY_DATA_TYPES: {HYPERVISOR_SOCKETS: string, CORES: string, DATE: string, SOCKETS: string, - * PHYSICAL_SOCKETS: string, HYPERVISOR_CORES: string, HAS_INFINITE: string, PHYSICAL_CORES: string}, - * RHSM_API_RESPONSE_META_TYPES: {COUNT: string, TOTAL_INSTANCE_HOURS: string, TOTAL_CORE_HOURS: string}, - * RHSM_API_QUERY_GRANULARITY_TYPES: {WEEKLY: string, QUARTERLY: string, DAILY: string, MONTHLY: string}, - * RHSM_API_QUERY_SORT_DIRECTION_TYPES: {ASCENDING: string, DESCENDING: string}, RHSM_API_RESPONSE_PRODUCTS_DATA: string, - * RHSM_API_QUERY_TYPES: {GRANULARITY: string, TALLY_SYNC: string, DIRECTION: string, END_DATE: string, SLA: string, START_DATE: string, - * LIMIT: string, UOM: string, TALLY_REPORT: string, USAGE: string, SORT: string, OFFSET: string, CONDUIT_SYNC: string}, - * RHSM_API_RESPONSE_LINKS: string, RHSM_API_QUERY_SET_INVENTORY_GUESTS_TYPES: {OFFSET: string, LIMIT: string}, - * RHSM_API_PATH_ID_TYPES: {RHEL_ARM: string, OPENSHIFT_METRICS: string, SATELLITE: string, RHEL_WORKSTATION: string, RHOSAK: string, - * RHEL_COMPUTE_NODE: string, RHEL_X86: string, OPENSHIFT: string, SATELLITE_SERVER: string, OPENSHIFT_DEDICATED_METRICS: string, - * RHEL_DESKTOP: string, RHEL: string, SATELLITE_CAPSULE: string, RHEL_SERVER: string, RHEL_IBM_Z: string, RHEL_IBM_POWER: string}, - * RHSM_API_QUERY_SET_OPTIN_TYPES: {TALLY_SYNC: string, TALLY_REPORT: string, CONDUIT_SYNC: string}, - * RHSM_API_QUERY_USAGE_TYPES: {UNSPECIFIED: string, DISASTER: string, DEVELOPMENT: string, PRODUCTION: string}, - * RHSM_API_QUERY_SLA_TYPES: {PREMIUM: string, SELF: string, NONE: string, STANDARD: string}, - * RHSM_API_QUERY_SET_INVENTORY_TYPES: {UOM: string, USAGE: string, DIRECTION: string, SORT: string, OFFSET: string, SLA: string, - * LIMIT: string}, RHSM_API_QUERY_SORT_TYPES: {CORES: string, CORE_HOURS: string, HARDWARE: string, SOCKETS: string, - * MEASUREMENT: string, LAST_SEEN: string, NAME: string}, RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES: {HYPERVISOR_SOCKETS: string, - * CORES: string, INSTANCE_HOURS: string, SOCKETS: string, CLOUD_CORES: string, HAS_DATA: string, PHYSICAL_SOCKETS: string, - * PHYSICAL_CORES: string, CLOUD_INSTANCES: string, DATE: string, CORE_HOURS: string, CLOUD_SOCKETS: string, - * HAS_CLOUDIGRADE_DATA: string, HAS_CLOUDIGRADE_MISMATCH: string, HYPERVISOR_CORES: string}, RHSM_API_QUERY_UOM_TYPES: {CORES: string, - * SOCKETS: string}, RHSM_API_RESPONSE_LINKS_TYPES: string, RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES: {SUBSCRIPTION_ID: string, - * ID: string, NAME: string, LAST_SEEN: string}, RHSM_API_RESPONSE_ERROR_DATA: string, RHSM_API_RESPONSE_META: string, - * RHSM_API_RESPONSE_INVENTORY_DATA_TYPES: {CORES: string, CORE_HOURS: string, HARDWARE: string, SOCKETS: string, SUBSCRIPTION_ID: string, - * INVENTORY_ID: string, MEASUREMENT: string, ID: string, GUESTS: string, CLOUD_PROVIDER: string, LAST_SEEN: string, NAME: string}, - * RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES: {GRANULARITY: string, USAGE: string, END_DATE: string, SLA: string, START_DATE: string}}} - */ -const rhsmApiTypes = { - RHSM_API_RESPONSE_ERROR_DATA, - RHSM_API_RESPONSE_ERROR_DATA_TYPES, - RHSM_API_RESPONSE_ERROR_DATA_CODE_TYPES, - RHSM_API_RESPONSE_LINKS, - RHSM_API_RESPONSE_LINKS_TYPES, - RHSM_API_RESPONSE_META, - RHSM_API_RESPONSE_META_TYPES, - RHSM_API_RESPONSE_DATA, - RHSM_API_RESPONSE_CAPACITY_DATA, - RHSM_API_RESPONSE_CAPACITY_DATA_TYPES, - RHSM_API_RESPONSE_INVENTORY_DATA, - RHSM_API_RESPONSE_INVENTORY_DATA_TYPES, - RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES, - RHSM_API_RESPONSE_PRODUCTS_DATA, - RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES, - RHSM_API_PATH_ID_TYPES, - RHSM_API_QUERY_GRANULARITY_TYPES, - RHSM_API_QUERY_SORT_TYPES, - RHSM_API_QUERY_SORT_DIRECTION_TYPES, - RHSM_API_QUERY_SLA_TYPES, - RHSM_API_QUERY_UOM_TYPES, - RHSM_API_QUERY_USAGE_TYPES, - RHSM_API_QUERY_TYPES, - RHSM_API_QUERY_SET_OPTIN_TYPES, - RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES, - RHSM_API_QUERY_SET_INVENTORY_TYPES, - RHSM_API_QUERY_SET_INVENTORY_GUESTS_TYPES, - RHSM_API_QUERY_SET_INVENTORY_SUBSCRIPTIONS_TYPES -}; - -export { - rhsmApiTypes as default, - rhsmApiTypes, - RHSM_API_RESPONSE_ERROR_DATA, - RHSM_API_RESPONSE_ERROR_DATA_TYPES, - RHSM_API_RESPONSE_ERROR_DATA_CODE_TYPES, - RHSM_API_RESPONSE_LINKS, - RHSM_API_RESPONSE_LINKS_TYPES, - RHSM_API_RESPONSE_META, - RHSM_API_RESPONSE_META_TYPES, - RHSM_API_RESPONSE_DATA, - RHSM_API_RESPONSE_CAPACITY_DATA, - RHSM_API_RESPONSE_CAPACITY_DATA_TYPES, - RHSM_API_RESPONSE_INVENTORY_DATA, - RHSM_API_RESPONSE_INVENTORY_DATA_TYPES, - RHSM_API_RESPONSE_INVENTORY_GUESTS_DATA_TYPES, - RHSM_API_RESPONSE_PRODUCTS_DATA, - RHSM_API_RESPONSE_PRODUCTS_DATA_TYPES, - RHSM_API_PATH_ID_TYPES, - RHSM_API_QUERY_GRANULARITY_TYPES, - RHSM_API_QUERY_SORT_TYPES, - RHSM_API_QUERY_SORT_DIRECTION_TYPES, - RHSM_API_QUERY_SLA_TYPES, - RHSM_API_QUERY_UOM_TYPES, - RHSM_API_QUERY_USAGE_TYPES, - RHSM_API_QUERY_TYPES, - RHSM_API_QUERY_SET_OPTIN_TYPES, - RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES, - RHSM_API_QUERY_SET_INVENTORY_TYPES, - RHSM_API_QUERY_SET_INVENTORY_GUESTS_TYPES, - RHSM_API_QUERY_SET_INVENTORY_SUBSCRIPTIONS_TYPES -}; diff --git a/tests/__snapshots__/code.test.js.snap b/tests/__snapshots__/code.test.js.snap index ece4cabae..ee09c95d8 100644 --- a/tests/__snapshots__/code.test.js.snap +++ b/tests/__snapshots__/code.test.js.snap @@ -4,7 +4,6 @@ exports[`General code checks should only have specific console.[warn|log|info|er [ "components/inventoryCard/inventoryCardContext.js:168: console.warn(\`Sorting can only be performed on select fields, confirm field \${id} is allowed.\`);", "components/inventoryCard/inventoryCardHelpers.js:87: console.warn(\`Warning: Filter "\${id}" not found in "table row" response data.\`, cellData);", - "components/inventoryCard/inventoryList.deprecated.js:62: console.warn(\`Sorting can only be performed on select fields, confirm field \${id} is allowed.\`);", "components/inventoryCardSubscriptions/inventoryCardSubscriptionsContext.js:127: console.warn(\`Sorting can only be performed on select fields, confirm field \${id} is allowed.\`);", "index.js:12: console.log(\`Emulated appNavClick: \${JSON.stringify({ id, ...rest })}\`);", "redux/common/reduxHelpers.js:282: console.error(\`Error: Property \${prop} does not exist within the passed state.\`, state);", diff --git a/tests/__snapshots__/dist.test.js.snap b/tests/__snapshots__/dist.test.js.snap index de9323ddc..82cd38ea4 100644 --- a/tests/__snapshots__/dist.test.js.snap +++ b/tests/__snapshots__/dist.test.js.snap @@ -8,7 +8,6 @@ exports[`Build distribution should match a specific file output 1`] = ` "./dist/css/3577.css", "./dist/css/401.css", "./dist/css/6402.css", - "./dist/css/7080.css", "./dist/css/8485.css", "./dist/css/9222.css", "./dist/css/9283.css", @@ -27,9 +26,6 @@ exports[`Build distribution should match a specific file output 1`] = ` "./dist/js/1799*js", "./dist/js/1824*js", "./dist/js/1858*js", - "./dist/js/2195*js", - "./dist/js/2211*js", - "./dist/js/2211*txt", "./dist/js/2217*js", "./dist/js/2243*js", "./dist/js/2293*js", @@ -46,6 +42,8 @@ exports[`Build distribution should match a specific file output 1`] = ` "./dist/js/3722*js", "./dist/js/3768*js", "./dist/js/384*js", + "./dist/js/387*js", + "./dist/js/387*txt", "./dist/js/3914*js", "./dist/js/3935*js", "./dist/js/3935*txt", @@ -66,7 +64,6 @@ exports[`Build distribution should match a specific file output 1`] = ` "./dist/js/5250*js", "./dist/js/5250*txt", "./dist/js/5394*js", - "./dist/js/5473*js", "./dist/js/5876*js", "./dist/js/5993*js", "./dist/js/6402*js", @@ -74,26 +71,22 @@ exports[`Build distribution should match a specific file output 1`] = ` "./dist/js/6706*js", "./dist/js/6706*txt", "./dist/js/6816*js", - "./dist/js/7080*js", "./dist/js/7183*js", "./dist/js/7235*js", + "./dist/js/7276*js", "./dist/js/7294*js", "./dist/js/7294*txt", "./dist/js/7297*js", "./dist/js/7585*js", "./dist/js/7745*js", - "./dist/js/7780*js", "./dist/js/7970*js", "./dist/js/8007*js", - "./dist/js/8191*js", - "./dist/js/8341*js", "./dist/js/8485*js", "./dist/js/8710*js", "./dist/js/8900*js", "./dist/js/9051*js", "./dist/js/9077*js", "./dist/js/9222*js", - "./dist/js/9270*js", "./dist/js/9283*js", "./dist/js/931*js", "./dist/js/939*js", @@ -103,6 +96,7 @@ exports[`Build distribution should match a specific file output 1`] = ` "./dist/js/9669*txt", "./dist/js/9844*js", "./dist/js/9928*js", + "./dist/js/9942*js", "./dist/js/App*js", "./dist/locales/en-US.json", "./dist/locales/en.json", @@ -118,8 +112,6 @@ exports[`Build distribution should match a specific file output 1`] = ` "./dist/sourcemaps/1799*map", "./dist/sourcemaps/1824*map", "./dist/sourcemaps/1858*map", - "./dist/sourcemaps/2195*map", - "./dist/sourcemaps/2211*map", "./dist/sourcemaps/2217*map", "./dist/sourcemaps/2243*map", "./dist/sourcemaps/2293*map", @@ -136,6 +128,7 @@ exports[`Build distribution should match a specific file output 1`] = ` "./dist/sourcemaps/3722*map", "./dist/sourcemaps/3768*map", "./dist/sourcemaps/384*map", + "./dist/sourcemaps/387*map", "./dist/sourcemaps/3914*map", "./dist/sourcemaps/3935*map", "./dist/sourcemaps/4021*map", @@ -152,30 +145,25 @@ exports[`Build distribution should match a specific file output 1`] = ` "./dist/sourcemaps/5242*map", "./dist/sourcemaps/5250*map", "./dist/sourcemaps/5394*map", - "./dist/sourcemaps/5473*map", "./dist/sourcemaps/5876*map", "./dist/sourcemaps/5993*map", "./dist/sourcemaps/6402*map", "./dist/sourcemaps/6476*map", "./dist/sourcemaps/6706*map", "./dist/sourcemaps/6816*map", - "./dist/sourcemaps/7080*map", "./dist/sourcemaps/7183*map", "./dist/sourcemaps/7235*map", + "./dist/sourcemaps/7276*map", "./dist/sourcemaps/7294*map", "./dist/sourcemaps/7297*map", "./dist/sourcemaps/7585*map", - "./dist/sourcemaps/7780*map", "./dist/sourcemaps/7970*map", - "./dist/sourcemaps/8191*map", - "./dist/sourcemaps/8341*map", "./dist/sourcemaps/8485*map", "./dist/sourcemaps/8710*map", "./dist/sourcemaps/8900*map", "./dist/sourcemaps/9051*map", "./dist/sourcemaps/9077*map", "./dist/sourcemaps/9222*map", - "./dist/sourcemaps/9270*map", "./dist/sourcemaps/9283*map", "./dist/sourcemaps/931*map", "./dist/sourcemaps/939*map", @@ -184,6 +172,7 @@ exports[`Build distribution should match a specific file output 1`] = ` "./dist/sourcemaps/9669*map", "./dist/sourcemaps/9844*map", "./dist/sourcemaps/9928*map", + "./dist/sourcemaps/9942*map", "./dist/sourcemaps/App*map", "./dist/subscriptions*js", ]