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
@@ -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
+ `;
@@ -0,0 +1,19 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`InsightsSettings reducer should handle INSIGHTS_SYNC_SETTING_SET 1`] = `
4
+ Object {
5
+ "insightsSyncEnabled": true,
6
+ }
7
+ `;
8
+
9
+ exports[`InsightsSettings reducer should handle INSIGHTS_SYNC_SETTINGS_GET_SUCCESS 1`] = `
10
+ Object {
11
+ "insightsSyncEnabled": true,
12
+ }
13
+ `;
14
+
15
+ exports[`InsightsSettings reducer should return the initial state 1`] = `
16
+ Object {
17
+ "insightsSyncEnabled": false,
18
+ }
19
+ `;
@@ -0,0 +1,9 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`InsightsSettings selectors should return insights sync settings 1`] = `
4
+ Object {
5
+ "insightsSyncEnabled": true,
6
+ }
7
+ `;
8
+
9
+ exports[`InsightsSettings selectors should return insightsSyncEnabled setting 1`] = `true`;
@@ -0,0 +1,21 @@
1
+ import { bindActionCreators } from 'redux';
2
+ import { connect } from 'react-redux';
3
+
4
+ import InsightsSettings from './InsightsSettings';
5
+ import { selectInsightsSyncEnabled } from './InsightsSettingsSelectors';
6
+ import * as actions from './InsightsSettingsActions';
7
+ import reducer from './InsightsSettingsReducer';
8
+
9
+ // map state to props
10
+ const mapStateToProps = state => ({
11
+ insightsSyncEnabled: selectInsightsSyncEnabled(state),
12
+ });
13
+
14
+ // map action dispatchers to props
15
+ const mapDispatchToProps = dispatch => bindActionCreators(actions, dispatch);
16
+
17
+ // export connected component
18
+ export default connect(mapStateToProps, mapDispatchToProps)(InsightsSettings);
19
+
20
+ // export reducers
21
+ export const reducers = { settings: reducer };
@@ -0,0 +1,16 @@
1
+ .insights_settings {
2
+ border: 1px solid #ededed;
3
+ border-radius: 4px;
4
+ padding: 10px;
5
+ margin-bottom: 15px;
6
+ float: right;
7
+
8
+ h3 {
9
+ margin-top: 0;
10
+ font-weight: 600;
11
+ }
12
+
13
+ .bootstrap-switch {
14
+ float: right;
15
+ }
16
+ }
@@ -0,0 +1 @@
1
+ export const handleToggleResponse = { data: { insightsSyncEnabled: true } };
@@ -0,0 +1,45 @@
1
+ import React, { Component } 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 './insightsSyncSwitcher.scss';
6
+
7
+ class InsightsSyncSwitcher extends Component {
8
+ handleToggle = () => {
9
+ const { insightsSyncEnabled, setInsightsSyncEnabled } = this.props;
10
+
11
+ const toggledInsightsSyncEnabled = !insightsSyncEnabled;
12
+ setInsightsSyncEnabled(toggledInsightsSyncEnabled);
13
+ };
14
+
15
+ render() {
16
+ const { insightsSyncEnabled } = this.props;
17
+
18
+ return (
19
+ <div className="insights_sync_switcher">
20
+ <span>Synchronize Automatically</span>
21
+ <FieldLevelHelp
22
+ content={__(
23
+ 'Enable automatic synchronization of Insights recommendations from the Red Hat cloud'
24
+ )}
25
+ />
26
+ <Switch
27
+ size="mini"
28
+ value={insightsSyncEnabled}
29
+ onChange={this.handleToggle}
30
+ />
31
+ </div>
32
+ );
33
+ }
34
+ }
35
+
36
+ InsightsSyncSwitcher.propTypes = {
37
+ insightsSyncEnabled: PropTypes.bool,
38
+ setInsightsSyncEnabled: PropTypes.func.isRequired,
39
+ };
40
+
41
+ InsightsSyncSwitcher.defaultProps = {
42
+ insightsSyncEnabled: true,
43
+ };
44
+
45
+ export default InsightsSyncSwitcher;
@@ -0,0 +1,17 @@
1
+ import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
2
+ import { noop } from 'patternfly-react';
3
+
4
+ import InsightsSyncSwitcher from '../InsightsSyncSwitcher';
5
+
6
+ const fixtures = {
7
+ 'render with props': {
8
+ insightsSyncEnabled: true,
9
+ setInsightsSyncEnabled: noop,
10
+ },
11
+ /** fixtures, props for the component */
12
+ };
13
+
14
+ describe('InsightsSyncSwitcher', () => {
15
+ describe('rendering', () =>
16
+ testComponentSnapshotsWithFixtures(InsightsSyncSwitcher, fixtures));
17
+ });
@@ -0,0 +1,38 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`InsightsSyncSwitcher rendering render with props 1`] = `
4
+ <div
5
+ className="insights_sync_switcher"
6
+ >
7
+ <span>
8
+ Synchronize Automatically
9
+ </span>
10
+ <FieldLevelHelp
11
+ buttonClass=""
12
+ content="Enable automatic synchronization of Insights recommendations from 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 @@
1
+ export { default } from './InsightsSyncSwitcher';
@@ -0,0 +1,3 @@
1
+ .insights_sync_switcher {
2
+ margin-bottom: 5px;
3
+ }