foreman_rh_cloud 0.9.8 → 0.9.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 (201) 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 +4 -1
  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/insights_cloud.html.erb +6 -1
  18. data/app/views/foreman_rh_cloud/react/inventory_upload.html.erb +1 -1
  19. data/app/views/hosts/_insights_tab.html.erb +15 -0
  20. data/config/routes.rb +6 -0
  21. data/db/migrate/20200727111529_add_uuid_column_to_insights_facets.foreman_rh_cloud.rb +5 -0
  22. data/db/migrate/20201007115752_add_hits_count_to_insights_facets_table.foreman_rh_cloud.rb +5 -0
  23. data/db/migrate/20201007121540_setup_hits_count_cache.foreman_rh_cloud.rb +10 -0
  24. data/lib/foreman_inventory_upload.rb +4 -0
  25. data/lib/foreman_inventory_upload/async/generate_report_job.rb +1 -1
  26. data/lib/foreman_inventory_upload/async/shell_process.rb +15 -9
  27. data/lib/foreman_inventory_upload/async/upload_report_job.rb +21 -9
  28. data/lib/foreman_inventory_upload/generators/fact_helpers.rb +36 -1
  29. data/lib/foreman_inventory_upload/generators/json_stream.rb +17 -2
  30. data/lib/foreman_inventory_upload/generators/metadata.rb +3 -0
  31. data/lib/foreman_inventory_upload/generators/queries.rb +4 -4
  32. data/lib/foreman_inventory_upload/generators/slice.rb +62 -34
  33. data/lib/foreman_rh_cloud.rb +67 -0
  34. data/lib/foreman_rh_cloud/engine.rb +20 -3
  35. data/lib/foreman_rh_cloud/version.rb +1 -1
  36. data/lib/insights_cloud.rb +8 -8
  37. data/lib/insights_cloud/async/insights_full_sync.rb +24 -32
  38. data/lib/insights_cloud/async/insights_scheduled_sync.rb +23 -0
  39. data/lib/inventory_sync/async/host_result.rb +50 -0
  40. data/lib/inventory_sync/async/inventory_full_sync.rb +80 -0
  41. data/lib/tasks/insights.rake +15 -0
  42. data/lib/tasks/rh_cloud_inventory.rake +37 -0
  43. data/package.json +3 -1
  44. data/test/controllers/insights_sync/settings_controller_test.rb +30 -0
  45. data/test/factories/insights_factories.rb +31 -0
  46. data/test/jobs/insights_full_sync_test.rb +33 -1
  47. data/test/jobs/inventory_full_sync_test.rb +91 -0
  48. data/test/jobs/upload_report_job_test.rb +34 -0
  49. data/test/unit/fact_helpers_test.rb +22 -0
  50. data/test/unit/insights_facet_test.rb +23 -0
  51. data/test/unit/metadata_generator_test.rb +2 -0
  52. data/test/unit/rh_cloud_http_proxy_test.rb +52 -0
  53. data/test/unit/slice_generator_test.rb +173 -11
  54. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.fixtures.js +16 -1
  55. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListActions.js +22 -17
  56. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListReducer.js +18 -0
  57. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListSelectors.js +8 -0
  58. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListActions.test.js +7 -0
  59. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListReducer.test.js +12 -6
  60. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListSelectors.test.js +9 -0
  61. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListActions.test.js.snap +20 -0
  62. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListReducer.test.js.snap +12 -0
  63. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListSelectors.test.js.snap +6 -0
  64. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcher.fixtures.js +2 -0
  65. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherActions.js +10 -11
  66. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherConstants.js +0 -1
  67. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/AutoUploadSwitcherActions.test.js +12 -2
  68. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/__snapshots__/AutoUploadSwitcherActions.test.js.snap +17 -0
  69. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.fixtures.js +1 -0
  70. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.js +30 -0
  71. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherActions.js +29 -0
  72. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherConstants.js +1 -0
  73. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcher.test.js +13 -0
  74. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcherActions.test.js +21 -0
  75. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcher.test.js.snap +38 -0
  76. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcherActions.test.js.snap +31 -0
  77. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/integration.test.js.snap +41 -0
  78. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/integration.test.js +38 -0
  79. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/excludePackagesSwitcher.scss +3 -0
  80. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/index.js +20 -0
  81. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/FullScreenModal.js +5 -1
  82. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/__tests__/__snapshots__/FullScreenModal.test.js.snap +1 -0
  83. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/fullScreenModal.scss +15 -13
  84. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.fixtures.js +2 -1
  85. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.js +1 -0
  86. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.scss +3 -0
  87. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherActions.js +10 -11
  88. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherConstants.js +0 -2
  89. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/HostObfuscationSwitcherActions.test.js +12 -2
  90. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/__snapshots__/HostObfuscationSwitcherActions.test.js.snap +18 -1
  91. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/integration.test.js.snap +9 -0
  92. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.js +4 -0
  93. data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/__snapshots__/InventorySettings.test.js.snap +2 -0
  94. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.fixtures.js +1 -0
  95. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.js +29 -0
  96. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherActions.js +29 -0
  97. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherConstants.js +1 -0
  98. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcher.test.js +13 -0
  99. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcherActions.test.js +21 -0
  100. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcher.test.js.snap +38 -0
  101. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcherActions.test.js.snap +31 -0
  102. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/index.js +20 -0
  103. data/webpack/ForemanInventoryUpload/Components/PageHeader/PageHeader.js +1 -1
  104. data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageHeader.test.js.snap +3 -3
  105. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/DocsButton.js +1 -0
  106. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/__tests__/__snapshots__/DocsButton.test.js.snap +1 -0
  107. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/HistoryButton.js +1 -0
  108. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/__tests__/__snapshots__/HistoryButton.test.js.snap +1 -0
  109. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/PageDescription.js +2 -2
  110. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/__tests__/__snapshots__/PageDescription.test.js.snap +2 -2
  111. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButton.js +58 -0
  112. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js +57 -0
  113. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonConstants.js +3 -0
  114. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonReducer.js +36 -0
  115. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonSelectors.js +13 -0
  116. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButton.test.js +13 -0
  117. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonActions.test.js +31 -0
  118. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonFixtures.js +9 -0
  119. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonReducer.test.js +26 -0
  120. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonSelectors.test.js +36 -0
  121. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButton.test.js.snap +26 -0
  122. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonActions.test.js.snap +98 -0
  123. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonReducer.test.js.snap +18 -0
  124. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonSelectors.test.js.snap +18 -0
  125. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Modal.js +63 -0
  126. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Toast.js +41 -0
  127. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/modal.scss +20 -0
  128. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/index.js +22 -0
  129. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/ToolbarButtons.js +2 -0
  130. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/__tests__/__snapshots__/ToolbarButtons.test.js.snap +1 -0
  131. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/toolbarButtons.scss +6 -1
  132. data/webpack/ForemanInventoryUpload/Components/StatusChart/StatusChart.js +1 -1
  133. data/webpack/ForemanInventoryUpload/Components/StatusChart/__tests__/__snapshots__/StatusChart.test.js.snap +1 -1
  134. data/webpack/ForemanInventoryUpload/Components/TabContainer/tabContainer.scss +1 -1
  135. data/webpack/ForemanInventoryUpload/Components/TabHeader/TabHeader.js +6 -1
  136. data/webpack/ForemanInventoryUpload/Components/Terminal/Terminal.js +2 -4
  137. data/webpack/ForemanInventoryUpload/ForemanInventoryConstants.js +3 -1
  138. data/webpack/ForemanInventoryUpload/ForemanInventoryHelpers.js +8 -0
  139. data/webpack/ForemanInventoryUpload/ForemanInventoryUploadReducers.js +2 -0
  140. data/webpack/ForemanRhCloudPages.js +9 -0
  141. data/webpack/ForemanRhCloudReducers.js +2 -0
  142. data/webpack/ForemanRhCloudSelectors.js +5 -0
  143. data/webpack/ForemanRhCloudTestHelpers.js +17 -3
  144. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettings.js +33 -0
  145. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsActions.js +57 -0
  146. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsConstants.js +4 -0
  147. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsReducer.js +24 -0
  148. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsSelectors.js +6 -0
  149. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettings.test.js +18 -0
  150. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsActions.test.js +62 -0
  151. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsReducer.test.js +33 -0
  152. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsSelectors.test.js +21 -0
  153. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettings.test.js.snap +15 -0
  154. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsActions.test.js.snap +65 -0
  155. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsReducer.test.js.snap +19 -0
  156. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsSelectors.test.js.snap +9 -0
  157. data/webpack/InsightsCloudSync/Components/InsightsSettings/index.js +21 -0
  158. data/webpack/InsightsCloudSync/Components/InsightsSettings/insightsSettings.scss +16 -0
  159. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.fixtures.js +1 -0
  160. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.js +45 -0
  161. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/InsightsSyncSwitcher.test.js +17 -0
  162. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/__snapshots__/InsightsSyncSwitcher.test.js.snap +38 -0
  163. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/index.js +1 -0
  164. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/insightsSyncSwitcher.scss +3 -0
  165. data/webpack/InsightsCloudSync/InsightsCloudSync.js +38 -5
  166. data/webpack/InsightsCloudSync/InsightsCloudSync.test.js +3 -0
  167. data/webpack/InsightsCloudSync/InsightsCloudSyncActions.js +10 -11
  168. data/webpack/InsightsCloudSync/InsightsCloudSyncConstants.js +0 -2
  169. data/webpack/InsightsCloudSync/InsightsCloudSyncReducers.js +7 -2
  170. data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +49 -9
  171. data/webpack/InsightsCloudSync/index.js +2 -1
  172. data/webpack/InsightsHostDetailsTab/InsightsTab.js +64 -0
  173. data/webpack/InsightsHostDetailsTab/InsightsTab.scss +86 -0
  174. data/webpack/InsightsHostDetailsTab/InsightsTabActions.js +31 -0
  175. data/webpack/InsightsHostDetailsTab/InsightsTabConstants.js +2 -0
  176. data/webpack/InsightsHostDetailsTab/InsightsTabReducer.js +19 -0
  177. data/webpack/InsightsHostDetailsTab/InsightsTabSelectors.js +3 -0
  178. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTab.fixtures.js +25 -0
  179. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTab.test.js +13 -0
  180. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabActions.test.js +19 -0
  181. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabIntegration.test.js +17 -0
  182. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabReducer.test.js +26 -0
  183. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabSelectors.test.js +13 -0
  184. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTab.test.js.snap +30 -0
  185. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabActions.test.js.snap +58 -0
  186. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabReducer.test.js.snap +34 -0
  187. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabSelectors.test.js.snap +20 -0
  188. data/webpack/InsightsHostDetailsTab/components/ListItem/ListItem.js +69 -0
  189. data/webpack/InsightsHostDetailsTab/components/ListItem/index.js +1 -0
  190. data/webpack/InsightsHostDetailsTab/index.js +20 -0
  191. data/webpack/__mocks__/foremanReact/constants.js +5 -0
  192. data/webpack/__mocks__/foremanReact/redux/actions/toasts.js +8 -0
  193. data/webpack/__tests__/ForemanRhCloudSelectors.test.js +4 -1
  194. data/webpack/__tests__/ForemanRhCloudTestHelpers.test.js +12 -2
  195. data/webpack/__tests__/__snapshots__/ForemanRhCloudSelectors.test.js.snap +10 -9
  196. data/webpack/__tests__/__snapshots__/ForemanRhCloudTestHelpers.test.js.snap +27 -2
  197. data/webpack/index.js +2 -12
  198. data/webpack/stories/decorators/withCardsDecorator.js +1 -1
  199. metadata +120 -12
  200. data/lib/tasks/generator.rake +0 -29
  201. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/hostObfuscationSwitcher.scss +0 -0
@@ -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);
@@ -26,7 +26,7 @@ const PageHeader = () => (
26
26
  <Grid.Col xs={4}>
27
27
  <InventoryFilter />
28
28
  </Grid.Col>
29
- <Grid.Col xs={4} xsOffset={4}>
29
+ <Grid.Col xs={6} xsOffset={2}>
30
30
  <ToolbarButtons />
31
31
  </Grid.Col>
32
32
  </Grid.Row>
@@ -14,7 +14,7 @@ exports[`PageHeader rendering render without Props 1`] = `
14
14
  <h1
15
15
  className="inventory_title"
16
16
  >
17
- Red Hat Inventory Uploads
17
+ Red Hat Inventory
18
18
  </h1>
19
19
  </Col>
20
20
  </Row>
@@ -51,8 +51,8 @@ exports[`PageHeader rendering render without Props 1`] = `
51
51
  <Col
52
52
  bsClass="col"
53
53
  componentClass="div"
54
- xs={4}
55
- xsOffset={4}
54
+ xs={6}
55
+ xsOffset={2}
56
56
  >
57
57
  <ToolbarButtons />
58
58
  </Col>
@@ -8,6 +8,7 @@ const DocsButton = () => (
8
8
  href={getInventoryDocsUrl()}
9
9
  target="_blank"
10
10
  rel="noopener noreferrer"
11
+ bsSize="lg"
11
12
  >
12
13
  <Icon type="pf" name="help" />
13
14
  {DOCS_BUTTON_TEXT}
@@ -5,6 +5,7 @@ exports[`DocsButton rendering render without Props 1`] = `
5
5
  active={false}
6
6
  block={false}
7
7
  bsClass="btn"
8
+ bsSize="lg"
8
9
  bsStyle="default"
9
10
  disabled={false}
10
11
  href="https://access.redhat.com/products/subscription-central"
@@ -9,6 +9,7 @@ const HistoryButton = () => (
9
9
  href={getActionsHistoryUrl()}
10
10
  target="_blank"
11
11
  rel="noopener noreferrer"
12
+ bsSize="lg"
12
13
  >
13
14
  <Icon name="history" />
14
15
  {ACTIONS_HISTORY_BUTTON_TEXT}
@@ -5,6 +5,7 @@ exports[`HistoryButton rendering render without Props 1`] = `
5
5
  active={false}
6
6
  block={false}
7
7
  bsClass="btn"
8
+ bsSize="lg"
8
9
  bsStyle="default"
9
10
  className="tasks_history_button"
10
11
  disabled={false}
@@ -10,12 +10,12 @@ export const PageDescription = () => (
10
10
  </p>
11
11
  <p>
12
12
  {__(
13
- 'In order to utilize these servies, you can set the auto upload in the settings to "ON".'
13
+ 'In order to utilize these services, you can set the auto upload in the settings to "ON".'
14
14
  )}
15
15
  </p>
16
16
  <p>
17
17
  {__(
18
- 'You can also trigger the upload manually by openning the relevant organization card, and clicking on the "Restart" button'
18
+ 'You can also trigger the upload manually by opening the relevant organization card, and clicking on the "Restart" button'
19
19
  )}
20
20
  </p>
21
21
  </div>
@@ -8,10 +8,10 @@ exports[`PageDescription rendering render without Props 1`] = `
8
8
  Red Hat Insights is a set of cloud services which provide unified subscription reporting, predictive analysis and remediation of issues through this Satellite instance.
9
9
  </p>
10
10
  <p>
11
- In order to utilize these servies, you can set the auto upload in the settings to "ON".
11
+ In order to utilize these services, you can set the auto upload in the settings to "ON".
12
12
  </p>
13
13
  <p>
14
- You can also trigger the upload manually by openning the relevant organization card, and clicking on the "Restart" button
14
+ You can also trigger the upload manually by opening the relevant organization card, and clicking on the "Restart" button
15
15
  </p>
16
16
  </div>
17
17
  `;
@@ -0,0 +1,58 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Button, Icon, Spinner } from 'patternfly-react';
4
+ import { STATUS } from 'foremanReact/constants';
5
+ import SyncModal from './components/Modal';
6
+ import { SYNC_BUTTON_TEXT } from '../../../../ForemanInventoryConstants';
7
+
8
+ class SyncButton extends React.Component {
9
+ state = {
10
+ showModal: false,
11
+ };
12
+
13
+ toggleModal = () => {
14
+ this.setState({ showModal: !this.state.showModal });
15
+ };
16
+
17
+ render() {
18
+ const { cloudToken, handleSync, status } = this.props;
19
+
20
+ const handleClick = !cloudToken ? this.toggleModal : handleSync;
21
+ return (
22
+ <React.Fragment>
23
+ <SyncModal show={this.state.showModal} toggleModal={this.toggleModal} />
24
+ <Button
25
+ className="sync_button"
26
+ onClick={handleClick}
27
+ bsSize="lg"
28
+ disabled={status === STATUS.PENDING}
29
+ >
30
+ {!cloudToken && (
31
+ <span>
32
+ <Icon name="warning" />{' '}
33
+ </span>
34
+ )}
35
+ {status === STATUS.PENDING ? (
36
+ <Spinner loading size="xs" />
37
+ ) : (
38
+ <Icon name="refresh" />
39
+ )}
40
+ {SYNC_BUTTON_TEXT}
41
+ </Button>
42
+ </React.Fragment>
43
+ );
44
+ }
45
+ }
46
+
47
+ SyncButton.propTypes = {
48
+ cloudToken: PropTypes.string,
49
+ handleSync: PropTypes.func.isRequired,
50
+ status: PropTypes.string,
51
+ };
52
+
53
+ SyncButton.defaultProps = {
54
+ cloudToken: null,
55
+ status: null,
56
+ };
57
+
58
+ export default SyncButton;
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import API from 'foremanReact/API';
3
+ import { addToast } from 'foremanReact/redux/actions/toasts';
4
+ import { inventoryUrl } from '../../../../ForemanInventoryHelpers';
5
+ import Toast from './components/Toast';
6
+ import {
7
+ INVENTORY_SYNC_REQUEST,
8
+ INVENTORY_SYNC_SUCCESS,
9
+ INVENTORY_SYNC_ERROR,
10
+ } from './SyncButtonConstants';
11
+
12
+ export const handleSync = () => async dispatch => {
13
+ dispatch({
14
+ type: INVENTORY_SYNC_REQUEST,
15
+ payload: {},
16
+ });
17
+ try {
18
+ const {
19
+ data: { syncHosts, disconnectHosts },
20
+ } = await API.post(inventoryUrl('tasks'));
21
+ dispatch({
22
+ type: INVENTORY_SYNC_SUCCESS,
23
+ payload: {
24
+ syncHosts,
25
+ disconnectHosts,
26
+ },
27
+ });
28
+
29
+ dispatch(
30
+ addToast({
31
+ sticky: true,
32
+ type: 'success',
33
+ message: (
34
+ <Toast syncHosts={syncHosts} disconnectHosts={disconnectHosts} />
35
+ ),
36
+ })
37
+ );
38
+ } catch ({
39
+ message,
40
+ response: { data: { message: toastMessage } = {} } = {},
41
+ }) {
42
+ dispatch({
43
+ type: INVENTORY_SYNC_ERROR,
44
+ payload: {
45
+ error: message,
46
+ },
47
+ });
48
+
49
+ dispatch(
50
+ addToast({
51
+ sticky: true,
52
+ type: 'error',
53
+ message: toastMessage || message,
54
+ })
55
+ );
56
+ }
57
+ };
@@ -0,0 +1,3 @@
1
+ export const INVENTORY_SYNC_REQUEST = 'INVENTORY_SYNC_REQUEST';
2
+ export const INVENTORY_SYNC_SUCCESS = 'INVENTORY_SYNC_SUCCESS';
3
+ export const INVENTORY_SYNC_ERROR = 'INVENTORY_SYNC_ERROR';
@@ -0,0 +1,36 @@
1
+ import Immutable from 'seamless-immutable';
2
+ import { STATUS } from 'foremanReact/constants';
3
+ import {
4
+ INVENTORY_SYNC_REQUEST,
5
+ INVENTORY_SYNC_SUCCESS,
6
+ INVENTORY_SYNC_ERROR,
7
+ } from './SyncButtonConstants';
8
+
9
+ export default (
10
+ state = Immutable({}),
11
+ { type, payload: { syncHosts, disconnectHosts, error } = {} }
12
+ ) => {
13
+ switch (type) {
14
+ case INVENTORY_SYNC_REQUEST:
15
+ return state.merge({
16
+ ...state,
17
+ status: STATUS.PENDING,
18
+ error: null,
19
+ });
20
+ case INVENTORY_SYNC_SUCCESS:
21
+ return state.merge({
22
+ ...state,
23
+ status: STATUS.RESOLVED,
24
+ syncHosts,
25
+ disconnectHosts,
26
+ });
27
+ case INVENTORY_SYNC_ERROR:
28
+ return state.merge({
29
+ ...state,
30
+ status: STATUS.ERROR,
31
+ error,
32
+ });
33
+ default:
34
+ return state;
35
+ }
36
+ };
@@ -0,0 +1,13 @@
1
+ import { selectForemanInventoryUpload } from '../../../../../ForemanRhCloudSelectors';
2
+
3
+ export const selectInventorySync = state =>
4
+ selectForemanInventoryUpload(state).inventorySync;
5
+
6
+ export const selectStatus = state => selectInventorySync(state).status;
7
+
8
+ export const selectError = state => selectInventorySync(state).error;
9
+
10
+ export const selectSyncHosts = state => selectInventorySync(state).syncHosts;
11
+
12
+ export const selectDisconnectHosts = state =>
13
+ selectInventorySync(state).disconnectHosts;
@@ -0,0 +1,13 @@
1
+ import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
2
+ import { noop } from 'patternfly-react';
3
+
4
+ import SyncButton from '../SyncButton';
5
+
6
+ const fixtures = {
7
+ 'render with Props': { cloudToken: '1234', handleSync: noop },
8
+ };
9
+
10
+ describe('SyncButton', () => {
11
+ describe('rendering', () =>
12
+ testComponentSnapshotsWithFixtures(SyncButton, fixtures));
13
+ });
@@ -0,0 +1,31 @@
1
+ import { testActionSnapshotWithFixtures } from 'react-redux-test-utils';
2
+ import API from 'foremanReact/API';
3
+ import { handleSync } from '../SyncButtonActions';
4
+ import { successResponse } from './SyncButtonFixtures';
5
+
6
+ jest.mock('foremanReact/API');
7
+ API.post.mockImplementation(async () => successResponse);
8
+
9
+ const fixtures = {
10
+ 'should handleSync': () => handleSync(),
11
+ 'should handleSync with error message': () => {
12
+ API.post.mockImplementationOnce(() =>
13
+ Promise.reject(new Error('Network error!'))
14
+ );
15
+
16
+ return handleSync();
17
+ },
18
+ 'should handleSync with custom error message': () => {
19
+ API.post.mockImplementationOnce(() => {
20
+ const customError = new Error('Server error!');
21
+ customError.response = {
22
+ data: { message: 'Custom error to display in a toast' },
23
+ };
24
+ return Promise.reject(customError);
25
+ });
26
+
27
+ return handleSync();
28
+ },
29
+ };
30
+
31
+ describe('SyncButton actions', () => testActionSnapshotWithFixtures(fixtures));
@@ -0,0 +1,9 @@
1
+ export const syncHosts = 1;
2
+
3
+ export const disconnectHosts = 0;
4
+
5
+ export const successResponse = { data: { syncHosts, disconnectHosts } };
6
+
7
+ export const status = 'RESOLVED';
8
+
9
+ export const error = 'some-error';
@@ -0,0 +1,26 @@
1
+ import { testReducerSnapshotWithFixtures } from 'react-redux-test-utils';
2
+ import reducer from '../SyncButtonReducer';
3
+ import { syncHosts, disconnectHosts } from './SyncButtonFixtures';
4
+ import {
5
+ INVENTORY_SYNC_REQUEST,
6
+ INVENTORY_SYNC_SUCCESS,
7
+ } from '../SyncButtonConstants';
8
+
9
+ const fixtures = {
10
+ 'should return the initial state': {},
11
+ 'should handle INVENTORY_SYNC_REQUEST': {
12
+ action: {
13
+ type: INVENTORY_SYNC_REQUEST,
14
+ payload: {},
15
+ },
16
+ },
17
+ 'should handle INVENTORY_SYNC_SUCCESS': {
18
+ action: {
19
+ type: INVENTORY_SYNC_SUCCESS,
20
+ payload: { syncHosts, disconnectHosts },
21
+ },
22
+ },
23
+ };
24
+
25
+ describe('AccountList reducer', () =>
26
+ testReducerSnapshotWithFixtures(reducer, fixtures));