foreman_rh_cloud 3.0.18.1 → 3.0.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/foreman_inventory_upload/tasks_controller.rb +14 -3
  3. data/app/controllers/foreman_inventory_upload/uploads_settings_controller.rb +8 -0
  4. data/app/models/insights_resolution.rb +1 -1
  5. data/config/routes.rb +1 -1
  6. data/lib/foreman_inventory_upload.rb +5 -0
  7. data/lib/foreman_inventory_upload/generators/queries.rb +1 -1
  8. data/lib/foreman_inventory_upload/scripts/uploader.sh.erb +5 -1
  9. data/lib/foreman_rh_cloud/version.rb +1 -1
  10. data/lib/insights_cloud/async/insights_full_sync.rb +17 -21
  11. data/lib/inventory_sync/async/host_result.rb +11 -6
  12. data/lib/inventory_sync/async/inventory_full_sync.rb +24 -41
  13. data/lib/inventory_sync/async/inventory_hosts_sync.rb +34 -0
  14. data/lib/inventory_sync/async/query_inventory_job.rb +54 -0
  15. data/lib/tasks/insights.rake +1 -1
  16. data/package.json +1 -1
  17. data/test/jobs/insights_full_sync_test.rb +14 -10
  18. data/test/jobs/inventory_full_sync_test.rb +181 -11
  19. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilter.js +1 -1
  20. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/integration.test.js.snap +0 -1
  21. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js +81 -46
  22. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonConstants.js +3 -3
  23. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonSelectors.js +6 -12
  24. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonFixtures.js +1 -9
  25. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonSelectors.test.js +18 -27
  26. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonSelectors.test.js.snap +1 -16
  27. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/integrations.test.js.snap +58 -0
  28. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/integrations.test.js +51 -0
  29. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/index.js +2 -5
  30. data/webpack/ForemanInventoryUpload/ForemanInventoryUploadReducers.js +0 -2
  31. data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/__snapshots__/InsightsTable.test.js.snap +2 -0
  32. data/webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware.js +4 -0
  33. metadata +25 -25
  34. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonReducer.js +0 -36
  35. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonActions.test.js +0 -31
  36. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonReducer.test.js +0 -26
  37. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonActions.test.js.snap +0 -98
  38. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonReducer.test.js.snap +0 -18
@@ -1,18 +1,3 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`SyncButton selectors should return InventorySync 1`] = `
4
- Object {
5
- "disconnectHosts": 0,
6
- "error": "some-error",
7
- "status": "RESOLVED",
8
- "syncHosts": 1,
9
- }
10
- `;
11
-
12
- exports[`SyncButton selectors should return InventorySync SyncHosts 1`] = `1`;
13
-
14
- exports[`SyncButton selectors should return InventorySync disconnectHosts 1`] = `0`;
15
-
16
- exports[`SyncButton selectors should return InventorySync error 1`] = `"some-error"`;
17
-
18
- exports[`SyncButton selectors should return InventorySync status 1`] = `"RESOLVED"`;
3
+ exports[`SyncButton selectors should return InventorySync status 1`] = `"PENDING"`;
@@ -0,0 +1,58 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`SyncButton integration test Successful task was triggered on the server resulting in an info toast and polling on the task: handleSync was called 1`] = `
4
+ Array [
5
+ Array [
6
+ Object {
7
+ "payload": Object {
8
+ "message": Object {
9
+ "message": <Toast
10
+ disconnectHosts={2}
11
+ syncHosts={0}
12
+ />,
13
+ "sticky": true,
14
+ "type": "success",
15
+ },
16
+ },
17
+ "type": "TOASTS_ADD",
18
+ },
19
+ ],
20
+ Array [
21
+ Object {
22
+ "errorToast": [Function],
23
+ "interval": 3000,
24
+ "type": "API_GET",
25
+ "url": "/foreman_inventory_upload/tasks/1",
26
+ },
27
+ ],
28
+ Array [
29
+ Object {
30
+ "payload": Object {
31
+ "message": Object {
32
+ "message": <span>
33
+ Inventory sync has started:
34
+
35
+ <a
36
+ href="/foreman_tasks/tasks/1"
37
+ rel="noopener noreferrer"
38
+ target="_blank"
39
+ >
40
+ view the task page for more details
41
+ </a>
42
+ </span>,
43
+ "sticky": false,
44
+ "type": "info",
45
+ },
46
+ },
47
+ "type": "TOASTS_ADD",
48
+ },
49
+ ],
50
+ Array [
51
+ Object {
52
+ "errorToast": [Function],
53
+ "type": "API_POST",
54
+ "url": "/foreman_inventory_upload/tasks",
55
+ },
56
+ ],
57
+ ]
58
+ `;
@@ -0,0 +1,51 @@
1
+ import React from 'react';
2
+ import { IntegrationTestHelper } from '@theforeman/test';
3
+ import * as API from 'foremanReact/redux/API';
4
+ import { noop } from 'foremanReact/common/helpers';
5
+ import SyncButton from '../index';
6
+ import { successResponse } from './SyncButtonFixtures';
7
+ import {
8
+ INVENTORY_SYNC,
9
+ INVENTORY_SYNC_TASK_UPDATE,
10
+ } from '../SyncButtonConstants';
11
+
12
+ jest.spyOn(API, 'post');
13
+ jest.spyOn(API, 'get');
14
+
15
+ describe('SyncButton integration test', () => {
16
+ it('Successful task was triggered on the server resulting in an info toast and polling on the task', async () => {
17
+ API.post.mockImplementation(({ handleSuccess = noop, key, ...action }) => {
18
+ if (key === INVENTORY_SYNC) {
19
+ handleSuccess(successResponse);
20
+ }
21
+ return { type: 'API_POST', ...action };
22
+ });
23
+ API.get.mockImplementation(({ handleSuccess = noop, key, ...action }) => {
24
+ if (key === INVENTORY_SYNC_TASK_UPDATE) {
25
+ handleSuccess(
26
+ {
27
+ data: {
28
+ endedAt: '2021-03-22T15:59:02.468+02:00',
29
+ output: {
30
+ host_statuses: {
31
+ sync: 0,
32
+ disconnect: 2,
33
+ },
34
+ },
35
+ result: 'success',
36
+ },
37
+ },
38
+ jest.fn
39
+ );
40
+ }
41
+ return { type: 'API_GET', ...action };
42
+ });
43
+
44
+ const integrationTestHelper = new IntegrationTestHelper();
45
+ const wrapper = integrationTestHelper.mount(<SyncButton />);
46
+ const instance = wrapper.find('SyncButton').instance();
47
+ instance.props.handleSync();
48
+ await IntegrationTestHelper.flushAllPromises();
49
+ integrationTestHelper.takeActionsSnapshot('handleSync was called');
50
+ });
51
+ });
@@ -2,21 +2,18 @@ import { bindActionCreators } from 'redux';
2
2
  import { connect } from 'react-redux';
3
3
 
4
4
  import * as actions from './SyncButtonActions';
5
- import reducer from './SyncButtonReducer';
6
5
  import SyncButton from './SyncButton';
7
6
  import { selectCloudToken } from '../../../InventorySettings/InventorySettingsSelectors';
8
- import { selectStatus } from './SyncButtonSelectors';
7
+ import { selectTaskStatus } from './SyncButtonSelectors';
9
8
 
10
9
  // map state to props
11
10
  const mapStateToProps = state => ({
12
11
  cloudToken: selectCloudToken(state),
13
- status: selectStatus(state),
12
+ status: selectTaskStatus(state),
14
13
  });
15
14
 
16
15
  // map action dispatchers to props
17
16
  const mapDispatchToProps = dispatch => bindActionCreators(actions, dispatch);
18
17
 
19
- export const reducers = { inventorySync: reducer };
20
-
21
18
  // export connected component
22
19
  export default connect(mapStateToProps, mapDispatchToProps)(SyncButton);
@@ -2,13 +2,11 @@ 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';
6
5
 
7
6
  export default {
8
7
  inventoryUpload: combineReducers({
9
8
  ...accountListReducers,
10
9
  ...dashboardReducers,
11
10
  ...filterReducers,
12
- ...inventorySyncReducers,
13
11
  }),
14
12
  };
@@ -61,6 +61,7 @@ exports[`InsightsTable rendering render with Props 1`] = `
61
61
  expandId="expandable-toggle"
62
62
  gridBreakPoint="grid-md"
63
63
  isStickyHeader={false}
64
+ isTreeTable={false}
64
65
  onSelect={[Function]}
65
66
  onSort={[Function]}
66
67
  ouiaSafe={true}
@@ -137,6 +138,7 @@ exports[`InsightsTable rendering render with Props 1`] = `
137
138
  "currPage": "Current page",
138
139
  "items": "",
139
140
  "itemsPerPage": "Items per page",
141
+ "ofWord": "of",
140
142
  "optionsToggle": "Items per page",
141
143
  "page": "",
142
144
  "paginationTitle": "Pagination",
@@ -0,0 +1,4 @@
1
+ export const withInterval = (action, interval = 3000) => ({
2
+ ...action,
3
+ interval,
4
+ });
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_rh_cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.18.1
4
+ version: 3.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Foreman Red Hat Cloud team
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-17 00:00:00.000000000 Z
11
+ date: 2021-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: katello
@@ -213,6 +213,8 @@ files:
213
213
  - lib/insights_cloud/async/rules_result.rb
214
214
  - lib/inventory_sync/async/host_result.rb
215
215
  - lib/inventory_sync/async/inventory_full_sync.rb
216
+ - lib/inventory_sync/async/inventory_hosts_sync.rb
217
+ - lib/inventory_sync/async/query_inventory_job.rb
216
218
  - lib/tasks/foreman_rh_cloud_tasks.rake
217
219
  - lib/tasks/insights.rake
218
220
  - lib/tasks/rh_cloud_inventory.rake
@@ -397,17 +399,14 @@ files:
397
399
  - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButton.js
398
400
  - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js
399
401
  - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonConstants.js
400
- - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonReducer.js
401
402
  - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonSelectors.js
402
403
  - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButton.test.js
403
- - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonActions.test.js
404
404
  - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonFixtures.js
405
- - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonReducer.test.js
406
405
  - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonSelectors.test.js
407
406
  - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButton.test.js.snap
408
- - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonActions.test.js.snap
409
- - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonReducer.test.js.snap
410
407
  - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonSelectors.test.js.snap
408
+ - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/integrations.test.js.snap
409
+ - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/integrations.test.js
411
410
  - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Modal.js
412
411
  - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Toast.js
413
412
  - webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/modal.scss
@@ -588,6 +587,7 @@ files:
588
587
  - webpack/__mocks__/foremanReact/redux/API/APISelectors.js
589
588
  - webpack/__mocks__/foremanReact/redux/API/index.js
590
589
  - webpack/__mocks__/foremanReact/redux/actions/toasts.js
590
+ - webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware.js
591
591
  - webpack/__mocks__/foremanReact/routes/RouterSelector.js
592
592
  - webpack/__mocks__/foremanReact/routes/common/PageLayout/PageLayout.js
593
593
  - webpack/__tests__/ForemanRhCloudHelpers.test.js
@@ -610,7 +610,7 @@ homepage: https://github.com/theforeman/foreman_rh_cloud
610
610
  licenses:
611
611
  - GPL-3.0
612
612
  metadata: {}
613
- post_install_message:
613
+ post_install_message:
614
614
  rdoc_options: []
615
615
  require_paths:
616
616
  - lib
@@ -625,31 +625,31 @@ required_rubygems_version: !ruby/object:Gem::Requirement
625
625
  - !ruby/object:Gem::Version
626
626
  version: '0'
627
627
  requirements: []
628
- rubygems_version: 3.0.6
629
- signing_key:
628
+ rubygems_version: 3.1.4
629
+ signing_key:
630
630
  specification_version: 4
631
631
  summary: Summary of ForemanRhCloud.
632
632
  test_files:
633
- - test/controllers/uploads_controller_test.rb
634
- - test/controllers/insights_sync/settings_controller_test.rb
635
633
  - test/controllers/accounts_controller_test.rb
636
- - test/controllers/uploads_settings_controller_test.rb
637
634
  - test/controllers/insights_cloud/api/machine_telemetries_controller_test.rb
635
+ - test/controllers/insights_sync/settings_controller_test.rb
638
636
  - test/controllers/reports_controller_test.rb
639
- - test/test_plugin_helper.rb
640
- - test/jobs/upload_report_job_test.rb
637
+ - test/controllers/uploads_controller_test.rb
638
+ - test/controllers/uploads_settings_controller_test.rb
639
+ - test/factories/insights_factories.rb
640
+ - test/factories/inventory_upload_factories.rb
641
641
  - test/jobs/insights_full_sync_test.rb
642
642
  - test/jobs/insights_rules_sync_test.rb
643
643
  - test/jobs/inventory_full_sync_test.rb
644
- - test/factories/inventory_upload_factories.rb
645
- - test/factories/insights_factories.rb
646
- - test/unit/tags_generator_test.rb
647
- - test/unit/shell_process_job_test.rb
648
- - test/unit/metadata_generator_test.rb
644
+ - test/jobs/upload_report_job_test.rb
645
+ - test/test_plugin_helper.rb
646
+ - test/unit/archived_report_generator_test.rb
647
+ - test/unit/fact_helpers_test.rb
649
648
  - test/unit/insights_facet_test.rb
650
- - test/unit/services/foreman_rh_cloud/cloud_request_forwarder_test.rb
651
- - test/unit/services/foreman_rh_cloud/branch_info_test.rb
649
+ - test/unit/metadata_generator_test.rb
652
650
  - test/unit/rh_cloud_http_proxy_test.rb
653
- - test/unit/fact_helpers_test.rb
654
- - test/unit/archived_report_generator_test.rb
651
+ - test/unit/services/foreman_rh_cloud/branch_info_test.rb
652
+ - test/unit/services/foreman_rh_cloud/cloud_request_forwarder_test.rb
653
+ - test/unit/shell_process_job_test.rb
655
654
  - test/unit/slice_generator_test.rb
655
+ - test/unit/tags_generator_test.rb
@@ -1,36 +0,0 @@
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
- };
@@ -1,31 +0,0 @@
1
- import { testActionSnapshotWithFixtures } from '@theforeman/test';
2
- import { API } from 'foremanReact/redux/API';
3
- import { handleSync } from '../SyncButtonActions';
4
- import { successResponse } from './SyncButtonFixtures';
5
-
6
- jest.mock('foremanReact/redux/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));
@@ -1,26 +0,0 @@
1
- import { testReducerSnapshotWithFixtures } from '@theforeman/test';
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));
@@ -1,98 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`SyncButton actions should handleSync 1`] = `
4
- Array [
5
- Array [
6
- Object {
7
- "payload": Object {},
8
- "type": "INVENTORY_SYNC_REQUEST",
9
- },
10
- ],
11
- Array [
12
- Object {
13
- "payload": Object {
14
- "disconnectHosts": 0,
15
- "syncHosts": 1,
16
- },
17
- "type": "INVENTORY_SYNC_SUCCESS",
18
- },
19
- ],
20
- Array [
21
- Object {
22
- "payload": Object {
23
- "message": Object {
24
- "message": <Toast
25
- disconnectHosts={0}
26
- syncHosts={1}
27
- />,
28
- "sticky": true,
29
- "type": "success",
30
- },
31
- },
32
- "type": "TOASTS_ADD",
33
- },
34
- ],
35
- ]
36
- `;
37
-
38
- exports[`SyncButton actions should handleSync with custom error message 1`] = `
39
- Array [
40
- Array [
41
- Object {
42
- "payload": Object {},
43
- "type": "INVENTORY_SYNC_REQUEST",
44
- },
45
- ],
46
- Array [
47
- Object {
48
- "payload": Object {
49
- "error": "Server error!",
50
- },
51
- "type": "INVENTORY_SYNC_ERROR",
52
- },
53
- ],
54
- Array [
55
- Object {
56
- "payload": Object {
57
- "message": Object {
58
- "message": "Custom error to display in a toast",
59
- "sticky": true,
60
- "type": "error",
61
- },
62
- },
63
- "type": "TOASTS_ADD",
64
- },
65
- ],
66
- ]
67
- `;
68
-
69
- exports[`SyncButton actions should handleSync with error message 1`] = `
70
- Array [
71
- Array [
72
- Object {
73
- "payload": Object {},
74
- "type": "INVENTORY_SYNC_REQUEST",
75
- },
76
- ],
77
- Array [
78
- Object {
79
- "payload": Object {
80
- "error": "Network error!",
81
- },
82
- "type": "INVENTORY_SYNC_ERROR",
83
- },
84
- ],
85
- Array [
86
- Object {
87
- "payload": Object {
88
- "message": Object {
89
- "message": "Network error!",
90
- "sticky": true,
91
- "type": "error",
92
- },
93
- },
94
- "type": "TOASTS_ADD",
95
- },
96
- ],
97
- ]
98
- `;