foreman_openscap 5.0.0 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/app/graphql/mutations/oval_contents/delete.rb +9 -0
  3. data/app/graphql/mutations/oval_policies/delete.rb +9 -0
  4. data/app/graphql/mutations/oval_policies/update.rb +15 -0
  5. data/app/graphql/types/oval_check.rb +11 -0
  6. data/app/graphql/types/oval_content.rb +2 -0
  7. data/app/graphql/types/oval_policy.rb +3 -0
  8. data/app/models/concerns/foreman_openscap/host_extensions.rb +0 -6
  9. data/app/models/concerns/foreman_openscap/oval_facet_hostgroup_extensions.rb +15 -0
  10. data/app/models/foreman_openscap/oval_content.rb +2 -0
  11. data/app/services/foreman_openscap/oval/configure.rb +1 -1
  12. data/app/services/foreman_openscap/oval/setup.rb +5 -5
  13. data/app/services/foreman_openscap/oval/setup_check.rb +5 -2
  14. data/db/migrate/20210819143316_drop_unused_tables.rb +6 -0
  15. data/lib/foreman_openscap/engine.rb +6 -1
  16. data/lib/foreman_openscap/version.rb +1 -1
  17. data/package.json +3 -6
  18. data/test/graphql/mutations/oval_policies/delete_mutation_test.rb +63 -0
  19. data/test/graphql/queries/oval_content_query_test.rb +29 -0
  20. data/test/unit/services/hostgroup_overrider_test.rb +1 -1
  21. data/test/unit/services/oval/setup_check_test.rb +37 -0
  22. data/webpack/components/ConfirmModal.js +63 -0
  23. data/webpack/components/ConfirmModal.scss +3 -0
  24. data/webpack/components/EditableInput.js +157 -0
  25. data/webpack/components/EditableInput.scss +3 -0
  26. data/webpack/components/EmptyState.js +4 -1
  27. data/webpack/components/IndexLayout.js +11 -4
  28. data/webpack/components/IndexTable/index.js +17 -17
  29. data/webpack/components/LinkButton.js +26 -0
  30. data/webpack/components/withDeleteModal.js +51 -0
  31. data/webpack/components/withLoading.js +21 -3
  32. data/webpack/graphql/mutations/deleteOvalContent.gql +9 -0
  33. data/webpack/graphql/mutations/deleteOvalPolicy.gql +9 -0
  34. data/webpack/graphql/mutations/updateOvalPolicy.gql +14 -0
  35. data/webpack/graphql/queries/hostgroups.gql +14 -0
  36. data/webpack/graphql/queries/ovalContent.gql +8 -0
  37. data/webpack/graphql/queries/ovalContents.gql +3 -0
  38. data/webpack/graphql/queries/ovalPolicies.gql +3 -0
  39. data/webpack/helpers/formFieldsHelper.js +63 -0
  40. data/webpack/helpers/mutationHelper.js +68 -0
  41. data/webpack/helpers/pathsHelper.js +5 -0
  42. data/webpack/helpers/toastHelper.js +3 -0
  43. data/webpack/routes/OvalContents/OvalContentsIndex/OvalContentsIndex.js +25 -0
  44. data/webpack/routes/OvalContents/OvalContentsIndex/OvalContentsTable.js +41 -4
  45. data/webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsDestroy.fixtures.js +105 -0
  46. data/webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsDestroy.test.js +124 -0
  47. data/webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsIndex.fixtures.js +61 -59
  48. data/webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsIndex.test.js +29 -8
  49. data/webpack/routes/OvalContents/OvalContentsIndex/index.js +7 -1
  50. data/webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.js +138 -0
  51. data/webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.scss +3 -0
  52. data/webpack/routes/OvalContents/OvalContentsNew/OvalContentsNewHelper.js +73 -0
  53. data/webpack/routes/OvalContents/OvalContentsNew/__tests__/OvalContentsNew.test.js +104 -0
  54. data/webpack/routes/OvalContents/OvalContentsNew/index.js +13 -0
  55. data/webpack/routes/OvalContents/OvalContentsShow/OvalContentsShow.js +62 -0
  56. data/webpack/routes/OvalContents/OvalContentsShow/OvalContentsShow.test.js +45 -0
  57. data/webpack/routes/OvalContents/OvalContentsShow/OvalContentsShowHelper.js +0 -0
  58. data/webpack/routes/OvalContents/OvalContentsShow/index.js +35 -0
  59. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesIndex.js +17 -2
  60. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesTable.js +16 -3
  61. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesDestroy.fixtures.js +101 -0
  62. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesDestroy.test.js +117 -0
  63. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesIndex.fixtures.js +57 -41
  64. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesIndex.test.js +14 -2
  65. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/index.js +7 -1
  66. data/webpack/routes/OvalPolicies/OvalPoliciesShow/DetailsTab.js +85 -0
  67. data/webpack/routes/OvalPolicies/OvalPoliciesShow/HostgroupsTab.js +49 -0
  68. data/webpack/routes/OvalPolicies/OvalPoliciesShow/HostgroupsTable.js +38 -0
  69. data/webpack/routes/OvalPolicies/OvalPoliciesShow/OvalPoliciesShow.js +15 -11
  70. data/webpack/routes/OvalPolicies/OvalPoliciesShow/OvalPoliciesShowHelper.js +77 -0
  71. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesEdit.fixtures.js +48 -0
  72. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesEdit.test.js +175 -0
  73. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesShow.fixtures.js +28 -1
  74. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesShow.test.js +47 -4
  75. data/webpack/routes/OvalPolicies/OvalPoliciesShow/index.js +3 -0
  76. data/webpack/routes/routes.js +14 -0
  77. data/webpack/testHelper.js +9 -1
  78. metadata +46 -3
@@ -0,0 +1,175 @@
1
+ import React from 'react';
2
+
3
+ import { render, screen, waitFor } from '@testing-library/react';
4
+ import '@testing-library/jest-dom';
5
+ import userEvent from '@testing-library/user-event';
6
+
7
+ import OvalPoliciesShow from '../';
8
+ import {
9
+ historyMock,
10
+ ovalPolicyId,
11
+ policyDetailMock,
12
+ ovalPolicy,
13
+ } from './OvalPoliciesShow.fixtures';
14
+ import {
15
+ policyUpdateMock,
16
+ policyUpdateErrorMock,
17
+ policyUpdateValidationMock,
18
+ updatedName,
19
+ } from './OvalPoliciesEdit.fixtures';
20
+ import { ovalPoliciesShowPath } from '../../../../helpers/pathsHelper';
21
+
22
+ import {
23
+ withMockedProvider,
24
+ tick,
25
+ withRouter,
26
+ withRedux,
27
+ } from '../../../../testHelper';
28
+
29
+ import * as toasts from '../../../../helpers/toastHelper';
30
+
31
+ const TestComponent = withRouter(
32
+ withRedux(withMockedProvider(OvalPoliciesShow))
33
+ );
34
+
35
+ describe('OvalPoliciesShow', () => {
36
+ it('should open and close inline edit for name', async () => {
37
+ render(
38
+ <TestComponent
39
+ history={historyMock}
40
+ match={{
41
+ params: { id: ovalPolicyId, tab: 'details' },
42
+ path: ovalPoliciesShowPath,
43
+ }}
44
+ mocks={policyDetailMock}
45
+ />
46
+ );
47
+ await waitFor(tick);
48
+ userEvent.click(screen.getByRole('button', { name: 'edit name' }));
49
+ userEvent.clear(screen.getByLabelText(/name text input/));
50
+ userEvent.type(screen.getByLabelText(/name text input/), 'foo');
51
+ expect(screen.getByLabelText(/name text input/)).toHaveAttribute(
52
+ 'value',
53
+ 'foo'
54
+ );
55
+ userEvent.click(
56
+ screen.getByRole('button', { name: 'cancel editing name' })
57
+ );
58
+ expect(screen.queryByText('foo')).not.toBeInTheDocument();
59
+ });
60
+ it('should update policy name', async () => {
61
+ const showToast = jest.fn();
62
+ jest.spyOn(toasts, 'showToast').mockImplementation(() => showToast);
63
+
64
+ const { container } = render(
65
+ <TestComponent
66
+ history={historyMock}
67
+ match={{
68
+ params: { id: ovalPolicyId, tab: 'details' },
69
+ path: ovalPoliciesShowPath,
70
+ }}
71
+ mocks={policyDetailMock.concat(policyUpdateMock)}
72
+ />
73
+ );
74
+ await waitFor(tick);
75
+ const editBtn = screen.getByRole('button', { name: 'edit name' });
76
+ expect(editBtn).toBeInTheDocument();
77
+ expect(
78
+ screen.queryByRole('button', { name: 'submit name' })
79
+ ).not.toBeInTheDocument();
80
+
81
+ userEvent.click(editBtn);
82
+ expect(
83
+ screen.queryByRole('button', { name: 'edit name' })
84
+ ).not.toBeInTheDocument();
85
+ const inputField = screen.getByLabelText(/name text input/);
86
+ const submitBtn = screen.getByRole('button', { name: 'submit name' });
87
+ const cancelBtn = screen.getByRole('button', {
88
+ name: 'cancel editing name',
89
+ });
90
+
91
+ userEvent.clear(inputField);
92
+ userEvent.type(inputField, updatedName);
93
+ userEvent.click(submitBtn);
94
+ expect(inputField).toBeDisabled();
95
+ expect(submitBtn).toBeDisabled();
96
+ expect(cancelBtn).toBeDisabled();
97
+ const spinner = container.querySelector('#edit-name-spinner');
98
+ expect(spinner).toBeInTheDocument();
99
+ await waitFor(tick);
100
+ expect(showToast).toHaveBeenCalledWith({
101
+ type: 'success',
102
+ message: 'OVAL policy was successfully updated.',
103
+ });
104
+
105
+ expect(inputField).not.toBeInTheDocument();
106
+ expect(editBtn).toBeInTheDocument();
107
+ expect(cancelBtn).not.toBeInTheDocument();
108
+ expect(
109
+ screen.queryByRole('button', { name: 'submit name' })
110
+ ).not.toBeInTheDocument();
111
+ await waitFor(tick);
112
+ expect(screen.getAllByText(updatedName).pop()).toBeInTheDocument();
113
+ });
114
+ it('should show unexpected errors', async () => {
115
+ const showToast = jest.fn();
116
+ jest.spyOn(toasts, 'showToast').mockImplementation(() => showToast);
117
+
118
+ render(
119
+ <TestComponent
120
+ history={historyMock}
121
+ match={{
122
+ params: { id: ovalPolicyId, tab: 'details' },
123
+ path: ovalPoliciesShowPath,
124
+ }}
125
+ mocks={policyDetailMock.concat(policyUpdateErrorMock)}
126
+ />
127
+ );
128
+ await waitFor(tick);
129
+ const editBtn = screen.getByRole('button', { name: 'edit name' });
130
+ userEvent.click(editBtn);
131
+ const inputField = screen.getByLabelText(/name text input/);
132
+ userEvent.clear(inputField);
133
+ userEvent.type(inputField, updatedName);
134
+ userEvent.click(screen.getByRole('button', { name: 'submit name' }));
135
+ await waitFor(tick);
136
+ expect(showToast).toHaveBeenCalledWith({
137
+ type: 'error',
138
+ message:
139
+ 'There was a following error when updating OVAL policy: This is an unexpected failure.',
140
+ });
141
+ expect(inputField).toBeInTheDocument();
142
+ expect(inputField).not.toBeDisabled();
143
+ expect(screen.getByText(ovalPolicy.name)).toBeInTheDocument();
144
+ });
145
+ it('should show validation errors', async () => {
146
+ const showToast = jest.fn();
147
+ jest.spyOn(toasts, 'showToast').mockImplementation(() => showToast);
148
+
149
+ const { container } = render(
150
+ <TestComponent
151
+ history={historyMock}
152
+ match={{
153
+ params: { id: ovalPolicyId, tab: 'details' },
154
+ path: ovalPoliciesShowPath,
155
+ }}
156
+ mocks={policyDetailMock.concat(policyUpdateValidationMock)}
157
+ />
158
+ );
159
+ await waitFor(tick);
160
+ const editBtn = screen.getByRole('button', { name: 'edit name' });
161
+ userEvent.click(editBtn);
162
+ const inputField = screen.getByLabelText(/name text input/);
163
+ userEvent.clear(inputField);
164
+ userEvent.type(inputField, updatedName);
165
+ userEvent.click(screen.getByRole('button', { name: 'submit name' }));
166
+ await waitFor(tick);
167
+ expect(inputField).toBeInTheDocument();
168
+ expect(inputField).not.toBeDisabled();
169
+ expect(
170
+ container.querySelector('#edit-name-spinner')
171
+ ).not.toBeInTheDocument();
172
+ expect(screen.getByText(ovalPolicy.name)).toBeInTheDocument();
173
+ expect(screen.getByText('has already been taken')).toBeInTheDocument();
174
+ });
175
+ });
@@ -1,11 +1,14 @@
1
1
  import { mockFactory, admin, intruder } from '../../../../testHelper';
2
2
  import ovalPolicyQuery from '../../../../graphql/queries/ovalPolicy.gql';
3
3
  import cvesQuery from '../../../../graphql/queries/cves.gql';
4
+ import hostgroupsQuery from '../../../../graphql/queries/hostgroups.gql';
4
5
 
5
6
  const policyDetailMockFactory = mockFactory('ovalPolicy', ovalPolicyQuery);
6
7
  const cvesMockFactory = mockFactory('cves', cvesQuery);
8
+ const hostgroupsMockFactory = mockFactory('hostgroups', hostgroupsQuery);
7
9
 
8
- const ovalPolicy = {
10
+ export const ovalPolicy = {
11
+ __typename: 'ForemanOpenscap::OvalPolicy',
9
12
  id: 'MDE6Rm9yZW1hbk9wZW5zY2FwOjpPdmFsUG9saWN5LTM=',
10
13
  name: 'Third policy',
11
14
  period: 'weekly',
@@ -51,6 +54,20 @@ const cvesResult = {
51
54
  ],
52
55
  };
53
56
 
57
+ const hostgroupsResult = {
58
+ totalCount: 2,
59
+ nodes: [
60
+ {
61
+ id: 'MDE6SG9zdGdyb3VwLTQ=',
62
+ name: 'first hostgroup',
63
+ },
64
+ {
65
+ id: 'MDE6SG9zdGdyb3VwLTEy',
66
+ name: 'second hostgroup',
67
+ },
68
+ ],
69
+ };
70
+
54
71
  export const ovalPolicyId = 3;
55
72
 
56
73
  export const pushMock = jest.fn();
@@ -85,3 +102,13 @@ export const policyCvesMock = cvesMockFactory(
85
102
  cvesResult,
86
103
  { currentUser: admin }
87
104
  );
105
+ export const policyHostgroupsMock = hostgroupsMockFactory(
106
+ { search: `oval_policy_id = ${ovalPolicyId}`, first: 5, last: 5 },
107
+ hostgroupsResult,
108
+ { currentUser: admin }
109
+ );
110
+ export const policyHostgroupsDeniedMock = hostgroupsMockFactory(
111
+ { search: `oval_policy_id = ${ovalPolicyId}`, first: 5, last: 5 },
112
+ { totalCount: 0, nodes: [] },
113
+ { currentUser: intruder }
114
+ );
@@ -12,18 +12,27 @@ import {
12
12
  resolvePath,
13
13
  } from '../../../../helpers/pathsHelper';
14
14
 
15
- import { withMockedProvider, tick, withRouter } from '../../../../testHelper';
15
+ import {
16
+ withRedux,
17
+ withMockedProvider,
18
+ tick,
19
+ withRouter,
20
+ } from '../../../../testHelper';
16
21
  import {
17
22
  policyDetailMock,
18
23
  historyMock,
19
24
  historyWithSearch,
20
25
  pushMock,
21
26
  policyCvesMock,
27
+ policyHostgroupsMock,
28
+ policyHostgroupsDeniedMock,
22
29
  ovalPolicyId,
23
30
  policyUnauthorizedMock,
24
31
  } from './OvalPoliciesShow.fixtures';
25
32
 
26
- const TestComponent = withRouter(withMockedProvider(OvalPoliciesShow));
33
+ const TestComponent = withRedux(
34
+ withRouter(withMockedProvider(OvalPoliciesShow))
35
+ );
27
36
 
28
37
  describe('OvalPoliciesShow', () => {
29
38
  it('should load details by default and handle tab change', async () => {
@@ -37,7 +46,7 @@ describe('OvalPoliciesShow', () => {
37
46
  expect(screen.getByText('Loading')).toBeInTheDocument();
38
47
  await waitFor(tick);
39
48
  expect(screen.queryByText('Loading')).not.toBeInTheDocument();
40
- expect(screen.getByText('Third policy')).toBeInTheDocument();
49
+ expect(screen.getAllByText('Third policy').pop()).toBeInTheDocument();
41
50
  expect(screen.getByText('Weekly, on tuesday')).toBeInTheDocument();
42
51
  expect(screen.getByText('A very strict policy')).toBeInTheDocument();
43
52
  const activeTabHeader = container.querySelector(
@@ -105,7 +114,7 @@ describe('OvalPoliciesShow', () => {
105
114
  it('should have button for scanning all hostgroups', async () => {
106
115
  const btnText = 'Scan All Hostgroups';
107
116
 
108
- const WithProvider = withMockedProvider(OvalPoliciesShow);
117
+ const WithProvider = withRedux(withMockedProvider(OvalPoliciesShow));
109
118
  const history = createMemoryHistory();
110
119
  history.push = jest.fn();
111
120
 
@@ -126,4 +135,38 @@ describe('OvalPoliciesShow', () => {
126
135
  '/job_invocations/new?feature=foreman_openscap_run_oval_scans&host_ids=hostgroup_id+%5E+%284+10+12+11%29&inputs%5Boval_policies%5D=3'
127
136
  );
128
137
  });
138
+ it('should load hostgroups tab when specified in URL', async () => {
139
+ const mocks = policyDetailMock.concat(policyHostgroupsMock);
140
+ render(
141
+ <TestComponent
142
+ history={historyWithSearch}
143
+ match={{
144
+ params: { id: ovalPolicyId, tab: 'hostgroups' },
145
+ path: ovalPoliciesShowPath,
146
+ }}
147
+ mocks={mocks}
148
+ />
149
+ );
150
+ expect(screen.getByText('Loading')).toBeInTheDocument();
151
+ await waitFor(tick);
152
+ await waitFor(tick);
153
+ expect(screen.queryByText('Loading')).not.toBeInTheDocument();
154
+ expect(screen.getByText('first hostgroup')).toBeInTheDocument();
155
+ });
156
+ it('should not show hostgroups for a user without permissions', async () => {
157
+ const mocks = policyDetailMock.concat(policyHostgroupsDeniedMock);
158
+ render(
159
+ <TestComponent
160
+ history={historyWithSearch}
161
+ match={{
162
+ params: { id: ovalPolicyId, tab: 'hostgroups' },
163
+ path: ovalPoliciesShowPath,
164
+ }}
165
+ mocks={mocks}
166
+ />
167
+ );
168
+ await waitFor(tick);
169
+ await waitFor(tick);
170
+ expect(screen.getByText('Permission denied')).toBeInTheDocument();
171
+ });
129
172
  });
@@ -1,8 +1,10 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { useQuery } from '@apollo/client';
4
+ import { useDispatch } from 'react-redux';
4
5
 
5
6
  import { translate as __ } from 'foremanReact/common/I18n';
7
+ import { showToast } from '../../../helpers/toastHelper';
6
8
 
7
9
  import OvalPoliciesShow from './OvalPoliciesShow';
8
10
  import { encodeId } from '../../../helpers/globalIdHelper';
@@ -25,6 +27,7 @@ const WrappedOvalPoliciesShow = props => {
25
27
  resultPath="ovalPolicy"
26
28
  emptyStateTitle={__('No OVAL Policy found')}
27
29
  permissions={['view_oval_policies']}
30
+ showToast={showToast(useDispatch())}
28
31
  />
29
32
  );
30
33
  };
@@ -1,10 +1,14 @@
1
1
  import React from 'react';
2
2
  import OvalContentsIndex from './OvalContents/OvalContentsIndex';
3
+ import OvalContentsShow from './OvalContents/OvalContentsShow';
4
+ import OvalContentsNew from './OvalContents/OvalContentsNew';
3
5
  import OvalPoliciesIndex from './OvalPolicies/OvalPoliciesIndex';
4
6
  import OvalPoliciesShow from './OvalPolicies/OvalPoliciesShow';
5
7
 
6
8
  import {
7
9
  ovalContentsPath,
10
+ ovalContentsShowPath,
11
+ ovalContentsNewPath,
8
12
  ovalPoliciesPath,
9
13
  ovalPoliciesShowPath,
10
14
  } from '../helpers/pathsHelper';
@@ -15,6 +19,16 @@ export default [
15
19
  render: props => <OvalContentsIndex {...props} />,
16
20
  exact: true,
17
21
  },
22
+ {
23
+ path: ovalContentsNewPath,
24
+ render: props => <OvalContentsNew {...props} />,
25
+ exact: true,
26
+ },
27
+ {
28
+ path: ovalContentsShowPath,
29
+ render: props => <OvalContentsShow {...props} />,
30
+ exact: true,
31
+ },
18
32
  {
19
33
  path: ovalPoliciesPath,
20
34
  render: props => <OvalPoliciesIndex {...props} />,
@@ -1,8 +1,16 @@
1
1
  import React from 'react';
2
+ import { Provider } from 'react-redux';
3
+ import store from 'foremanReact/redux';
2
4
  import { MockedProvider } from '@apollo/react-testing';
3
5
  import { MemoryRouter } from 'react-router-dom';
4
6
  import { getForemanContext } from 'foremanReact/Root/Context/ForemanContext';
5
7
 
8
+ export const withRedux = Component => props => (
9
+ <Provider store={store}>
10
+ <Component {...props} />
11
+ </Provider>
12
+ );
13
+
6
14
  export const withRouter = Component => props => (
7
15
  <MemoryRouter>
8
16
  <Component {...props} />
@@ -71,7 +79,7 @@ export const intruder = userFactory('intruder', [
71
79
  export const mockFactory = (resultName, query) => (
72
80
  variables,
73
81
  modelResults,
74
- { errors = [], currentUser = null }
82
+ { errors = [], currentUser = null } = {}
75
83
  ) => {
76
84
  const mock = {
77
85
  request: {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_openscap
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - slukasik@redhat.com
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-27 00:00:00.000000000 Z
11
+ date: 2021-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -72,7 +72,11 @@ files:
72
72
  - app/controllers/policy_dashboard_controller.rb
73
73
  - app/controllers/scap_contents_controller.rb
74
74
  - app/controllers/tailoring_files_controller.rb
75
+ - app/graphql/mutations/oval_contents/delete.rb
76
+ - app/graphql/mutations/oval_policies/delete.rb
77
+ - app/graphql/mutations/oval_policies/update.rb
75
78
  - app/graphql/types/cve.rb
79
+ - app/graphql/types/oval_check.rb
76
80
  - app/graphql/types/oval_content.rb
77
81
  - app/graphql/types/oval_policy.rb
78
82
  - app/helpers/arf_report_dashboard_helper.rb
@@ -301,6 +305,7 @@ files:
301
305
  - db/migrate/20201217130800_add_has_errata_to_cve.rb
302
306
  - db/migrate/20201217161511_add_url_to_oval_content.rb
303
307
  - db/migrate/20210409095625_add_oval_policy_reference_to_cve.rb
308
+ - db/migrate/20210819143316_drop_unused_tables.rb
304
309
  - db/seeds.d/75-job_templates.rb
305
310
  - db/seeds.d/openscap_feature.rb
306
311
  - db/seeds.d/openscap_policy_notification.rb
@@ -387,6 +392,8 @@ files:
387
392
  - test/functional/arf_reports_controller_test.rb
388
393
  - test/functional/openscap_proxies_controller_test.rb
389
394
  - test/functional/tailoring_files_controller_test.rb
395
+ - test/graphql/mutations/oval_policies/delete_mutation_test.rb
396
+ - test/graphql/queries/oval_content_query_test.rb
390
397
  - test/graphql/queries/oval_contents_query_test.rb
391
398
  - test/graphql/queries/oval_policies_query_test.rb
392
399
  - test/helpers/arf_report_dashboard_helper_test.rb
@@ -410,15 +417,21 @@ files:
410
417
  - test/unit/services/hostgroup_overrider_test.rb
411
418
  - test/unit/services/lookup_key_overrider_test.rb
412
419
  - test/unit/services/oval/cves_test.rb
420
+ - test/unit/services/oval/setup_check_test.rb
413
421
  - test/unit/services/oval/setup_test.rb
414
422
  - test/unit/services/report_dashboard/data_test.rb
415
423
  - test/unit/services/tailoring_files_proxy_check_test.rb
416
424
  - test/unit/tailoring_file_test.rb
425
+ - webpack/components/ConfirmModal.js
426
+ - webpack/components/ConfirmModal.scss
427
+ - webpack/components/EditableInput.js
428
+ - webpack/components/EditableInput.scss
417
429
  - webpack/components/EmptyState.js
418
430
  - webpack/components/IndexLayout.js
419
431
  - webpack/components/IndexLayout.scss
420
432
  - webpack/components/IndexTable/IndexTableHelper.js
421
433
  - webpack/components/IndexTable/index.js
434
+ - webpack/components/LinkButton.js
422
435
  - webpack/components/RuleSeverity/RuleSeverity.scss
423
436
  - webpack/components/RuleSeverity/RuleSeverity.test.js
424
437
  - webpack/components/RuleSeverity/__snapshots__/RuleSeverity.test.js.snap
@@ -428,34 +441,61 @@ files:
428
441
  - webpack/components/RuleSeverity/i_severity-med.svg
429
442
  - webpack/components/RuleSeverity/i_unknown.svg
430
443
  - webpack/components/RuleSeverity/index.js
444
+ - webpack/components/withDeleteModal.js
431
445
  - webpack/components/withLoading.js
432
446
  - webpack/global_index.js
447
+ - webpack/graphql/mutations/deleteOvalContent.gql
448
+ - webpack/graphql/mutations/deleteOvalPolicy.gql
449
+ - webpack/graphql/mutations/updateOvalPolicy.gql
433
450
  - webpack/graphql/queries/currentUserAttributes.gql
434
451
  - webpack/graphql/queries/cves.gql
452
+ - webpack/graphql/queries/hostgroups.gql
453
+ - webpack/graphql/queries/ovalContent.gql
435
454
  - webpack/graphql/queries/ovalContents.gql
436
455
  - webpack/graphql/queries/ovalPolicies.gql
437
456
  - webpack/graphql/queries/ovalPolicy.gql
438
457
  - webpack/helpers/commonHelper.js
458
+ - webpack/helpers/formFieldsHelper.js
439
459
  - webpack/helpers/globalIdHelper.js
460
+ - webpack/helpers/mutationHelper.js
440
461
  - webpack/helpers/pageParamsHelper.js
441
462
  - webpack/helpers/pathsHelper.js
442
463
  - webpack/helpers/permissionsHelper.js
443
464
  - webpack/helpers/tableHelper.js
465
+ - webpack/helpers/toastHelper.js
444
466
  - webpack/index.js
445
467
  - webpack/routes/OvalContents/OvalContentsIndex/OvalContentsIndex.js
446
468
  - webpack/routes/OvalContents/OvalContentsIndex/OvalContentsTable.js
469
+ - webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsDestroy.fixtures.js
470
+ - webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsDestroy.test.js
447
471
  - webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsIndex.fixtures.js
448
472
  - webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsIndex.test.js
449
473
  - webpack/routes/OvalContents/OvalContentsIndex/index.js
474
+ - webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.js
475
+ - webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.scss
476
+ - webpack/routes/OvalContents/OvalContentsNew/OvalContentsNewHelper.js
477
+ - webpack/routes/OvalContents/OvalContentsNew/__tests__/OvalContentsNew.test.js
478
+ - webpack/routes/OvalContents/OvalContentsNew/index.js
479
+ - webpack/routes/OvalContents/OvalContentsShow/OvalContentsShow.js
480
+ - webpack/routes/OvalContents/OvalContentsShow/OvalContentsShow.test.js
481
+ - webpack/routes/OvalContents/OvalContentsShow/OvalContentsShowHelper.js
482
+ - webpack/routes/OvalContents/OvalContentsShow/index.js
450
483
  - webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesIndex.js
451
484
  - webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesTable.js
485
+ - webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesDestroy.fixtures.js
486
+ - webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesDestroy.test.js
452
487
  - webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesIndex.fixtures.js
453
488
  - webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesIndex.test.js
454
489
  - webpack/routes/OvalPolicies/OvalPoliciesIndex/index.js
455
490
  - webpack/routes/OvalPolicies/OvalPoliciesShow/CvesTab.js
456
491
  - webpack/routes/OvalPolicies/OvalPoliciesShow/CvesTable.js
492
+ - webpack/routes/OvalPolicies/OvalPoliciesShow/DetailsTab.js
493
+ - webpack/routes/OvalPolicies/OvalPoliciesShow/HostgroupsTab.js
494
+ - webpack/routes/OvalPolicies/OvalPoliciesShow/HostgroupsTable.js
457
495
  - webpack/routes/OvalPolicies/OvalPoliciesShow/OvalPoliciesShow.js
458
496
  - webpack/routes/OvalPolicies/OvalPoliciesShow/OvalPoliciesShowHelper.js
497
+ - webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesEdit.fixtures.js
498
+ - webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesEdit.test.js
459
499
  - webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesShow.fixtures.js
460
500
  - webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesShow.test.js
461
501
  - webpack/routes/OvalPolicies/OvalPoliciesShow/index.js
@@ -531,9 +571,10 @@ test_files:
531
571
  - test/unit/services/tailoring_files_proxy_check_test.rb
532
572
  - test/unit/services/oval/cves_test.rb
533
573
  - test/unit/services/oval/setup_test.rb
574
+ - test/unit/services/oval/setup_check_test.rb
534
575
  - test/unit/services/config_name_service_test.rb
535
- - test/unit/services/hostgroup_overrider_test.rb
536
576
  - test/unit/services/lookup_key_overrider_test.rb
577
+ - test/unit/services/hostgroup_overrider_test.rb
537
578
  - test/unit/tailoring_file_test.rb
538
579
  - test/unit/oval_host_test.rb
539
580
  - test/unit/oval_policy_test.rb
@@ -542,4 +583,6 @@ test_files:
542
583
  - test/fixtures/cve_fixtures.rb
543
584
  - test/graphql/queries/oval_contents_query_test.rb
544
585
  - test/graphql/queries/oval_policies_query_test.rb
586
+ - test/graphql/queries/oval_content_query_test.rb
587
+ - test/graphql/mutations/oval_policies/delete_mutation_test.rb
545
588
  - test/test_plugin_helper.rb