foreman_leapp 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -20
  3. data/app/controllers/api/v2/concerns/api_authorizer.rb +27 -0
  4. data/app/controllers/api/v2/preupgrade_reports_controller.rb +21 -2
  5. data/app/controllers/preupgrade_reports_controller.rb +11 -1
  6. data/app/lib/actions/preupgrade_job.rb +2 -1
  7. data/app/models/preupgrade_report.rb +1 -0
  8. data/app/models/preupgrade_report_entry.rb +1 -0
  9. data/app/views/api/v2/preupgrade_report_entries/base.json.rabl +1 -1
  10. data/app/views/api/v2/preupgrade_reports/job_invocation.json.rabl +3 -0
  11. data/app/views/foreman_leapp/job_templates/check.erb +14 -0
  12. data/app/views/foreman_leapp/job_templates/preupgrade.erb +3 -1
  13. data/app/views/foreman_leapp/job_templates/remediation.erb +11 -0
  14. data/app/views/foreman_leapp/job_templates/upgrade.erb +6 -5
  15. data/config/routes.rb +2 -1
  16. data/db/migrate/20200429080939_report_entries_flags.rb +5 -0
  17. data/lib/foreman_leapp/engine.rb +4 -1
  18. data/lib/foreman_leapp/version.rb +1 -1
  19. data/package.json +3 -2
  20. data/test/functional/api/v2/preupgrade_reports_controller_test.rb +89 -6
  21. data/test/functional/preupgrade_reports_controller_test.rb +27 -4
  22. data/webpack/__mocks__/foremanReact/common/I18n.js +1 -1
  23. data/webpack/__mocks__/foremanReact/components/common/EmptyState.js +1 -0
  24. data/webpack/components/PreupgradeReports/PreupgradeReports.js +104 -21
  25. data/webpack/components/PreupgradeReports/PreupgradeReportsActions.js +1 -1
  26. data/webpack/components/PreupgradeReports/PreupgradeReportsHelpers.js +132 -15
  27. data/webpack/components/PreupgradeReports/PreupgradeReportsReducer.js +2 -0
  28. data/webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js +10 -0
  29. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js +45 -7
  30. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js +17 -1
  31. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsHelpers.test.js +43 -3
  32. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReports.test.js.snap +82 -134
  33. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsHelpers.test.js.snap +409 -2
  34. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap +21 -1
  35. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap +17 -1
  36. data/webpack/components/PreupgradeReports/components/EntriesFilter.js +121 -0
  37. data/webpack/components/PreupgradeReports/components/EntriesFilter.scss +3 -0
  38. data/webpack/components/PreupgradeReports/components/EntriesFilter.test.js +30 -0
  39. data/webpack/components/PreupgradeReports/components/{FixAllButton.js → FixSelectedButton.js} +6 -8
  40. data/webpack/components/PreupgradeReports/components/FixSelectedButton.test.js +15 -0
  41. data/webpack/components/PreupgradeReports/components/NoReports.js +35 -0
  42. data/webpack/components/PreupgradeReports/components/NoReports.test.js +15 -0
  43. data/webpack/components/PreupgradeReports/components/UpgradeAllButton.js +29 -0
  44. data/webpack/components/PreupgradeReports/components/{FixAllButton.test.js → UpgradeAllButton.test.js} +3 -4
  45. data/webpack/components/PreupgradeReports/components/__snapshots__/EntriesFilter.test.js.snap +330 -0
  46. data/webpack/components/PreupgradeReports/components/__snapshots__/{FixAllButton.test.js.snap → FixSelectedButton.test.js.snap} +9 -3
  47. data/webpack/components/PreupgradeReports/components/__snapshots__/NoReports.test.js.snap +19 -0
  48. data/webpack/components/PreupgradeReports/components/__snapshots__/UpgradeAllButton.test.js.snap +29 -0
  49. data/webpack/components/PreupgradeReports/index.js +22 -4
  50. data/webpack/components/PreupgradeReportsList/PreupgradeReportList.scss +37 -0
  51. data/webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js +16 -0
  52. data/webpack/components/PreupgradeReportsList/__tests__/__snapshots__/PreupgradeReportsList.test.js.snap +38 -0
  53. data/webpack/components/PreupgradeReportsList/components/InfoItem.js +1 -1
  54. data/webpack/components/PreupgradeReportsList/components/InhibitorInfoItem.js +33 -0
  55. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js +19 -9
  56. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportsListHeader.js +56 -0
  57. data/webpack/components/PreupgradeReportsList/components/SortableHeaderItem.js +50 -0
  58. data/webpack/components/PreupgradeReportsList/components/__tests__/InhibitorInfoItem.test.js +27 -0
  59. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js +2 -0
  60. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportsListHeader.test.js +14 -0
  61. data/webpack/components/PreupgradeReportsList/components/__tests__/SortableHeaderItem.test.js +29 -0
  62. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/InhibitorInfoItem.test.js.snap +32 -0
  63. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap +23 -17
  64. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportsListHeader.test.js.snap +113 -0
  65. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/SortableHeaderItem.test.js.snap +36 -0
  66. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap +4 -10
  67. data/webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js +0 -2
  68. data/webpack/components/PreupgradeReportsList/components/foreman_leapp.scss +7 -1
  69. data/webpack/components/PreupgradeReportsList/components/helpers.js +47 -19
  70. data/webpack/components/PreupgradeReportsList/components/images/i_severity-critical.svg +61 -0
  71. data/webpack/components/PreupgradeReportsList/components/images/i_severity-high.svg +61 -0
  72. data/webpack/components/PreupgradeReportsList/components/images/i_severity-low.svg +62 -0
  73. data/webpack/components/PreupgradeReportsList/components/images/i_severity-med.svg +62 -0
  74. data/webpack/components/PreupgradeReportsList/index.js +28 -3
  75. metadata +34 -5
@@ -0,0 +1,121 @@
1
+ import React from 'react';
2
+ import { DebounceInput } from 'react-debounce-input';
3
+ import { DropdownButton, MenuItem, Form, Col, Row } from 'patternfly-react';
4
+ import PropTypes from 'prop-types';
5
+
6
+ import { translate as __ } from 'foremanReact/common/I18n';
7
+
8
+ import './EntriesFilter.scss';
9
+
10
+ const EntriesFilter = ({
11
+ filterType,
12
+ filterValue,
13
+ onFilterValueChange,
14
+ onFilterTypeChange,
15
+ }) => {
16
+ let filterValueField;
17
+
18
+ const filterTypes = [
19
+ { value: 'title', label: __('Title') },
20
+ { value: 'severity', label: __('Severity') },
21
+ { value: 'hostname', label: __('Host') },
22
+ { value: 'fix', label: __('Fix Type') },
23
+ { value: 'inhibitor', label: __('Inhibitor') },
24
+ ];
25
+
26
+ const severityTypes = [
27
+ { value: '', label: __('All') },
28
+ { value: 'low', label: __('Low') },
29
+ { value: 'medium', label: __('Medium') },
30
+ { value: 'high', label: __('High') },
31
+ { value: 'info', label: __('Info') },
32
+ ];
33
+
34
+ const fixTypes = [
35
+ { value: '', label: __('All') },
36
+ { value: 'hint', label: __('Hint') },
37
+ { value: 'command', label: __('Command') },
38
+ ];
39
+
40
+ const inhibitorTypes = [
41
+ { value: '', label: __('All') },
42
+ { value: 'yes', label: __('Yes') },
43
+ { value: 'no', label: __('No') },
44
+ ];
45
+
46
+ const selectOptionMapping = {
47
+ severity: severityTypes,
48
+ fix: fixTypes,
49
+ inhibitor: inhibitorTypes,
50
+ };
51
+
52
+ const findLabel = (selectOptions, currentValue) =>
53
+ selectOptions.find(opt => opt.value === currentValue).label;
54
+
55
+ if (['title', 'hostname'].includes(filterType)) {
56
+ filterValueField = (
57
+ <DebounceInput
58
+ className="form-control entries-filter-reset-height"
59
+ debounceTimeout={300}
60
+ onChange={event => onFilterValueChange(event.target.value)}
61
+ />
62
+ );
63
+ }
64
+
65
+ if (['severity', 'fix', 'inhibitor'].includes(filterType)) {
66
+ const options = selectOptionMapping[filterType];
67
+
68
+ filterValueField = (
69
+ <DropdownButton
70
+ id="entry-value-filter"
71
+ title={findLabel(options, filterValue)}
72
+ >
73
+ {options.map(type => (
74
+ <MenuItem
75
+ key={type.value}
76
+ active={filterValue === type.value}
77
+ onClick={() => onFilterValueChange(type.value)}
78
+ >
79
+ {type.label}
80
+ </MenuItem>
81
+ ))}
82
+ </DropdownButton>
83
+ );
84
+ }
85
+
86
+ return (
87
+ <Row>
88
+ <Col md={4}>
89
+ <Form.FormGroup>
90
+ <Form.InputGroup>
91
+ <DropdownButton
92
+ id="entry-filter"
93
+ title={findLabel(filterTypes, filterType)}
94
+ componentClass={Form.InputGroup.Button}
95
+ >
96
+ {filterTypes.map(type => (
97
+ <MenuItem
98
+ key={type.value}
99
+ active={filterType === type.value}
100
+ onClick={() => onFilterTypeChange(type.value)}
101
+ >
102
+ {type.label}
103
+ </MenuItem>
104
+ ))}
105
+ </DropdownButton>
106
+ {filterValueField}
107
+ </Form.InputGroup>
108
+ </Form.FormGroup>
109
+ </Col>
110
+ </Row>
111
+ );
112
+ };
113
+
114
+ EntriesFilter.propTypes = {
115
+ filterType: PropTypes.string.isRequired,
116
+ filterValue: PropTypes.string.isRequired,
117
+ onFilterTypeChange: PropTypes.func.isRequired,
118
+ onFilterValueChange: PropTypes.func.isRequired,
119
+ };
120
+
121
+ export default EntriesFilter;
@@ -0,0 +1,3 @@
1
+ .entries-filter-reset-height {
2
+ height: inherit;
3
+ }
@@ -0,0 +1,30 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+
3
+ import EntriesFilter from './EntriesFilter';
4
+
5
+ const onFilterValueChange = () => {};
6
+ const onFilterTypeChange = () => {};
7
+
8
+ const fixtures = {
9
+ 'should render for title filter': {
10
+ onFilterTypeChange,
11
+ onFilterValueChange,
12
+ filterType: 'title',
13
+ filterValue: 'version',
14
+ },
15
+ 'should render for severity filter': {
16
+ onFilterTypeChange,
17
+ onFilterValueChange,
18
+ filterType: 'severity',
19
+ filterValue: 'low',
20
+ },
21
+ 'should render for host filter': {
22
+ onFilterTypeChange,
23
+ onFilterValueChange,
24
+ filterType: 'hostname',
25
+ filterValue: 'foo',
26
+ },
27
+ };
28
+
29
+ describe('EntriresFilter', () =>
30
+ testComponentSnapshotsWithFixtures(EntriesFilter, fixtures));
@@ -3,15 +3,13 @@ import PropTypes from 'prop-types';
3
3
  import { Button } from 'patternfly-react';
4
4
  import { translate as __ } from 'foremanReact/common/I18n';
5
5
 
6
- import { idsForInvocation } from '../PreupgradeReportsHelpers';
7
-
8
- const FixAllButton = ({ preupgradeReports, postUrl, disabled, csrfToken }) => {
9
- const { hostIds, entryIds } = idsForInvocation(preupgradeReports);
6
+ const FixSelectedButton = ({ ids, postUrl, disabled, csrfToken }) => {
7
+ const { hostIds, entryIds } = ids;
10
8
 
11
9
  return (
12
10
  <form action={postUrl} method="post">
13
11
  <Button type="submit" disabled={disabled}>
14
- {__('Fix All')}
12
+ {__('Fix Selected')}
15
13
  </Button>
16
14
  <input type="hidden" name="authenticity_token" value={csrfToken} />
17
15
  <input type="hidden" name="feature" value="leapp_remediation_plan" />
@@ -27,11 +25,11 @@ const FixAllButton = ({ preupgradeReports, postUrl, disabled, csrfToken }) => {
27
25
  );
28
26
  };
29
27
 
30
- FixAllButton.propTypes = {
31
- preupgradeReports: PropTypes.array.isRequired,
28
+ FixSelectedButton.propTypes = {
29
+ ids: PropTypes.object.isRequired,
32
30
  postUrl: PropTypes.string.isRequired,
33
31
  disabled: PropTypes.bool.isRequired,
34
32
  csrfToken: PropTypes.string.isRequired,
35
33
  };
36
34
 
37
- export default FixAllButton;
35
+ export default FixSelectedButton;
@@ -0,0 +1,15 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+
3
+ import FixSelectedButton from './FixSelectedButton';
4
+
5
+ const fixtures = {
6
+ 'should render': {
7
+ ids: { hostIds: [5], entryIds: [115] },
8
+ postUrl: '/job_invocations/new',
9
+ disabled: false,
10
+ csrfToken: 'abcd',
11
+ },
12
+ };
13
+
14
+ describe('FixSelectedButton', () =>
15
+ testComponentSnapshotsWithFixtures(FixSelectedButton, fixtures));
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ import { EmptyStatePattern as EmptyState } from 'foremanReact/components/common/EmptyState';
5
+ import { translate as __ } from 'foremanReact/common/I18n';
6
+
7
+ const NoReports = ({ reportsExpected }) => {
8
+ let text;
9
+ let icon;
10
+
11
+ if (reportsExpected) {
12
+ text = __(
13
+ 'The preupgrade report could not be generated, check the job details for the reason'
14
+ );
15
+ icon = 'warning-triangle-o';
16
+ } else {
17
+ text = __('The preupgrade report will be available after the job finishes');
18
+ icon = 'in-progress';
19
+ }
20
+
21
+ return (
22
+ <EmptyState
23
+ iconType="pf"
24
+ icon={icon}
25
+ header={__('No Preupgrade Report Available')}
26
+ description={text}
27
+ />
28
+ );
29
+ };
30
+
31
+ NoReports.propTypes = {
32
+ reportsExpected: PropTypes.bool.isRequired,
33
+ };
34
+
35
+ export default NoReports;
@@ -0,0 +1,15 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+
3
+ import NoReports from './NoReports';
4
+
5
+ const fixtures = {
6
+ 'should render when reports expected': {
7
+ reportsExpected: true,
8
+ },
9
+ 'should render when reports not expected': {
10
+ reportsExpected: false,
11
+ },
12
+ };
13
+
14
+ describe('NoReports', () =>
15
+ testComponentSnapshotsWithFixtures(NoReports, fixtures));
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Button } from 'patternfly-react';
4
+ import { translate as __ } from 'foremanReact/common/I18n';
5
+
6
+ import { idsForInvocationFromReports } from '../PreupgradeReportsHelpers';
7
+
8
+ const UpgradeAllButton = ({ preupgradeReports, postUrl, csrfToken }) => {
9
+ const { hostIds } = idsForInvocationFromReports(preupgradeReports);
10
+
11
+ return (
12
+ <form action={postUrl} method="post">
13
+ <Button type="submit">{__('Run Upgrade')}</Button>
14
+ <input type="hidden" name="authenticity_token" value={csrfToken} />
15
+ <input type="hidden" name="feature" value="leapp_upgrade" />
16
+ {hostIds.map(hostId => (
17
+ <input type="hidden" name="host_ids[]" key={hostId} value={hostId} />
18
+ ))}
19
+ </form>
20
+ );
21
+ };
22
+
23
+ UpgradeAllButton.propTypes = {
24
+ preupgradeReports: PropTypes.array.isRequired,
25
+ postUrl: PropTypes.string.isRequired,
26
+ csrfToken: PropTypes.string.isRequired,
27
+ };
28
+
29
+ export default UpgradeAllButton;
@@ -1,6 +1,6 @@
1
1
  import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
- import FixAllButton from './FixAllButton';
3
+ import UpgradeAllButton from './UpgradeAllButton';
4
4
 
5
5
  import { preupgradeReports } from '../__tests__/PreupgradeReports.fixtures';
6
6
 
@@ -8,11 +8,10 @@ const fixtures = {
8
8
  'should render': {
9
9
  preupgradeReports,
10
10
  postUrl: '/job_invocations/new',
11
- disabled: false,
12
11
  title: 'Button title',
13
12
  csrfToken: 'abcd',
14
13
  },
15
14
  };
16
15
 
17
- describe('FixAllButton', () =>
18
- testComponentSnapshotsWithFixtures(FixAllButton, fixtures));
16
+ describe('UpgradeAllButton', () =>
17
+ testComponentSnapshotsWithFixtures(UpgradeAllButton, fixtures));
@@ -0,0 +1,330 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`EntriresFilter should render for host filter 1`] = `
4
+ <Row
5
+ bsClass="row"
6
+ componentClass="div"
7
+ >
8
+ <Col
9
+ bsClass="col"
10
+ componentClass="div"
11
+ md={4}
12
+ >
13
+ <FormGroup
14
+ bsClass="form-group"
15
+ >
16
+ <InputGroup
17
+ bsClass="input-group"
18
+ >
19
+ <DropdownButton
20
+ componentClass={[Function]}
21
+ id="entry-filter"
22
+ title="Host"
23
+ >
24
+ <MenuItem
25
+ active={false}
26
+ bsClass="dropdown"
27
+ disabled={false}
28
+ divider={false}
29
+ header={false}
30
+ key="title"
31
+ onClick={[Function]}
32
+ >
33
+ Title
34
+ </MenuItem>
35
+ <MenuItem
36
+ active={false}
37
+ bsClass="dropdown"
38
+ disabled={false}
39
+ divider={false}
40
+ header={false}
41
+ key="severity"
42
+ onClick={[Function]}
43
+ >
44
+ Severity
45
+ </MenuItem>
46
+ <MenuItem
47
+ active={true}
48
+ bsClass="dropdown"
49
+ disabled={false}
50
+ divider={false}
51
+ header={false}
52
+ key="hostname"
53
+ onClick={[Function]}
54
+ >
55
+ Host
56
+ </MenuItem>
57
+ <MenuItem
58
+ active={false}
59
+ bsClass="dropdown"
60
+ disabled={false}
61
+ divider={false}
62
+ header={false}
63
+ key="fix"
64
+ onClick={[Function]}
65
+ >
66
+ Fix Type
67
+ </MenuItem>
68
+ <MenuItem
69
+ active={false}
70
+ bsClass="dropdown"
71
+ disabled={false}
72
+ divider={false}
73
+ header={false}
74
+ key="inhibitor"
75
+ onClick={[Function]}
76
+ >
77
+ Inhibitor
78
+ </MenuItem>
79
+ </DropdownButton>
80
+ <DebounceInput
81
+ className="form-control entries-filter-reset-height"
82
+ debounceTimeout={300}
83
+ element="input"
84
+ forceNotifyByEnter={true}
85
+ forceNotifyOnBlur={true}
86
+ minLength={0}
87
+ onChange={[Function]}
88
+ type="text"
89
+ />
90
+ </InputGroup>
91
+ </FormGroup>
92
+ </Col>
93
+ </Row>
94
+ `;
95
+
96
+ exports[`EntriresFilter should render for severity filter 1`] = `
97
+ <Row
98
+ bsClass="row"
99
+ componentClass="div"
100
+ >
101
+ <Col
102
+ bsClass="col"
103
+ componentClass="div"
104
+ md={4}
105
+ >
106
+ <FormGroup
107
+ bsClass="form-group"
108
+ >
109
+ <InputGroup
110
+ bsClass="input-group"
111
+ >
112
+ <DropdownButton
113
+ componentClass={[Function]}
114
+ id="entry-filter"
115
+ title="Severity"
116
+ >
117
+ <MenuItem
118
+ active={false}
119
+ bsClass="dropdown"
120
+ disabled={false}
121
+ divider={false}
122
+ header={false}
123
+ key="title"
124
+ onClick={[Function]}
125
+ >
126
+ Title
127
+ </MenuItem>
128
+ <MenuItem
129
+ active={true}
130
+ bsClass="dropdown"
131
+ disabled={false}
132
+ divider={false}
133
+ header={false}
134
+ key="severity"
135
+ onClick={[Function]}
136
+ >
137
+ Severity
138
+ </MenuItem>
139
+ <MenuItem
140
+ active={false}
141
+ bsClass="dropdown"
142
+ disabled={false}
143
+ divider={false}
144
+ header={false}
145
+ key="hostname"
146
+ onClick={[Function]}
147
+ >
148
+ Host
149
+ </MenuItem>
150
+ <MenuItem
151
+ active={false}
152
+ bsClass="dropdown"
153
+ disabled={false}
154
+ divider={false}
155
+ header={false}
156
+ key="fix"
157
+ onClick={[Function]}
158
+ >
159
+ Fix Type
160
+ </MenuItem>
161
+ <MenuItem
162
+ active={false}
163
+ bsClass="dropdown"
164
+ disabled={false}
165
+ divider={false}
166
+ header={false}
167
+ key="inhibitor"
168
+ onClick={[Function]}
169
+ >
170
+ Inhibitor
171
+ </MenuItem>
172
+ </DropdownButton>
173
+ <DropdownButton
174
+ id="entry-value-filter"
175
+ title="Low"
176
+ >
177
+ <MenuItem
178
+ active={false}
179
+ bsClass="dropdown"
180
+ disabled={false}
181
+ divider={false}
182
+ header={false}
183
+ key=""
184
+ onClick={[Function]}
185
+ >
186
+ All
187
+ </MenuItem>
188
+ <MenuItem
189
+ active={true}
190
+ bsClass="dropdown"
191
+ disabled={false}
192
+ divider={false}
193
+ header={false}
194
+ key="low"
195
+ onClick={[Function]}
196
+ >
197
+ Low
198
+ </MenuItem>
199
+ <MenuItem
200
+ active={false}
201
+ bsClass="dropdown"
202
+ disabled={false}
203
+ divider={false}
204
+ header={false}
205
+ key="medium"
206
+ onClick={[Function]}
207
+ >
208
+ Medium
209
+ </MenuItem>
210
+ <MenuItem
211
+ active={false}
212
+ bsClass="dropdown"
213
+ disabled={false}
214
+ divider={false}
215
+ header={false}
216
+ key="high"
217
+ onClick={[Function]}
218
+ >
219
+ High
220
+ </MenuItem>
221
+ <MenuItem
222
+ active={false}
223
+ bsClass="dropdown"
224
+ disabled={false}
225
+ divider={false}
226
+ header={false}
227
+ key="info"
228
+ onClick={[Function]}
229
+ >
230
+ Info
231
+ </MenuItem>
232
+ </DropdownButton>
233
+ </InputGroup>
234
+ </FormGroup>
235
+ </Col>
236
+ </Row>
237
+ `;
238
+
239
+ exports[`EntriresFilter should render for title filter 1`] = `
240
+ <Row
241
+ bsClass="row"
242
+ componentClass="div"
243
+ >
244
+ <Col
245
+ bsClass="col"
246
+ componentClass="div"
247
+ md={4}
248
+ >
249
+ <FormGroup
250
+ bsClass="form-group"
251
+ >
252
+ <InputGroup
253
+ bsClass="input-group"
254
+ >
255
+ <DropdownButton
256
+ componentClass={[Function]}
257
+ id="entry-filter"
258
+ title="Title"
259
+ >
260
+ <MenuItem
261
+ active={true}
262
+ bsClass="dropdown"
263
+ disabled={false}
264
+ divider={false}
265
+ header={false}
266
+ key="title"
267
+ onClick={[Function]}
268
+ >
269
+ Title
270
+ </MenuItem>
271
+ <MenuItem
272
+ active={false}
273
+ bsClass="dropdown"
274
+ disabled={false}
275
+ divider={false}
276
+ header={false}
277
+ key="severity"
278
+ onClick={[Function]}
279
+ >
280
+ Severity
281
+ </MenuItem>
282
+ <MenuItem
283
+ active={false}
284
+ bsClass="dropdown"
285
+ disabled={false}
286
+ divider={false}
287
+ header={false}
288
+ key="hostname"
289
+ onClick={[Function]}
290
+ >
291
+ Host
292
+ </MenuItem>
293
+ <MenuItem
294
+ active={false}
295
+ bsClass="dropdown"
296
+ disabled={false}
297
+ divider={false}
298
+ header={false}
299
+ key="fix"
300
+ onClick={[Function]}
301
+ >
302
+ Fix Type
303
+ </MenuItem>
304
+ <MenuItem
305
+ active={false}
306
+ bsClass="dropdown"
307
+ disabled={false}
308
+ divider={false}
309
+ header={false}
310
+ key="inhibitor"
311
+ onClick={[Function]}
312
+ >
313
+ Inhibitor
314
+ </MenuItem>
315
+ </DropdownButton>
316
+ <DebounceInput
317
+ className="form-control entries-filter-reset-height"
318
+ debounceTimeout={300}
319
+ element="input"
320
+ forceNotifyByEnter={true}
321
+ forceNotifyOnBlur={true}
322
+ minLength={0}
323
+ onChange={[Function]}
324
+ type="text"
325
+ />
326
+ </InputGroup>
327
+ </FormGroup>
328
+ </Col>
329
+ </Row>
330
+ `;
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`FixAllButton should render 1`] = `
3
+ exports[`FixSelectedButton should render 1`] = `
4
4
  <form
5
5
  action="/job_invocations/new"
6
6
  method="post"
@@ -13,7 +13,7 @@ exports[`FixAllButton should render 1`] = `
13
13
  disabled={false}
14
14
  type="submit"
15
15
  >
16
- <Component />
16
+ Fix Selected
17
17
  </Button>
18
18
  <input
19
19
  name="authenticity_token"
@@ -25,10 +25,16 @@ exports[`FixAllButton should render 1`] = `
25
25
  type="hidden"
26
26
  value="leapp_remediation_plan"
27
27
  />
28
+ <input
29
+ key="5"
30
+ name="host_ids[]"
31
+ type="hidden"
32
+ value={5}
33
+ />
28
34
  <input
29
35
  name="inputs[remediation_ids]"
30
36
  type="hidden"
31
- value=""
37
+ value="115"
32
38
  />
33
39
  </form>
34
40
  `;
@@ -0,0 +1,19 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`NoReports should render when reports expected 1`] = `
4
+ <EmptyStatePattern
5
+ description="The preupgrade report could not be generated, check the job details for the reason"
6
+ header="No Preupgrade Report Available"
7
+ icon="warning-triangle-o"
8
+ iconType="pf"
9
+ />
10
+ `;
11
+
12
+ exports[`NoReports should render when reports not expected 1`] = `
13
+ <EmptyStatePattern
14
+ description="The preupgrade report will be available after the job finishes"
15
+ header="No Preupgrade Report Available"
16
+ icon="in-progress"
17
+ iconType="pf"
18
+ />
19
+ `;