foreman_rh_cloud 1.0.9 → 1.0.13.1

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 (197) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +33 -0
  3. data/app/controllers/foreman_inventory_upload/accounts_controller.rb +3 -0
  4. data/app/controllers/foreman_inventory_upload/tasks_controller.rb +25 -0
  5. data/app/controllers/foreman_inventory_upload/uploads_controller.rb +18 -0
  6. data/app/controllers/insights_cloud/hits_controller.rb +17 -0
  7. data/app/controllers/insights_cloud/settings_controller.rb +24 -0
  8. data/app/controllers/insights_cloud/tasks_controller.rb +1 -2
  9. data/app/helpers/foreman_inventory_upload_host_helper.rb +10 -2
  10. data/app/models/concerns/rh_cloud_host.rb +15 -0
  11. data/app/models/insights_facet.rb +5 -1
  12. data/app/models/insights_hit.rb +1 -1
  13. data/app/models/inventory_sync/inventory_status.rb +30 -0
  14. data/app/models/setting/rh_cloud.rb +3 -0
  15. data/app/overrides/hosts_list.rb +1 -1
  16. data/app/services/foreman_rh_cloud/cloud_auth.rb +28 -0
  17. data/app/views/foreman_rh_cloud/react/inventory_upload.html.erb +1 -1
  18. data/app/views/hosts/_insights_tab.html.erb +15 -0
  19. data/config/routes.rb +6 -0
  20. data/db/migrate/20200727111529_add_uuid_column_to_insights_facets.foreman_rh_cloud.rb +5 -0
  21. data/db/migrate/20201007115752_add_hits_count_to_insights_facets_table.foreman_rh_cloud.rb +5 -0
  22. data/db/migrate/20201007121540_setup_hits_count_cache.foreman_rh_cloud.rb +10 -0
  23. data/lib/foreman_inventory_upload.rb +4 -0
  24. data/lib/foreman_inventory_upload/async/generate_report_job.rb +1 -1
  25. data/lib/foreman_inventory_upload/async/shell_process.rb +15 -9
  26. data/lib/foreman_inventory_upload/async/upload_report_job.rb +21 -9
  27. data/lib/foreman_inventory_upload/generators/fact_helpers.rb +36 -1
  28. data/lib/foreman_inventory_upload/generators/json_stream.rb +7 -2
  29. data/lib/foreman_inventory_upload/generators/metadata.rb +3 -0
  30. data/lib/foreman_inventory_upload/generators/queries.rb +4 -4
  31. data/lib/foreman_inventory_upload/generators/slice.rb +51 -27
  32. data/lib/foreman_rh_cloud.rb +68 -0
  33. data/lib/foreman_rh_cloud/engine.rb +19 -3
  34. data/lib/foreman_rh_cloud/version.rb +1 -1
  35. data/lib/insights_cloud.rb +8 -8
  36. data/lib/insights_cloud/async/insights_full_sync.rb +19 -31
  37. data/lib/insights_cloud/async/insights_scheduled_sync.rb +23 -0
  38. data/lib/inventory_sync/async/host_result.rb +50 -0
  39. data/lib/inventory_sync/async/inventory_full_sync.rb +80 -0
  40. data/lib/tasks/insights.rake +15 -0
  41. data/lib/tasks/rh_cloud_inventory.rake +37 -0
  42. data/package.json +3 -1
  43. data/test/controllers/insights_sync/settings_controller_test.rb +30 -0
  44. data/test/factories/insights_factories.rb +31 -0
  45. data/test/jobs/insights_full_sync_test.rb +4 -2
  46. data/test/jobs/inventory_full_sync_test.rb +91 -0
  47. data/test/jobs/upload_report_job_test.rb +34 -0
  48. data/test/unit/fact_helpers_test.rb +22 -0
  49. data/test/unit/insights_facet_test.rb +23 -0
  50. data/test/unit/metadata_generator_test.rb +2 -0
  51. data/test/unit/rh_cloud_http_proxy_test.rb +65 -0
  52. data/test/unit/slice_generator_test.rb +144 -8
  53. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.fixtures.js +16 -1
  54. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListActions.js +22 -17
  55. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListReducer.js +18 -0
  56. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListSelectors.js +8 -0
  57. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListActions.test.js +7 -0
  58. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListReducer.test.js +12 -6
  59. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListSelectors.test.js +9 -0
  60. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListActions.test.js.snap +20 -0
  61. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListReducer.test.js.snap +12 -0
  62. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListSelectors.test.js.snap +6 -0
  63. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcher.fixtures.js +2 -0
  64. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherActions.js +10 -11
  65. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherConstants.js +0 -1
  66. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/AutoUploadSwitcherActions.test.js +12 -2
  67. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/__snapshots__/AutoUploadSwitcherActions.test.js.snap +17 -0
  68. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.fixtures.js +1 -0
  69. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.js +30 -0
  70. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherActions.js +29 -0
  71. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherConstants.js +1 -0
  72. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcher.test.js +13 -0
  73. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcherActions.test.js +21 -0
  74. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcher.test.js.snap +38 -0
  75. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcherActions.test.js.snap +31 -0
  76. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/integration.test.js.snap +41 -0
  77. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/integration.test.js +38 -0
  78. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/excludePackagesSwitcher.scss +3 -0
  79. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/index.js +20 -0
  80. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/FullScreenModal.js +5 -1
  81. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/__tests__/__snapshots__/FullScreenModal.test.js.snap +1 -0
  82. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/fullScreenModal.scss +15 -13
  83. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.fixtures.js +2 -1
  84. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.js +1 -0
  85. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.scss +3 -0
  86. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherActions.js +10 -11
  87. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherConstants.js +0 -2
  88. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/HostObfuscationSwitcherActions.test.js +12 -2
  89. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/__snapshots__/HostObfuscationSwitcherActions.test.js.snap +18 -1
  90. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/integration.test.js.snap +9 -0
  91. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.js +4 -0
  92. data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/__snapshots__/InventorySettings.test.js.snap +2 -0
  93. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.fixtures.js +1 -0
  94. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.js +29 -0
  95. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherActions.js +29 -0
  96. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherConstants.js +1 -0
  97. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcher.test.js +13 -0
  98. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcherActions.test.js +21 -0
  99. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcher.test.js.snap +38 -0
  100. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcherActions.test.js.snap +31 -0
  101. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/index.js +20 -0
  102. data/webpack/ForemanInventoryUpload/Components/PageHeader/PageHeader.js +1 -1
  103. data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageHeader.test.js.snap +3 -3
  104. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/DocsButton.js +1 -0
  105. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/__tests__/__snapshots__/DocsButton.test.js.snap +1 -0
  106. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/HistoryButton.js +1 -0
  107. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/__tests__/__snapshots__/HistoryButton.test.js.snap +1 -0
  108. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButton.js +58 -0
  109. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js +57 -0
  110. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonConstants.js +3 -0
  111. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonReducer.js +36 -0
  112. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonSelectors.js +13 -0
  113. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButton.test.js +13 -0
  114. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonActions.test.js +31 -0
  115. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonFixtures.js +9 -0
  116. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonReducer.test.js +26 -0
  117. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonSelectors.test.js +36 -0
  118. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButton.test.js.snap +26 -0
  119. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonActions.test.js.snap +98 -0
  120. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonReducer.test.js.snap +18 -0
  121. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonSelectors.test.js.snap +18 -0
  122. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Modal.js +63 -0
  123. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Toast.js +41 -0
  124. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/modal.scss +20 -0
  125. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/index.js +22 -0
  126. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/ToolbarButtons.js +2 -0
  127. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/__tests__/__snapshots__/ToolbarButtons.test.js.snap +1 -0
  128. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/toolbarButtons.scss +6 -1
  129. data/webpack/ForemanInventoryUpload/Components/StatusChart/StatusChart.js +1 -1
  130. data/webpack/ForemanInventoryUpload/Components/StatusChart/__tests__/__snapshots__/StatusChart.test.js.snap +1 -1
  131. data/webpack/ForemanInventoryUpload/Components/TabContainer/tabContainer.scss +1 -1
  132. data/webpack/ForemanInventoryUpload/Components/TabHeader/TabHeader.js +6 -1
  133. data/webpack/ForemanInventoryUpload/Components/Terminal/Terminal.js +2 -4
  134. data/webpack/ForemanInventoryUpload/ForemanInventoryConstants.js +3 -1
  135. data/webpack/ForemanInventoryUpload/ForemanInventoryHelpers.js +8 -0
  136. data/webpack/ForemanInventoryUpload/ForemanInventoryUploadReducers.js +2 -0
  137. data/webpack/ForemanRhCloudPages.js +9 -0
  138. data/webpack/ForemanRhCloudReducers.js +2 -0
  139. data/webpack/ForemanRhCloudSelectors.js +5 -0
  140. data/webpack/ForemanRhCloudTestHelpers.js +17 -3
  141. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettings.js +33 -0
  142. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsActions.js +57 -0
  143. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsConstants.js +4 -0
  144. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsReducer.js +24 -0
  145. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsSelectors.js +6 -0
  146. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettings.test.js +18 -0
  147. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsActions.test.js +62 -0
  148. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsReducer.test.js +33 -0
  149. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsSelectors.test.js +21 -0
  150. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettings.test.js.snap +15 -0
  151. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsActions.test.js.snap +65 -0
  152. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsReducer.test.js.snap +19 -0
  153. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsSelectors.test.js.snap +9 -0
  154. data/webpack/InsightsCloudSync/Components/InsightsSettings/index.js +21 -0
  155. data/webpack/InsightsCloudSync/Components/InsightsSettings/insightsSettings.scss +16 -0
  156. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.fixtures.js +1 -0
  157. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.js +45 -0
  158. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/InsightsSyncSwitcher.test.js +17 -0
  159. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/__snapshots__/InsightsSyncSwitcher.test.js.snap +38 -0
  160. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/index.js +1 -0
  161. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/insightsSyncSwitcher.scss +3 -0
  162. data/webpack/InsightsCloudSync/InsightsCloudSync.js +32 -28
  163. data/webpack/InsightsCloudSync/InsightsCloudSyncActions.js +10 -11
  164. data/webpack/InsightsCloudSync/InsightsCloudSyncConstants.js +0 -2
  165. data/webpack/InsightsCloudSync/InsightsCloudSyncReducers.js +7 -2
  166. data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +51 -46
  167. data/webpack/InsightsCloudSync/index.js +2 -1
  168. data/webpack/InsightsHostDetailsTab/InsightsTab.js +64 -0
  169. data/webpack/InsightsHostDetailsTab/InsightsTab.scss +86 -0
  170. data/webpack/InsightsHostDetailsTab/InsightsTabActions.js +31 -0
  171. data/webpack/InsightsHostDetailsTab/InsightsTabConstants.js +2 -0
  172. data/webpack/InsightsHostDetailsTab/InsightsTabReducer.js +19 -0
  173. data/webpack/InsightsHostDetailsTab/InsightsTabSelectors.js +3 -0
  174. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTab.fixtures.js +25 -0
  175. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTab.test.js +13 -0
  176. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabActions.test.js +19 -0
  177. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabIntegration.test.js +17 -0
  178. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabReducer.test.js +26 -0
  179. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabSelectors.test.js +13 -0
  180. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTab.test.js.snap +30 -0
  181. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabActions.test.js.snap +58 -0
  182. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabReducer.test.js.snap +34 -0
  183. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabSelectors.test.js.snap +20 -0
  184. data/webpack/InsightsHostDetailsTab/components/ListItem/ListItem.js +69 -0
  185. data/webpack/InsightsHostDetailsTab/components/ListItem/index.js +1 -0
  186. data/webpack/InsightsHostDetailsTab/index.js +20 -0
  187. data/webpack/__mocks__/foremanReact/constants.js +5 -0
  188. data/webpack/__mocks__/foremanReact/redux/actions/toasts.js +8 -0
  189. data/webpack/__tests__/ForemanRhCloudSelectors.test.js +4 -1
  190. data/webpack/__tests__/ForemanRhCloudTestHelpers.test.js +12 -2
  191. data/webpack/__tests__/__snapshots__/ForemanRhCloudSelectors.test.js.snap +10 -9
  192. data/webpack/__tests__/__snapshots__/ForemanRhCloudTestHelpers.test.js.snap +27 -2
  193. data/webpack/index.js +2 -12
  194. data/webpack/stories/decorators/withCardsDecorator.js +1 -1
  195. metadata +120 -12
  196. data/lib/tasks/generator.rake +0 -29
  197. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/hostObfuscationSwitcher.scss +0 -0
@@ -15,3 +15,11 @@ export const selectAutoUploadEnabled = state =>
15
15
 
16
16
  export const selectHostObfuscationEnabled = state =>
17
17
  selectAccountsList(state).hostObfuscationEnabled;
18
+
19
+ export const selectIpsObfuscationEnabled = state =>
20
+ selectAccountsList(state).ipsObfuscationEnabled;
21
+
22
+ export const selectCloudToken = state => selectAccountsList(state).cloudToken;
23
+
24
+ export const selectExcludePackages = state =>
25
+ selectAccountsList(state).excludePackages;
@@ -22,6 +22,13 @@ const fixtures = {
22
22
  'should stopAccountStatusPolling': () =>
23
23
  stopAccountStatusPolling(pollingProcessID),
24
24
  'should restartProcess': () => restartProcess(accountID, activeTab),
25
+ 'should invoke toast notification upon failure': () => {
26
+ API.post.mockImplementationOnce(() =>
27
+ Promise.reject(new Error('test error'))
28
+ );
29
+
30
+ return restartProcess(accountID, activeTab);
31
+ },
25
32
  };
26
33
 
27
34
  describe('AccountList actions', () => testActionSnapshotWithFixtures(fixtures));
@@ -9,27 +9,25 @@ import {
9
9
  } from '../AccountListConstants';
10
10
  import reducer from '../AccountListReducer';
11
11
  import {
12
- accounts,
13
12
  error,
14
13
  pollingProcessID,
15
14
  accountID,
16
15
  processStatusName,
17
16
  autoUploadEnabled,
18
17
  hostObfuscationEnabled,
18
+ ipsObfuscationEnabled,
19
+ pollingResponse,
19
20
  } from '../AccountList.fixtures';
20
21
  import { AUTO_UPLOAD_TOGGLE } from '../../AutoUploadSwitcher/AutoUploadSwitcherConstants';
21
22
  import { HOST_OBFUSCATION_TOGGLE } from '../../HostObfuscationSwitcher/HostObfuscationSwitcherConstants';
23
+ import { IPS_OBFUSCATION_TOGGLE } from '../../IpsObfuscationSwitcher/IpsObfuscationSwitcherConstants';
22
24
 
23
25
  const fixtures = {
24
26
  'should return the initial state': {},
25
27
  'should handle INVENTORY_ACCOUNT_STATUS_POLLING': {
26
28
  action: {
27
29
  type: INVENTORY_ACCOUNT_STATUS_POLLING,
28
- payload: {
29
- accounts,
30
- autoUploadEnabled,
31
- hostObfuscationEnabled,
32
- },
30
+ payload: pollingResponse,
33
31
  },
34
32
  },
35
33
  'should handle INVENTORY_ACCOUNT_STATUS_POLLING_ERROR': {
@@ -76,6 +74,14 @@ const fixtures = {
76
74
  },
77
75
  },
78
76
  },
77
+ 'should handle IPS_OBFUSCATION_TOGGLE': {
78
+ action: {
79
+ type: IPS_OBFUSCATION_TOGGLE,
80
+ payload: {
81
+ ipsObfuscationEnabled,
82
+ },
83
+ },
84
+ },
79
85
  };
80
86
 
81
87
  describe('AccountList reducer', () =>
@@ -5,12 +5,16 @@ import {
5
5
  selectPollingProcessID,
6
6
  selectAutoUploadEnabled,
7
7
  selectHostObfuscationEnabled,
8
+ selectCloudToken,
9
+ selectExcludePackages,
8
10
  } from '../AccountListSelectors';
9
11
  import {
10
12
  pollingProcessID,
11
13
  accounts,
12
14
  autoUploadEnabled,
13
15
  hostObfuscationEnabled,
16
+ cloudToken,
17
+ excludePackages,
14
18
  } from '../AccountList.fixtures';
15
19
  import { rhCloudStateWrapper } from '../../../../ForemanRhCloudTestHelpers';
16
20
 
@@ -20,6 +24,8 @@ const state = rhCloudStateWrapper({
20
24
  pollingProcessID,
21
25
  autoUploadEnabled,
22
26
  hostObfuscationEnabled,
27
+ cloudToken,
28
+ excludePackages,
23
29
  },
24
30
  });
25
31
 
@@ -32,6 +38,9 @@ const fixtures = {
32
38
  selectAutoUploadEnabled(state),
33
39
  'should return AccountList hostObfuscationEnabled': () =>
34
40
  selectHostObfuscationEnabled(state),
41
+ 'should return AccountList cloudToken': () => selectCloudToken(state),
42
+ 'should return AccountList excludePackages': () =>
43
+ selectExcludePackages(state),
35
44
  };
36
45
 
37
46
  describe('AccountList selectors', () =>
@@ -23,7 +23,10 @@ Array [
23
23
  },
24
24
  },
25
25
  "autoUploadEnabled": true,
26
+ "cloudToken": "some-cloud-token",
27
+ "excludePackages": false,
26
28
  "hostObfuscationEnabled": true,
29
+ "ipsObfuscationEnabled": true,
27
30
  },
28
31
  "type": "INVENTORY_ACCOUNT_STATUS_POLLING",
29
32
  },
@@ -31,6 +34,23 @@ Array [
31
34
  ]
32
35
  `;
33
36
 
37
+ exports[`AccountList actions should invoke toast notification upon failure 1`] = `
38
+ Array [
39
+ Array [
40
+ Object {
41
+ "payload": Object {
42
+ "message": Object {
43
+ "message": "test error",
44
+ "sticky": true,
45
+ "type": "error",
46
+ },
47
+ },
48
+ "type": "TOASTS_ADD",
49
+ },
50
+ ],
51
+ ]
52
+ `;
53
+
34
54
  exports[`AccountList actions should restartProcess 1`] = `
35
55
  Array [
36
56
  Array [
@@ -38,8 +38,11 @@ Object {
38
38
  },
39
39
  },
40
40
  "autoUploadEnabled": true,
41
+ "cloudToken": "some-cloud-token",
41
42
  "error": null,
43
+ "excludePackages": false,
42
44
  "hostObfuscationEnabled": true,
45
+ "ipsObfuscationEnabled": true,
43
46
  "pollingProcessID": 0,
44
47
  }
45
48
  `;
@@ -80,6 +83,15 @@ Object {
80
83
  }
81
84
  `;
82
85
 
86
+ exports[`AccountList reducer should handle IPS_OBFUSCATION_TOGGLE 1`] = `
87
+ Object {
88
+ "accounts": Object {},
89
+ "error": null,
90
+ "ipsObfuscationEnabled": true,
91
+ "pollingProcessID": 0,
92
+ }
93
+ `;
94
+
83
95
  exports[`AccountList reducer should return the initial state 1`] = `
84
96
  Object {
85
97
  "accounts": Object {},
@@ -22,6 +22,10 @@ Object {
22
22
 
23
23
  exports[`AccountList selectors should return AccountList autoUploadEnabled 1`] = `true`;
24
24
 
25
+ exports[`AccountList selectors should return AccountList cloudToken 1`] = `"some-cloud-token"`;
26
+
27
+ exports[`AccountList selectors should return AccountList excludePackages 1`] = `false`;
28
+
25
29
  exports[`AccountList selectors should return AccountList hostObfuscationEnabled 1`] = `true`;
26
30
 
27
31
  exports[`AccountList selectors should return AccountList pollingProcessID 1`] = `0`;
@@ -46,6 +50,8 @@ Object {
46
50
  },
47
51
  },
48
52
  "autoUploadEnabled": true,
53
+ "cloudToken": "some-cloud-token",
54
+ "excludePackages": false,
49
55
  "hostObfuscationEnabled": true,
50
56
  "pollingProcessID": 0,
51
57
  }
@@ -1 +1,3 @@
1
+ export const currentAutoUploadEnabled = false;
2
+
1
3
  export const handleToggleResponse = { data: { autoUploadEnabled: true } };
@@ -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
- AUTO_UPLOAD_TOGGLE,
5
- AUTO_UPLOAD_TOGGLE_ERROR,
6
- } from './AutoUploadSwitcherConstants';
4
+ import { AUTO_UPLOAD_TOGGLE } from './AutoUploadSwitcherConstants';
7
5
 
8
6
  export const handleToggle = currentAutoUploadEnabled => async dispatch => {
9
7
  const toggledAutoUploadEnabled = !currentAutoUploadEnabled;
@@ -19,12 +17,13 @@ export const handleToggle = currentAutoUploadEnabled => async dispatch => {
19
17
  autoUploadEnabled,
20
18
  },
21
19
  });
22
- } catch (error) {
23
- dispatch({
24
- type: AUTO_UPLOAD_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,2 +1 @@
1
1
  export const AUTO_UPLOAD_TOGGLE = 'AUTO_UPLOAD_TOGGLE';
2
- export const AUTO_UPLOAD_TOGGLE_ERROR = 'AUTO_UPLOAD_TOGGLE_ERROR';
@@ -1,13 +1,23 @@
1
1
  import { testActionSnapshotWithFixtures } from 'react-redux-test-utils';
2
2
  import API from 'foremanReact/API';
3
3
  import { handleToggle } from '../AutoUploadSwitcherActions';
4
- import { handleToggleResponse } from '../AutoUploadSwitcher.fixtures';
4
+ import {
5
+ handleToggleResponse,
6
+ currentAutoUploadEnabled,
7
+ } from '../AutoUploadSwitcher.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(currentAutoUploadEnabled),
14
+ 'should handleToggle with error': () => {
15
+ API.post.mockImplementationOnce(() =>
16
+ Promise.reject(new Error('Network error!'))
17
+ );
18
+
19
+ return handleToggle(currentAutoUploadEnabled);
20
+ },
11
21
  };
12
22
 
13
23
  describe('AutoUploadSwitcher actions', () =>
@@ -12,3 +12,20 @@ Array [
12
12
  ],
13
13
  ]
14
14
  `;
15
+
16
+ exports[`AutoUploadSwitcher 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
+ `;
@@ -0,0 +1 @@
1
+ export const handleToggleResponse = { data: { excludePackages: true } };
@@ -0,0 +1,30 @@
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
+ import './excludePackagesSwitcher.scss';
6
+
7
+ const ExcludePackagesSwitcher = ({ excludePackages, handleToggle }) => (
8
+ <div className="exclude_packages_switcher">
9
+ <span>Exclude Packages</span>
10
+ <FieldLevelHelp
11
+ content={__('Exclude packages from being uploaded to the Red Hat cloud')}
12
+ />
13
+ <Switch
14
+ size="mini"
15
+ value={excludePackages}
16
+ onChange={() => handleToggle(excludePackages)}
17
+ />
18
+ </div>
19
+ );
20
+
21
+ ExcludePackagesSwitcher.propTypes = {
22
+ excludePackages: PropTypes.bool,
23
+ handleToggle: PropTypes.func.isRequired,
24
+ };
25
+
26
+ ExcludePackagesSwitcher.defaultProps = {
27
+ excludePackages: false,
28
+ };
29
+
30
+ export default ExcludePackagesSwitcher;
@@ -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 { EXCLUDE_PACKAGES_TOGGLE } from './ExcludePackagesSwitcherConstants';
5
+
6
+ export const handleToggle = currentExcludePackages => async dispatch => {
7
+ const toggledExcludePackages = !currentExcludePackages;
8
+ try {
9
+ const {
10
+ data: { excludePackages },
11
+ } = await API.post(inventoryUrl('installed_packages_inclusion'), {
12
+ value: toggledExcludePackages,
13
+ });
14
+ dispatch({
15
+ type: EXCLUDE_PACKAGES_TOGGLE,
16
+ payload: {
17
+ excludePackages,
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 EXCLUDE_PACKAGES_TOGGLE = 'EXCLUDE_PACKAGES_TOGGLE';
@@ -0,0 +1,13 @@
1
+ import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
2
+ import { noop } from 'patternfly-react';
3
+
4
+ import ExcludePackagesSwitcher from '../ExcludePackagesSwitcher';
5
+
6
+ const fixtures = {
7
+ 'render with props': { excludePackages: true, handleToggle: noop },
8
+ };
9
+
10
+ describe('ExcludePackagesSwitcher', () => {
11
+ describe('rendering', () =>
12
+ testComponentSnapshotsWithFixtures(ExcludePackagesSwitcher, fixtures));
13
+ });
@@ -0,0 +1,21 @@
1
+ import { testActionSnapshotWithFixtures } from 'react-redux-test-utils';
2
+ import API from 'foremanReact/API';
3
+ import { handleToggle } from '../ExcludePackagesSwitcherActions';
4
+ import { handleToggleResponse } from '../ExcludePackagesSwitcher.fixtures';
5
+
6
+ jest.mock('foremanReact/API');
7
+ API.post.mockImplementation(async () => handleToggleResponse);
8
+
9
+ const fixtures = {
10
+ 'should handleToggle': () => handleToggle(),
11
+ 'should invoke toast notification upon failure of handleToggle': () => {
12
+ API.post.mockImplementationOnce(() =>
13
+ Promise.reject(new Error('test error'))
14
+ );
15
+
16
+ return handleToggle();
17
+ },
18
+ };
19
+
20
+ describe('ExcludePackagesSwitcher actions', () =>
21
+ testActionSnapshotWithFixtures(fixtures));
@@ -0,0 +1,38 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`ExcludePackagesSwitcher rendering render with props 1`] = `
4
+ <div
5
+ className="exclude_packages_switcher"
6
+ >
7
+ <span>
8
+ Exclude Packages
9
+ </span>
10
+ <FieldLevelHelp
11
+ buttonClass=""
12
+ content="Exclude packages from being uploaded 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[`ExcludePackagesSwitcher actions should handleToggle 1`] = `
4
+ Array [
5
+ Array [
6
+ Object {
7
+ "payload": Object {
8
+ "excludePackages": true,
9
+ },
10
+ "type": "EXCLUDE_PACKAGES_TOGGLE",
11
+ },
12
+ ],
13
+ ]
14
+ `;
15
+
16
+ exports[`ExcludePackagesSwitcher actions should invoke toast notification upon failure of handleToggle 1`] = `
17
+ Array [
18
+ Array [
19
+ Object {
20
+ "payload": Object {
21
+ "message": Object {
22
+ "message": "test error",
23
+ "sticky": true,
24
+ "type": "error",
25
+ },
26
+ },
27
+ "type": "TOASTS_ADD",
28
+ },
29
+ ],
30
+ ]
31
+ `;