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
@@ -1,7 +1,9 @@
1
1
  import { translate as __ } from 'foremanReact/common/I18n';
2
2
 
3
- export const INVENTORY_PAGE_TITLE = __('Red Hat Inventory Uploads');
3
+ export const INVENTORY_PAGE_TITLE = __('Red Hat Inventory');
4
4
 
5
5
  export const DOCS_BUTTON_TEXT = __(' Documentation');
6
6
 
7
7
  export const ACTIONS_HISTORY_BUTTON_TEXT = __(' Actions history');
8
+
9
+ export const SYNC_BUTTON_TEXT = __(' Sync inventory status');
@@ -10,3 +10,11 @@ export const getActionsHistoryUrl = () =>
10
10
  foremanUrl(
11
11
  '/foreman_tasks/tasks?search=action++%3D++ForemanInventoryUpload%3A%3AAsync%3A%3AGenerateReportJob+or+action++%3D++ForemanInventoryUpload%3A%3AAsync%3A%3AGenerateAllReportsJob&page=1'
12
12
  );
13
+
14
+ export const isExitCodeLoading = exitCode => {
15
+ const exitCodeLC = exitCode.toLowerCase();
16
+ return (
17
+ exitCodeLC.indexOf('running') !== -1 ||
18
+ exitCodeLC.indexOf('restarting') !== -1
19
+ );
20
+ };
@@ -2,11 +2,13 @@ import { combineReducers } from 'redux';
2
2
  import { reducers as accountListReducers } from './Components/AccountList';
3
3
  import { reducers as dashboardReducers } from './Components/Dashboard';
4
4
  import { reducers as filterReducers } from './Components/InventoryFilter';
5
+ import { reducers as inventorySyncReducers } from './Components/PageHeader/components/SyncButton';
5
6
 
6
7
  export default {
7
8
  inventoryUpload: combineReducers({
8
9
  ...accountListReducers,
9
10
  ...dashboardReducers,
10
11
  ...filterReducers,
12
+ ...inventorySyncReducers,
11
13
  }),
12
14
  };
@@ -0,0 +1,9 @@
1
+ import ForemanInventoryUpload from './ForemanInventoryUpload';
2
+ import InsightsCloudSync from './InsightsCloudSync';
3
+ import InsightsHostDetailsTab from './InsightsHostDetailsTab';
4
+
5
+ export default [
6
+ { name: 'ForemanInventoryUpload', type: ForemanInventoryUpload },
7
+ { name: 'InsightsCloudSync', type: InsightsCloudSync },
8
+ { name: 'InsightsHostDetailsTab', type: InsightsHostDetailsTab },
9
+ ];
@@ -1,10 +1,12 @@
1
1
  import { combineReducers } from 'redux';
2
2
  import inventoryUploadReducers from './ForemanInventoryUpload/ForemanInventoryUploadReducers';
3
3
  import insightsReducers from './InsightsCloudSync/InsightsCloudSyncReducers';
4
+ import { hostInsightsReducers } from './InsightsHostDetailsTab';
4
5
 
5
6
  export default {
6
7
  ForemanRhCloud: combineReducers({
7
8
  ...inventoryUploadReducers,
8
9
  ...insightsReducers,
10
+ ...hostInsightsReducers,
9
11
  }),
10
12
  };
@@ -1,5 +1,10 @@
1
1
  export const selectForemanRhCloud = state => state.ForemanRhCloud;
2
+
2
3
  export const selectForemanInventoryUpload = state =>
3
4
  selectForemanRhCloud(state).inventoryUpload;
5
+
4
6
  export const selectInsightsCloudSync = state =>
5
7
  selectForemanRhCloud(state).InsightsCloudSync;
8
+
9
+ export const selectHostInsights = state =>
10
+ selectForemanRhCloud(state).hostInsights;
@@ -1,6 +1,20 @@
1
- export const rhCloudStateWrapper = innerState => ({
1
+ export const rhCloudStateWrapper = (
2
+ inventoryState = {},
3
+ insightsState = {},
4
+ hostInsightsState = {}
5
+ ) => ({
2
6
  ForemanRhCloud: {
3
- inventoryUpload: { ...innerState },
4
- InsightsCloudSync: { ...innerState },
7
+ inventoryUpload: { ...inventoryState },
8
+ InsightsCloudSync: { ...insightsState },
9
+ hostInsights: { ...hostInsightsState },
5
10
  },
6
11
  });
12
+
13
+ export const inventoryStateWrapper = innerState =>
14
+ rhCloudStateWrapper(innerState);
15
+
16
+ export const insightsStateWrapper = innerState =>
17
+ rhCloudStateWrapper({}, innerState);
18
+
19
+ export const hostInsightsStateWrapper = innerState =>
20
+ rhCloudStateWrapper({}, {}, innerState);
@@ -0,0 +1,33 @@
1
+ import React, { Component } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { translate as __ } from 'foremanReact/common/I18n';
4
+ import InsightsSyncSwitcher from '../InsightsSyncSwitcher';
5
+ import './insightsSettings.scss';
6
+
7
+ class InsightsSettings extends Component {
8
+ componentDidMount() {
9
+ const { getInsightsSyncSettings } = this.props;
10
+ getInsightsSyncSettings();
11
+ }
12
+
13
+ render() {
14
+ const { insightsSyncEnabled, setInsightsSyncEnabled } = this.props;
15
+ return (
16
+ <div className="insights_settings">
17
+ <h3>{__('Settings')}</h3>
18
+ <InsightsSyncSwitcher
19
+ insightsSyncEnabled={insightsSyncEnabled}
20
+ setInsightsSyncEnabled={setInsightsSyncEnabled}
21
+ />
22
+ </div>
23
+ );
24
+ }
25
+ }
26
+
27
+ InsightsSettings.propTypes = {
28
+ insightsSyncEnabled: PropTypes.bool.isRequired,
29
+ getInsightsSyncSettings: PropTypes.func.isRequired,
30
+ setInsightsSyncEnabled: PropTypes.func.isRequired,
31
+ };
32
+
33
+ export default InsightsSettings;
@@ -0,0 +1,57 @@
1
+ import API from 'foremanReact/API';
2
+ import { addToast } from 'foremanReact/redux/actions/toasts';
3
+ import { insightsCloudUrl } from '../../InsightsCloudSyncHelpers';
4
+ import {
5
+ INSIGHTS_SYNC_SETTING_SET,
6
+ INSIGHTS_SYNC_SETTINGS_GET_SUCCESS,
7
+ } from './InsightsSettingsConstants';
8
+
9
+ export const getInsightsSyncSettings = () => async dispatch => {
10
+ try {
11
+ const {
12
+ data: { insightsSyncEnabled },
13
+ } = await API.get(insightsCloudUrl('settings'));
14
+ dispatch({
15
+ type: INSIGHTS_SYNC_SETTINGS_GET_SUCCESS,
16
+ payload: {
17
+ settings: {
18
+ insightsSyncEnabled,
19
+ },
20
+ },
21
+ });
22
+ } catch ({ message }) {
23
+ dispatch(
24
+ addToast({
25
+ sticky: true,
26
+ type: 'error',
27
+ message,
28
+ })
29
+ );
30
+ }
31
+ };
32
+
33
+ export const setInsightsSyncEnabled = currentInsightsSyncEnabled => async dispatch => {
34
+ try {
35
+ const {
36
+ data: { insightsSyncEnabled },
37
+ } = await API.patch(insightsCloudUrl('settings'), {
38
+ insightsSyncEnabled: currentInsightsSyncEnabled,
39
+ });
40
+ dispatch({
41
+ type: INSIGHTS_SYNC_SETTING_SET,
42
+ payload: {
43
+ settings: {
44
+ insightsSyncEnabled,
45
+ },
46
+ },
47
+ });
48
+ } catch ({ message }) {
49
+ dispatch(
50
+ addToast({
51
+ sticky: true,
52
+ type: 'error',
53
+ message,
54
+ })
55
+ );
56
+ }
57
+ };
@@ -0,0 +1,4 @@
1
+ export const INSIGHTS_SYNC_SETTING_SET = 'INSIGHTS_SYNC_SETTING_SET';
2
+
3
+ export const INSIGHTS_SYNC_SETTINGS_GET_SUCCESS =
4
+ 'INSIGHTS_SYNC_SETTINGS_GET_SUCCESS';
@@ -0,0 +1,24 @@
1
+ import Immutable from 'seamless-immutable';
2
+ import {
3
+ INSIGHTS_SYNC_SETTING_SET,
4
+ INSIGHTS_SYNC_SETTINGS_GET_SUCCESS,
5
+ } from './InsightsSettingsConstants';
6
+
7
+ const initialState = Immutable({
8
+ insightsSyncEnabled: false,
9
+ });
10
+
11
+ export default (state = initialState, action) => {
12
+ const { payload: { settings } = {} } = action;
13
+
14
+ switch (action.type) {
15
+ case INSIGHTS_SYNC_SETTINGS_GET_SUCCESS:
16
+ case INSIGHTS_SYNC_SETTING_SET:
17
+ return state.merge({
18
+ ...state,
19
+ ...settings,
20
+ });
21
+ default:
22
+ return state;
23
+ }
24
+ };
@@ -0,0 +1,6 @@
1
+ import { selectInsightsCloudSync } from '../../../ForemanRhCloudSelectors';
2
+
3
+ export const selectSettings = state => selectInsightsCloudSync(state).settings;
4
+
5
+ export const selectInsightsSyncEnabled = state =>
6
+ selectSettings(state).insightsSyncEnabled;
@@ -0,0 +1,18 @@
1
+ import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
2
+ import { noop } from 'patternfly-react';
3
+
4
+ import InsightsSettings from '../InsightsSettings';
5
+
6
+ const fixtures = {
7
+ 'render without Props': {
8
+ insightsSyncEnabled: false,
9
+ getInsightsSyncSettings: noop,
10
+ setInsightsSyncEnabled: noop,
11
+ },
12
+ /** fixtures, props for the component */
13
+ };
14
+
15
+ describe('InsightsSettings', () => {
16
+ describe('rendering', () =>
17
+ testComponentSnapshotsWithFixtures(InsightsSettings, fixtures));
18
+ });
@@ -0,0 +1,62 @@
1
+ import { testActionSnapshotWithFixtures } from 'react-redux-test-utils';
2
+ import API from 'foremanReact/API';
3
+ import {
4
+ getInsightsSyncSettings,
5
+ setInsightsSyncEnabled,
6
+ } from '../InsightsSettingsActions';
7
+ import { rhCloudStateWrapper } from '../../../../ForemanRhCloudTestHelpers';
8
+
9
+ const serverMock = {
10
+ data: { insightsSyncEnabled: true },
11
+ };
12
+
13
+ jest.mock('foremanReact/API');
14
+ API.get.mockImplementation(() => serverMock);
15
+ API.patch.mockImplementation(() => serverMock);
16
+
17
+ const runWithGetState = (state, action, params) => dispatch => {
18
+ const getState = () => rhCloudStateWrapper({ InsightsCloudSync: state });
19
+ action(params)(dispatch, getState);
20
+ };
21
+
22
+ const fixtures = {
23
+ 'should generate INSIGHTS_SYNC_SETTINGS_GET_SUCCESS action': () =>
24
+ runWithGetState({ settings: {} }, getInsightsSyncSettings, {}),
25
+ 'should handle getInsightsSyncSettings with error ': () => {
26
+ API.get.mockImplementationOnce(() =>
27
+ Promise.reject(new Error('Network error!'))
28
+ );
29
+ return runWithGetState({ settings: {} }, getInsightsSyncSettings, {});
30
+ },
31
+ 'should generate INSIGHTS_SYNC_SETTING_SET action': () =>
32
+ runWithGetState(
33
+ { settings: { insightsSyncEnabled: false } },
34
+ setInsightsSyncEnabled,
35
+ true
36
+ ),
37
+ 'should handle setInsightsSyncEnabled with error ': () => {
38
+ API.patch.mockImplementationOnce(() =>
39
+ Promise.reject(new Error('Network error!'))
40
+ );
41
+ return runWithGetState(
42
+ { settings: { insightsSyncEnabled: false } },
43
+ setInsightsSyncEnabled,
44
+ true
45
+ );
46
+ },
47
+ };
48
+
49
+ describe('InsightsSettings actions', () => {
50
+ const { location } = window;
51
+
52
+ beforeAll(() => {
53
+ delete window.location;
54
+ window.location = { href: jest.fn() };
55
+ });
56
+
57
+ afterAll(() => {
58
+ window.location = location;
59
+ });
60
+
61
+ return testActionSnapshotWithFixtures(fixtures);
62
+ });
@@ -0,0 +1,33 @@
1
+ import { testReducerSnapshotWithFixtures } from 'react-redux-test-utils';
2
+ import reducer from '../InsightsSettingsReducer';
3
+ import {
4
+ INSIGHTS_SYNC_SETTING_SET,
5
+ INSIGHTS_SYNC_SETTINGS_GET_SUCCESS,
6
+ } from '../InsightsSettingsConstants';
7
+
8
+ const fixtures = {
9
+ 'should return the initial state': {},
10
+ 'should handle INSIGHTS_SYNC_SETTINGS_GET_SUCCESS': {
11
+ action: {
12
+ type: INSIGHTS_SYNC_SETTINGS_GET_SUCCESS,
13
+ payload: {
14
+ settings: {
15
+ insightsSyncEnabled: true,
16
+ },
17
+ },
18
+ },
19
+ },
20
+ 'should handle INSIGHTS_SYNC_SETTING_SET': {
21
+ action: {
22
+ type: INSIGHTS_SYNC_SETTING_SET,
23
+ payload: {
24
+ settings: {
25
+ insightsSyncEnabled: true,
26
+ },
27
+ },
28
+ },
29
+ },
30
+ };
31
+
32
+ describe('InsightsSettings reducer', () =>
33
+ testReducerSnapshotWithFixtures(reducer, fixtures));
@@ -0,0 +1,21 @@
1
+ import { testSelectorsSnapshotWithFixtures } from 'react-redux-test-utils';
2
+ import {
3
+ selectSettings,
4
+ selectInsightsSyncEnabled,
5
+ } from '../InsightsSettingsSelectors';
6
+ import { insightsStateWrapper } from '../../../../ForemanRhCloudTestHelpers';
7
+
8
+ const state = insightsStateWrapper({
9
+ settings: {
10
+ insightsSyncEnabled: true,
11
+ },
12
+ });
13
+
14
+ const fixtures = {
15
+ 'should return insights sync settings': () => selectSettings(state),
16
+ 'should return insightsSyncEnabled setting': () =>
17
+ selectInsightsSyncEnabled(state),
18
+ };
19
+
20
+ describe('InsightsSettings selectors', () =>
21
+ testSelectorsSnapshotWithFixtures(fixtures));
@@ -0,0 +1,15 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`InsightsSettings rendering render without Props 1`] = `
4
+ <div
5
+ className="insights_settings"
6
+ >
7
+ <h3>
8
+ Settings
9
+ </h3>
10
+ <InsightsSyncSwitcher
11
+ insightsSyncEnabled={false}
12
+ setInsightsSyncEnabled={[Function]}
13
+ />
14
+ </div>
15
+ `;
@@ -0,0 +1,65 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`InsightsSettings actions should generate INSIGHTS_SYNC_SETTING_SET action 1`] = `
4
+ Array [
5
+ Array [
6
+ Object {
7
+ "payload": Object {
8
+ "settings": Object {
9
+ "insightsSyncEnabled": true,
10
+ },
11
+ },
12
+ "type": "INSIGHTS_SYNC_SETTING_SET",
13
+ },
14
+ ],
15
+ ]
16
+ `;
17
+
18
+ exports[`InsightsSettings actions should generate INSIGHTS_SYNC_SETTINGS_GET_SUCCESS action 1`] = `
19
+ Array [
20
+ Array [
21
+ Object {
22
+ "payload": Object {
23
+ "settings": Object {
24
+ "insightsSyncEnabled": true,
25
+ },
26
+ },
27
+ "type": "INSIGHTS_SYNC_SETTINGS_GET_SUCCESS",
28
+ },
29
+ ],
30
+ ]
31
+ `;
32
+
33
+ exports[`InsightsSettings actions should handle getInsightsSyncSettings with error 1`] = `
34
+ Array [
35
+ Array [
36
+ Object {
37
+ "payload": Object {
38
+ "message": Object {
39
+ "message": "Network error!",
40
+ "sticky": true,
41
+ "type": "error",
42
+ },
43
+ },
44
+ "type": "TOASTS_ADD",
45
+ },
46
+ ],
47
+ ]
48
+ `;
49
+
50
+ exports[`InsightsSettings actions should handle setInsightsSyncEnabled with error 1`] = `
51
+ Array [
52
+ Array [
53
+ Object {
54
+ "payload": Object {
55
+ "message": Object {
56
+ "message": "Network error!",
57
+ "sticky": true,
58
+ "type": "error",
59
+ },
60
+ },
61
+ "type": "TOASTS_ADD",
62
+ },
63
+ ],
64
+ ]
65
+ `;