foreman_rh_cloud 2.0.12 → 2.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/foreman_inventory_upload/accounts_controller.rb +2 -0
  3. data/app/controllers/foreman_inventory_upload/uploads_controller.rb +18 -0
  4. data/app/helpers/foreman_inventory_upload_host_helper.rb +2 -3
  5. data/app/models/concerns/rh_cloud_host.rb +4 -1
  6. data/app/models/insights_hit.rb +1 -1
  7. data/app/models/setting/rh_cloud.rb +2 -0
  8. data/app/overrides/hosts_list.rb +1 -1
  9. data/app/services/foreman_rh_cloud/cloud_auth.rb +28 -0
  10. data/app/views/foreman_rh_cloud/react/insights_cloud.html.erb +1 -6
  11. data/app/views/foreman_rh_cloud/react/inventory_upload.html.erb +1 -1
  12. data/app/views/hosts/_insights_tab.html.erb +1 -7
  13. data/app/views/layouts/foreman_rh_cloud/application.html.erb +0 -1
  14. data/config/routes.rb +2 -0
  15. data/db/migrate/20201007115752_add_hits_count_to_insights_facets_table.foreman_rh_cloud.rb +5 -0
  16. data/db/migrate/20201007121540_setup_hits_count_cache.foreman_rh_cloud.rb +10 -0
  17. data/lib/foreman_inventory_upload/generators/fact_helpers.rb +35 -0
  18. data/lib/foreman_inventory_upload/generators/json_stream.rb +7 -2
  19. data/lib/foreman_inventory_upload/generators/queries.rb +2 -0
  20. data/lib/foreman_inventory_upload/generators/slice.rb +26 -24
  21. data/lib/foreman_rh_cloud.rb +2 -1
  22. data/lib/foreman_rh_cloud/engine.rb +3 -2
  23. data/lib/foreman_rh_cloud/version.rb +1 -1
  24. data/lib/insights_cloud/async/insights_full_sync.rb +4 -25
  25. data/lib/inventory_sync/async/inventory_full_sync.rb +2 -23
  26. data/package.json +1 -1
  27. data/test/unit/fact_helpers_test.rb +22 -0
  28. data/test/unit/insights_facet_test.rb +7 -0
  29. data/test/unit/slice_generator_test.rb +106 -1
  30. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.fixtures.js +14 -1
  31. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListActions.js +22 -18
  32. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListReducer.js +16 -0
  33. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListSelectors.js +6 -0
  34. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListActions.test.js +7 -0
  35. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListReducer.test.js +12 -8
  36. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListSelectors.test.js +9 -0
  37. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListActions.test.js.snap +19 -0
  38. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListReducer.test.js.snap +11 -0
  39. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListSelectors.test.js.snap +6 -0
  40. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcher.fixtures.js +2 -0
  41. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherActions.js +10 -11
  42. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherConstants.js +0 -1
  43. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/AutoUploadSwitcherActions.test.js +12 -2
  44. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/__snapshots__/AutoUploadSwitcherActions.test.js.snap +17 -0
  45. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.fixtures.js +1 -0
  46. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.js +30 -0
  47. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherActions.js +29 -0
  48. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherConstants.js +1 -0
  49. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcher.test.js +13 -0
  50. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcherActions.test.js +21 -0
  51. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcher.test.js.snap +38 -0
  52. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcherActions.test.js.snap +31 -0
  53. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/integration.test.js.snap +41 -0
  54. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/integration.test.js +36 -0
  55. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/excludePackagesSwitcher.scss +3 -0
  56. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/index.js +20 -0
  57. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.fixtures.js +2 -1
  58. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.js +1 -0
  59. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.scss +3 -0
  60. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherActions.js +10 -11
  61. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherConstants.js +0 -2
  62. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/HostObfuscationSwitcherActions.test.js +12 -2
  63. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/__snapshots__/HostObfuscationSwitcherActions.test.js.snap +18 -1
  64. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.js +4 -0
  65. data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/__snapshots__/InventorySettings.test.js.snap +2 -0
  66. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.fixtures.js +1 -0
  67. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.js +29 -0
  68. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherActions.js +29 -0
  69. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherConstants.js +1 -0
  70. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcher.test.js +13 -0
  71. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcherActions.test.js +21 -0
  72. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcher.test.js.snap +38 -0
  73. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcherActions.test.js.snap +31 -0
  74. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/index.js +20 -0
  75. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButton.js +8 -2
  76. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js +9 -11
  77. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonConstants.js +1 -1
  78. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonReducer.js +2 -2
  79. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonActions.test.js +18 -0
  80. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonReducer.test.js +1 -8
  81. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonActions.test.js.snap +62 -0
  82. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonReducer.test.js.snap +0 -7
  83. data/webpack/ForemanInventoryUpload/Components/TabHeader/TabHeader.js +6 -1
  84. data/webpack/ForemanInventoryUpload/Components/Terminal/Terminal.js +2 -4
  85. data/webpack/ForemanInventoryUpload/ForemanInventoryHelpers.js +8 -0
  86. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsActions.js +17 -20
  87. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsConstants.js +0 -6
  88. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsReducer.js +0 -4
  89. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsActions.test.js +16 -0
  90. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsReducer.test.js +1 -24
  91. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsActions.test.js.snap +38 -4
  92. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsReducer.test.js.snap +0 -14
  93. data/webpack/InsightsCloudSync/InsightsCloudSync.js +2 -4
  94. data/webpack/InsightsCloudSync/InsightsCloudSync.test.js +1 -3
  95. data/webpack/InsightsCloudSync/InsightsCloudSyncActions.js +10 -11
  96. data/webpack/InsightsCloudSync/InsightsCloudSyncConstants.js +0 -2
  97. data/webpack/InsightsHostDetailsTab/InsightsTab.js +8 -6
  98. data/webpack/InsightsHostDetailsTab/InsightsTab.scss +1 -1
  99. data/webpack/InsightsHostDetailsTab/InsightsTabActions.js +9 -8
  100. data/webpack/InsightsHostDetailsTab/InsightsTabConstants.js +0 -1
  101. data/webpack/InsightsHostDetailsTab/InsightsTabReducer.js +2 -9
  102. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabActions.test.js +7 -1
  103. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabReducer.test.js +0 -9
  104. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTab.test.js.snap +26 -22
  105. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabActions.test.js.snap +40 -2
  106. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabReducer.test.js.snap +0 -7
  107. metadata +39 -15
  108. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/hostObfuscationSwitcher.scss +0 -0
@@ -0,0 +1,3 @@
1
+ .exclude_packages_switcher {
2
+ margin-bottom: 5px;
3
+ }
@@ -0,0 +1,20 @@
1
+ import { bindActionCreators } from 'redux';
2
+ import { connect } from 'react-redux';
3
+
4
+ import * as actions from './ExcludePackagesSwitcherActions';
5
+ import ExcludePackagesSwitcher from './ExcludePackagesSwitcher';
6
+ import { selectExcludePackages } from '../AccountList/AccountListSelectors';
7
+
8
+ // map state to props
9
+ const mapStateToProps = state => ({
10
+ excludePackages: selectExcludePackages(state),
11
+ });
12
+
13
+ // map action dispatchers to props
14
+ const mapDispatchToProps = dispatch => bindActionCreators(actions, dispatch);
15
+
16
+ // export connected component
17
+ export default connect(
18
+ mapStateToProps,
19
+ mapDispatchToProps
20
+ )(ExcludePackagesSwitcher);
@@ -1 +1,2 @@
1
- export const handleToggleResponse = { data: { autoUploadEnabled: true } };
1
+ export const currentHostObfuscationEnabled = false;
2
+ export const handleToggleResponse = { data: { hostObfuscationEnabled: true } };
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { Switch, FieldLevelHelp } from 'patternfly-react';
4
4
  import { translate as __ } from 'foremanReact/common/I18n';
5
+ import './HostObfuscationSwitcher.scss';
5
6
 
6
7
  const HostObfuscationSwitcher = ({ hostObfuscationEnabled, handleToggle }) => (
7
8
  <div className="host_obfuscation_switcher">
@@ -0,0 +1,3 @@
1
+ .host_obfuscation_switcher {
2
+ margin-bottom: 5px;
3
+ }
@@ -1,9 +1,7 @@
1
1
  import API from 'foremanReact/API';
2
+ import { addToast } from 'foremanReact/redux/actions/toasts';
2
3
  import { inventoryUrl } from '../../ForemanInventoryHelpers';
3
- import {
4
- HOST_OBFUSCATION_TOGGLE,
5
- HOST_OBFUSCATION_TOGGLE_ERROR,
6
- } from './HostObfuscationSwitcherConstants';
4
+ import { HOST_OBFUSCATION_TOGGLE } from './HostObfuscationSwitcherConstants';
7
5
 
8
6
  export const handleToggle = currentHostObfuscationEnabled => async dispatch => {
9
7
  const toggledHostObfuscationEnabled = !currentHostObfuscationEnabled;
@@ -19,12 +17,13 @@ export const handleToggle = currentHostObfuscationEnabled => async dispatch => {
19
17
  hostObfuscationEnabled,
20
18
  },
21
19
  });
22
- } catch (error) {
23
- dispatch({
24
- type: HOST_OBFUSCATION_TOGGLE_ERROR,
25
- payload: {
26
- error: error.message,
27
- },
28
- });
20
+ } catch ({ message }) {
21
+ dispatch(
22
+ addToast({
23
+ sticky: true,
24
+ type: 'error',
25
+ message,
26
+ })
27
+ );
29
28
  }
30
29
  };
@@ -1,3 +1 @@
1
1
  export const HOST_OBFUSCATION_TOGGLE = 'HOST_OBFUSCATION_TOGGLE';
2
-
3
- export const HOST_OBFUSCATION_TOGGLE_ERROR = 'HOST_OBFUSCATION_TOGGLE_ERROR';
@@ -1,13 +1,23 @@
1
1
  import { testActionSnapshotWithFixtures } from '@theforeman/test';
2
2
  import API from 'foremanReact/API';
3
3
  import { handleToggle } from '../HostObfuscationSwitcherActions';
4
- import { handleToggleResponse } from '../HostObfuscationSwitcher.fixtures';
4
+ import {
5
+ handleToggleResponse,
6
+ currentHostObfuscationEnabled,
7
+ } from '../HostObfuscationSwitcher.fixtures';
5
8
 
6
9
  jest.mock('foremanReact/API');
7
10
  API.post.mockImplementation(async () => handleToggleResponse);
8
11
 
9
12
  const fixtures = {
10
- 'should handleToggle': () => handleToggle(),
13
+ 'should handleToggle': () => handleToggle(currentHostObfuscationEnabled),
14
+ 'should handleToggle with error': () => {
15
+ API.post.mockImplementationOnce(() =>
16
+ Promise.reject(new Error('Network error!'))
17
+ );
18
+
19
+ return handleToggle(currentHostObfuscationEnabled);
20
+ },
11
21
  };
12
22
 
13
23
  describe('HostObfuscationSwitcher actions', () =>
@@ -5,10 +5,27 @@ Array [
5
5
  Array [
6
6
  Object {
7
7
  "payload": Object {
8
- "hostObfuscationEnabled": undefined,
8
+ "hostObfuscationEnabled": true,
9
9
  },
10
10
  "type": "HOST_OBFUSCATION_TOGGLE",
11
11
  },
12
12
  ],
13
13
  ]
14
14
  `;
15
+
16
+ exports[`HostObfuscationSwitcher actions should handleToggle with error 1`] = `
17
+ Array [
18
+ Array [
19
+ Object {
20
+ "payload": Object {
21
+ "message": Object {
22
+ "message": "Network error!",
23
+ "sticky": true,
24
+ "type": "error",
25
+ },
26
+ },
27
+ "type": "TOASTS_ADD",
28
+ },
29
+ ],
30
+ ]
31
+ `;
@@ -2,13 +2,17 @@ import React from 'react';
2
2
  import { translate as __ } from 'foremanReact/common/I18n';
3
3
  import AutoUploadSwitcher from '../AutoUploadSwitcher';
4
4
  import HostObfuscationSwitcher from '../HostObfuscationSwitcher';
5
+ import ExcludePackagesSwitcher from '../ExcludePackagesSwitcher';
6
+ import IpsObfuscationSwitcher from '../IpsObfuscationSwitcher';
5
7
  import './inventorySettings.scss';
6
8
 
7
9
  const InventorySettings = () => (
8
10
  <div className="inventory_settings">
9
11
  <h3>{__('Settings')}</h3>
10
12
  <AutoUploadSwitcher />
13
+ <ExcludePackagesSwitcher />
11
14
  <HostObfuscationSwitcher />
15
+ <IpsObfuscationSwitcher />
12
16
  </div>
13
17
  );
14
18
 
@@ -8,6 +8,8 @@ exports[`InventorySettings rendering render without Props 1`] = `
8
8
  Settings
9
9
  </h3>
10
10
  <Connect(AutoUploadSwitcher) />
11
+ <Connect(ExcludePackagesSwitcher) />
11
12
  <Connect(HostObfuscationSwitcher) />
13
+ <Connect(IpsObfuscationSwitcher) />
12
14
  </div>
13
15
  `;
@@ -0,0 +1 @@
1
+ export const handleToggleResponse = { data: { ipsObfuscationEnabled: true } };
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Switch, FieldLevelHelp } from 'patternfly-react';
4
+ import { translate as __ } from 'foremanReact/common/I18n';
5
+
6
+ const IpsObfuscationSwitcher = ({ ipsObfuscationEnabled, handleToggle }) => (
7
+ <div className="ips_obfuscation_switcher">
8
+ <span>Obfuscate host ipv4 addresses</span>
9
+ <FieldLevelHelp
10
+ content={__('Obfuscate ipv4 addresses sent to the Red Hat cloud')}
11
+ />
12
+ <Switch
13
+ size="mini"
14
+ value={ipsObfuscationEnabled}
15
+ onChange={() => handleToggle(ipsObfuscationEnabled)}
16
+ />
17
+ </div>
18
+ );
19
+
20
+ IpsObfuscationSwitcher.propTypes = {
21
+ ipsObfuscationEnabled: PropTypes.bool,
22
+ handleToggle: PropTypes.func.isRequired,
23
+ };
24
+
25
+ IpsObfuscationSwitcher.defaultProps = {
26
+ ipsObfuscationEnabled: false,
27
+ };
28
+
29
+ export default IpsObfuscationSwitcher;
@@ -0,0 +1,29 @@
1
+ import API from 'foremanReact/API';
2
+ import { addToast } from 'foremanReact/redux/actions/toasts';
3
+ import { inventoryUrl } from '../../ForemanInventoryHelpers';
4
+ import { IPS_OBFUSCATION_TOGGLE } from './IpsObfuscationSwitcherConstants';
5
+
6
+ export const handleToggle = currentIpsObfuscationEnabled => async dispatch => {
7
+ const toggledIpsObfuscationEnabled = !currentIpsObfuscationEnabled;
8
+ try {
9
+ const {
10
+ data: { ipsObfuscationEnabled },
11
+ } = await API.post(inventoryUrl('ips_obfuscation'), {
12
+ value: toggledIpsObfuscationEnabled,
13
+ });
14
+ dispatch({
15
+ type: IPS_OBFUSCATION_TOGGLE,
16
+ payload: {
17
+ ipsObfuscationEnabled,
18
+ },
19
+ });
20
+ } catch (error) {
21
+ dispatch(
22
+ addToast({
23
+ sticky: true,
24
+ type: 'error',
25
+ message: error.message,
26
+ })
27
+ );
28
+ }
29
+ };
@@ -0,0 +1 @@
1
+ export const IPS_OBFUSCATION_TOGGLE = 'IPS_OBFUSCATION_TOGGLE';
@@ -0,0 +1,13 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+ import { noop } from 'patternfly-react';
3
+
4
+ import IpsObfuscationSwitcher from '../IpsObfuscationSwitcher';
5
+
6
+ const fixtures = {
7
+ 'render with props': { ipsObfuscationEnabled: true, handleToggle: noop },
8
+ };
9
+
10
+ describe('IpsObfuscationSwitcher', () => {
11
+ describe('rendering', () =>
12
+ testComponentSnapshotsWithFixtures(IpsObfuscationSwitcher, fixtures));
13
+ });
@@ -0,0 +1,21 @@
1
+ import { testActionSnapshotWithFixtures } from '@theforeman/test';
2
+ import API from 'foremanReact/API';
3
+ import { handleToggle } from '../IpsObfuscationSwitcherActions';
4
+ import { handleToggleResponse } from '../IpsObfuscationSwitcher.fixtures';
5
+
6
+ jest.mock('foremanReact/API');
7
+ API.post.mockImplementation(async () => handleToggleResponse);
8
+
9
+ const fixtures = {
10
+ 'should handleToggle': () => handleToggle(false),
11
+ 'should handleError': () => {
12
+ API.post.mockImplementationOnce(() =>
13
+ Promise.reject(new Error('test error'))
14
+ );
15
+
16
+ return handleToggle(false);
17
+ },
18
+ };
19
+
20
+ describe('IpsObfuscationSwitcher actions', () =>
21
+ testActionSnapshotWithFixtures(fixtures));
@@ -0,0 +1,38 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`IpsObfuscationSwitcher rendering render with props 1`] = `
4
+ <div
5
+ className="ips_obfuscation_switcher"
6
+ >
7
+ <span>
8
+ Obfuscate host ipv4 addresses
9
+ </span>
10
+ <FieldLevelHelp
11
+ buttonClass=""
12
+ content="Obfuscate ipv4 addresses sent to the Red Hat cloud"
13
+ placement="top"
14
+ rootClose={true}
15
+ />
16
+ <Switch
17
+ animate={true}
18
+ baseClass="bootstrap-switch"
19
+ bsSize={null}
20
+ defaultValue={true}
21
+ disabled={false}
22
+ handleWidth="auto"
23
+ inverse={false}
24
+ labelText=" "
25
+ labelWidth="auto"
26
+ offColor="default"
27
+ offText="OFF"
28
+ onChange={[Function]}
29
+ onColor="primary"
30
+ onText="ON"
31
+ readonly={false}
32
+ size="mini"
33
+ tristate={false}
34
+ value={true}
35
+ wrapperClass="wrapper"
36
+ />
37
+ </div>
38
+ `;
@@ -0,0 +1,31 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`IpsObfuscationSwitcher actions should handleError 1`] = `
4
+ Array [
5
+ Array [
6
+ Object {
7
+ "payload": Object {
8
+ "message": Object {
9
+ "message": "test error",
10
+ "sticky": true,
11
+ "type": "error",
12
+ },
13
+ },
14
+ "type": "TOASTS_ADD",
15
+ },
16
+ ],
17
+ ]
18
+ `;
19
+
20
+ exports[`IpsObfuscationSwitcher actions should handleToggle 1`] = `
21
+ Array [
22
+ Array [
23
+ Object {
24
+ "payload": Object {
25
+ "ipsObfuscationEnabled": true,
26
+ },
27
+ "type": "IPS_OBFUSCATION_TOGGLE",
28
+ },
29
+ ],
30
+ ]
31
+ `;
@@ -0,0 +1,20 @@
1
+ import { bindActionCreators } from 'redux';
2
+ import { connect } from 'react-redux';
3
+
4
+ import * as actions from './IpsObfuscationSwitcherActions';
5
+ import IpsObfuscationSwitcher from './IpsObfuscationSwitcher';
6
+ import { selectIpsObfuscationEnabled } from '../AccountList/AccountListSelectors';
7
+
8
+ // map state to props
9
+ const mapStateToProps = state => ({
10
+ ipsObfuscationEnabled: selectIpsObfuscationEnabled(state),
11
+ });
12
+
13
+ // map action dispatchers to props
14
+ const mapDispatchToProps = dispatch => bindActionCreators(actions, dispatch);
15
+
16
+ // export connected component
17
+ export default connect(
18
+ mapStateToProps,
19
+ mapDispatchToProps
20
+ )(IpsObfuscationSwitcher);
@@ -21,7 +21,12 @@ class SyncButton extends React.Component {
21
21
  return (
22
22
  <React.Fragment>
23
23
  <SyncModal show={this.state.showModal} toggleModal={this.toggleModal} />
24
- <Button className="sync_button" onClick={handleClick} bsSize="lg">
24
+ <Button
25
+ className="sync_button"
26
+ onClick={handleClick}
27
+ bsSize="lg"
28
+ disabled={status === STATUS.PENDING}
29
+ >
25
30
  {!cloudToken && (
26
31
  <span>
27
32
  <Icon name="warning" />{' '}
@@ -40,12 +45,13 @@ class SyncButton extends React.Component {
40
45
  }
41
46
 
42
47
  SyncButton.propTypes = {
43
- cloudToken: PropTypes.string.isRequired,
48
+ cloudToken: PropTypes.string,
44
49
  handleSync: PropTypes.func.isRequired,
45
50
  status: PropTypes.string,
46
51
  };
47
52
 
48
53
  SyncButton.defaultProps = {
54
+ cloudToken: null,
49
55
  status: null,
50
56
  };
51
57
 
@@ -6,7 +6,7 @@ import Toast from './components/Toast';
6
6
  import {
7
7
  INVENTORY_SYNC_REQUEST,
8
8
  INVENTORY_SYNC_SUCCESS,
9
- INVENTORY_SYNC_FAILURE,
9
+ INVENTORY_SYNC_ERROR,
10
10
  } from './SyncButtonConstants';
11
11
 
12
12
  export const handleSync = () => async dispatch => {
@@ -40,20 +40,18 @@ export const handleSync = () => async dispatch => {
40
40
  response: { data: { message: toastMessage } = {} } = {},
41
41
  }) {
42
42
  dispatch({
43
- type: INVENTORY_SYNC_FAILURE,
43
+ type: INVENTORY_SYNC_ERROR,
44
44
  payload: {
45
45
  error: message,
46
46
  },
47
47
  });
48
48
 
49
- if (toastMessage) {
50
- dispatch(
51
- addToast({
52
- sticky: true,
53
- type: 'error',
54
- message: toastMessage,
55
- })
56
- );
57
- }
49
+ dispatch(
50
+ addToast({
51
+ sticky: true,
52
+ type: 'error',
53
+ message: toastMessage || message,
54
+ })
55
+ );
58
56
  }
59
57
  };
@@ -1,3 +1,3 @@
1
1
  export const INVENTORY_SYNC_REQUEST = 'INVENTORY_SYNC_REQUEST';
2
2
  export const INVENTORY_SYNC_SUCCESS = 'INVENTORY_SYNC_SUCCESS';
3
- export const INVENTORY_SYNC_FAILURE = 'INVENTORY_SYNC_FAILURE';
3
+ export const INVENTORY_SYNC_ERROR = 'INVENTORY_SYNC_ERROR';
@@ -3,7 +3,7 @@ import { STATUS } from 'foremanReact/constants';
3
3
  import {
4
4
  INVENTORY_SYNC_REQUEST,
5
5
  INVENTORY_SYNC_SUCCESS,
6
- INVENTORY_SYNC_FAILURE,
6
+ INVENTORY_SYNC_ERROR,
7
7
  } from './SyncButtonConstants';
8
8
 
9
9
  export default (
@@ -24,7 +24,7 @@ export default (
24
24
  syncHosts,
25
25
  disconnectHosts,
26
26
  });
27
- case INVENTORY_SYNC_FAILURE:
27
+ case INVENTORY_SYNC_ERROR:
28
28
  return state.merge({
29
29
  ...state,
30
30
  status: STATUS.ERROR,