foreman_leapp 0.0.6 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -20
- data/app/controllers/api/v2/concerns/api_authorizer.rb +27 -0
- data/app/controllers/api/v2/preupgrade_reports_controller.rb +21 -2
- data/app/controllers/preupgrade_reports_controller.rb +11 -1
- data/app/lib/actions/preupgrade_job.rb +2 -1
- data/app/lib/helpers/job_helper.rb +3 -4
- data/app/models/preupgrade_report.rb +1 -0
- data/app/models/preupgrade_report_entry.rb +1 -0
- data/app/views/api/v2/preupgrade_report_entries/base.json.rabl +1 -1
- data/app/views/api/v2/preupgrade_reports/job_invocation.json.rabl +3 -0
- data/app/views/foreman_leapp/job_templates/leapp_check.erb +15 -0
- data/app/views/foreman_leapp/job_templates/{preupgrade.erb → leapp_preupgrade.erb} +5 -2
- data/app/views/foreman_leapp/job_templates/leapp_remediation.erb +29 -0
- data/app/views/foreman_leapp/job_templates/{upgrade.erb → leapp_upgrade.erb} +9 -7
- data/config/routes.rb +2 -1
- data/db/migrate/20200429080939_report_entries_flags.rb +5 -0
- data/db/seeds.d/10_leapp_preupgrade.rb +1 -1
- data/lib/foreman_leapp/engine.rb +7 -6
- data/lib/foreman_leapp/version.rb +1 -1
- data/locale/action_names.rb +6 -0
- data/locale/en/foreman_leapp.po +104 -2
- data/locale/foreman_leapp.pot +164 -8
- data/package.json +3 -2
- data/test/functional/api/v2/preupgrade_reports_controller_test.rb +89 -6
- data/test/functional/preupgrade_reports_controller_test.rb +27 -4
- data/test/unit/actions/preupgrade_job_test.rb +1 -1
- data/test/unit/helpers/job_helper_test.rb +3 -10
- data/webpack/__mocks__/foremanReact/common/I18n.js +1 -1
- data/webpack/__mocks__/foremanReact/components/common/EmptyState.js +1 -0
- data/webpack/components/PreupgradeReports/PreupgradeReports.js +104 -21
- data/webpack/components/PreupgradeReports/PreupgradeReportsActions.js +1 -1
- data/webpack/components/PreupgradeReports/PreupgradeReportsHelpers.js +132 -15
- data/webpack/components/PreupgradeReports/PreupgradeReportsReducer.js +2 -0
- data/webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js +10 -0
- data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js +45 -7
- data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js +17 -1
- data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsHelpers.test.js +43 -3
- data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReports.test.js.snap +82 -134
- data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsHelpers.test.js.snap +409 -2
- data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap +21 -1
- data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap +17 -1
- data/webpack/components/PreupgradeReports/components/EntriesFilter.js +121 -0
- data/webpack/components/PreupgradeReports/components/EntriesFilter.scss +3 -0
- data/webpack/components/PreupgradeReports/components/EntriesFilter.test.js +30 -0
- data/webpack/components/PreupgradeReports/components/{FixAllButton.js → FixSelectedButton.js} +6 -8
- data/webpack/components/PreupgradeReports/components/FixSelectedButton.test.js +15 -0
- data/webpack/components/PreupgradeReports/components/NoReports.js +35 -0
- data/webpack/components/PreupgradeReports/components/NoReports.test.js +15 -0
- data/webpack/components/PreupgradeReports/components/UpgradeAllButton.js +29 -0
- data/webpack/components/PreupgradeReports/components/{FixAllButton.test.js → UpgradeAllButton.test.js} +3 -4
- data/webpack/components/PreupgradeReports/components/__snapshots__/EntriesFilter.test.js.snap +330 -0
- data/webpack/components/PreupgradeReports/components/__snapshots__/{FixAllButton.test.js.snap → FixSelectedButton.test.js.snap} +9 -3
- data/webpack/components/PreupgradeReports/components/__snapshots__/NoReports.test.js.snap +19 -0
- data/webpack/components/PreupgradeReports/components/__snapshots__/UpgradeAllButton.test.js.snap +29 -0
- data/webpack/components/PreupgradeReports/index.js +22 -4
- data/webpack/components/PreupgradeReportsList/PreupgradeReportList.scss +37 -0
- data/webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js +16 -0
- data/webpack/components/PreupgradeReportsList/__tests__/__snapshots__/PreupgradeReportsList.test.js.snap +38 -0
- data/webpack/components/PreupgradeReportsList/components/InfoItem.js +1 -1
- data/webpack/components/PreupgradeReportsList/components/InhibitorInfoItem.js +33 -0
- data/webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js +19 -9
- data/webpack/components/PreupgradeReportsList/components/PreupgradeReportsListHeader.js +56 -0
- data/webpack/components/PreupgradeReportsList/components/SortableHeaderItem.js +50 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/InhibitorInfoItem.test.js +27 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js +2 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportsListHeader.test.js +14 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/SortableHeaderItem.test.js +29 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/InhibitorInfoItem.test.js.snap +32 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap +23 -17
- data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportsListHeader.test.js.snap +113 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/SortableHeaderItem.test.js.snap +36 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap +4 -10
- data/webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js +0 -2
- data/webpack/components/PreupgradeReportsList/components/foreman_leapp.scss +7 -1
- data/webpack/components/PreupgradeReportsList/components/helpers.js +47 -19
- data/webpack/components/PreupgradeReportsList/components/images/i_severity-critical.svg +61 -0
- data/webpack/components/PreupgradeReportsList/components/images/i_severity-high.svg +61 -0
- data/webpack/components/PreupgradeReportsList/components/images/i_severity-low.svg +62 -0
- data/webpack/components/PreupgradeReportsList/components/images/i_severity-med.svg +62 -0
- data/webpack/components/PreupgradeReportsList/index.js +28 -3
- metadata +54 -18
- data/app/views/foreman_leapp/job_templates/remediation.erb +0 -17
@@ -0,0 +1,37 @@
|
|
1
|
+
@import '~@theforeman/vendor/scss/variables';
|
2
|
+
|
3
|
+
#preupgrade-report-entries-list-view {
|
4
|
+
.sortable-header {
|
5
|
+
&.active {
|
6
|
+
color: $color-pf-blue-400;
|
7
|
+
}
|
8
|
+
|
9
|
+
&:hover {
|
10
|
+
cursor: pointer;
|
11
|
+
}
|
12
|
+
|
13
|
+
.fa-angle-up, .fa-angle-down {
|
14
|
+
margin-right: 10px;
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
.list-view-pf-additional-info-item {
|
19
|
+
flex: 1;
|
20
|
+
}
|
21
|
+
|
22
|
+
.list-view-header {
|
23
|
+
border-top: 0px;
|
24
|
+
background-color: $color-pf-white;
|
25
|
+
border-left-color: $color-pf-white;
|
26
|
+
border-right-color: $color-pf-white;
|
27
|
+
|
28
|
+
.list-view-pf-description {
|
29
|
+
font-size: 16px;
|
30
|
+
font-weight: 600;
|
31
|
+
}
|
32
|
+
|
33
|
+
.list-view-pf-checkbox {
|
34
|
+
margin-left: 17px;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
@@ -9,14 +9,30 @@ const allEntries = [
|
|
9
9
|
{ title: 'Not enough credits', severity: 'low' },
|
10
10
|
];
|
11
11
|
|
12
|
+
const isSelected = () => false;
|
13
|
+
const toggleSelected = () => {};
|
14
|
+
const sort = { attribute: '', order: 'asc' };
|
15
|
+
const changeSort = () => {};
|
16
|
+
const toggleSelectAll = () => {};
|
17
|
+
|
12
18
|
const fixtures = {
|
13
19
|
'should render': {
|
14
20
|
allEntries,
|
15
21
|
fixAllWorking: false,
|
22
|
+
isSelected,
|
23
|
+
toggleSelected,
|
24
|
+
sort,
|
25
|
+
changeSort,
|
26
|
+
toggleSelectAll,
|
16
27
|
},
|
17
28
|
'should render when working': {
|
18
29
|
allEntries,
|
19
30
|
fixAllWorking: true,
|
31
|
+
isSelected,
|
32
|
+
toggleSelected,
|
33
|
+
sort,
|
34
|
+
changeSort,
|
35
|
+
toggleSelectAll,
|
20
36
|
},
|
21
37
|
};
|
22
38
|
|
@@ -3,7 +3,18 @@
|
|
3
3
|
exports[`PreupgradeReportsList should render 1`] = `
|
4
4
|
<ListView
|
5
5
|
className=""
|
6
|
+
id="preupgrade-report-entries-list-view"
|
6
7
|
>
|
8
|
+
<PreupgradeReportsListHeader
|
9
|
+
changeSort={[Function]}
|
10
|
+
sort={
|
11
|
+
Object {
|
12
|
+
"attribute": "",
|
13
|
+
"order": "asc",
|
14
|
+
}
|
15
|
+
}
|
16
|
+
toggleSelectAll={[Function]}
|
17
|
+
/>
|
7
18
|
<PreupgradeReportEntry
|
8
19
|
entry={
|
9
20
|
Object {
|
@@ -11,7 +22,9 @@ exports[`PreupgradeReportsList should render 1`] = `
|
|
11
22
|
"title": "Fix me!",
|
12
23
|
}
|
13
24
|
}
|
25
|
+
isEntrySelected={false}
|
14
26
|
key="0"
|
27
|
+
toggleSelected={[Function]}
|
15
28
|
/>
|
16
29
|
<PreupgradeReportEntry
|
17
30
|
entry={
|
@@ -20,7 +33,9 @@ exports[`PreupgradeReportsList should render 1`] = `
|
|
20
33
|
"title": "I am broken too",
|
21
34
|
}
|
22
35
|
}
|
36
|
+
isEntrySelected={false}
|
23
37
|
key="1"
|
38
|
+
toggleSelected={[Function]}
|
24
39
|
/>
|
25
40
|
<PreupgradeReportEntry
|
26
41
|
entry={
|
@@ -29,7 +44,9 @@ exports[`PreupgradeReportsList should render 1`] = `
|
|
29
44
|
"title": "Octocat is not happy",
|
30
45
|
}
|
31
46
|
}
|
47
|
+
isEntrySelected={false}
|
32
48
|
key="2"
|
49
|
+
toggleSelected={[Function]}
|
33
50
|
/>
|
34
51
|
<PreupgradeReportEntry
|
35
52
|
entry={
|
@@ -38,7 +55,9 @@ exports[`PreupgradeReportsList should render 1`] = `
|
|
38
55
|
"title": "Not enough credits",
|
39
56
|
}
|
40
57
|
}
|
58
|
+
isEntrySelected={false}
|
41
59
|
key="3"
|
60
|
+
toggleSelected={[Function]}
|
42
61
|
/>
|
43
62
|
<PaginationWrapper
|
44
63
|
dropdownButtonId="preupgrade-report-entries-pagination-dropdown"
|
@@ -65,7 +84,18 @@ exports[`PreupgradeReportsList should render 1`] = `
|
|
65
84
|
exports[`PreupgradeReportsList should render when working 1`] = `
|
66
85
|
<ListView
|
67
86
|
className=""
|
87
|
+
id="preupgrade-report-entries-list-view"
|
68
88
|
>
|
89
|
+
<PreupgradeReportsListHeader
|
90
|
+
changeSort={[Function]}
|
91
|
+
sort={
|
92
|
+
Object {
|
93
|
+
"attribute": "",
|
94
|
+
"order": "asc",
|
95
|
+
}
|
96
|
+
}
|
97
|
+
toggleSelectAll={[Function]}
|
98
|
+
/>
|
69
99
|
<PreupgradeReportEntry
|
70
100
|
entry={
|
71
101
|
Object {
|
@@ -73,7 +103,9 @@ exports[`PreupgradeReportsList should render when working 1`] = `
|
|
73
103
|
"title": "Fix me!",
|
74
104
|
}
|
75
105
|
}
|
106
|
+
isEntrySelected={false}
|
76
107
|
key="0"
|
108
|
+
toggleSelected={[Function]}
|
77
109
|
/>
|
78
110
|
<PreupgradeReportEntry
|
79
111
|
entry={
|
@@ -82,7 +114,9 @@ exports[`PreupgradeReportsList should render when working 1`] = `
|
|
82
114
|
"title": "I am broken too",
|
83
115
|
}
|
84
116
|
}
|
117
|
+
isEntrySelected={false}
|
85
118
|
key="1"
|
119
|
+
toggleSelected={[Function]}
|
86
120
|
/>
|
87
121
|
<PreupgradeReportEntry
|
88
122
|
entry={
|
@@ -91,7 +125,9 @@ exports[`PreupgradeReportsList should render when working 1`] = `
|
|
91
125
|
"title": "Octocat is not happy",
|
92
126
|
}
|
93
127
|
}
|
128
|
+
isEntrySelected={false}
|
94
129
|
key="2"
|
130
|
+
toggleSelected={[Function]}
|
95
131
|
/>
|
96
132
|
<PreupgradeReportEntry
|
97
133
|
entry={
|
@@ -100,7 +136,9 @@ exports[`PreupgradeReportsList should render when working 1`] = `
|
|
100
136
|
"title": "Not enough credits",
|
101
137
|
}
|
102
138
|
}
|
139
|
+
isEntrySelected={false}
|
103
140
|
key="3"
|
141
|
+
toggleSelected={[Function]}
|
104
142
|
/>
|
105
143
|
<PaginationWrapper
|
106
144
|
dropdownButtonId="preupgrade-report-entries-pagination-dropdown"
|
@@ -14,7 +14,7 @@ const InfoItem = ({ itemId, children, tooltipText }) => {
|
|
14
14
|
</OverlayTrigger>
|
15
15
|
);
|
16
16
|
return (
|
17
|
-
<ListView.InfoItem key={itemId}
|
17
|
+
<ListView.InfoItem key={itemId}>
|
18
18
|
{tooltipText ? overlay : children}
|
19
19
|
</ListView.InfoItem>
|
20
20
|
);
|
@@ -0,0 +1,33 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import PropTypes from 'prop-types';
|
3
|
+
import { Icon } from 'patternfly-react';
|
4
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
5
|
+
|
6
|
+
import { isInhibitor } from '../../PreupgradeReports/PreupgradeReportsHelpers';
|
7
|
+
import InfoItem from './InfoItem';
|
8
|
+
import EmptyInfoItem from './EmptyInfoItem';
|
9
|
+
|
10
|
+
const InhibitorInfoItem = ({ entry }) => {
|
11
|
+
const key = `inhibitor-${entry.id}`;
|
12
|
+
|
13
|
+
if (isInhibitor(entry)) {
|
14
|
+
return (
|
15
|
+
<InfoItem
|
16
|
+
itemId={key}
|
17
|
+
tooltipText={__('This issue inhibits the upgrade.')}
|
18
|
+
>
|
19
|
+
<span>
|
20
|
+
<Icon type="pf" name="security" className="severity-high" />
|
21
|
+
{__('Inhibitor')}
|
22
|
+
</span>
|
23
|
+
</InfoItem>
|
24
|
+
);
|
25
|
+
}
|
26
|
+
return <EmptyInfoItem entry={entry} attr="inhibitor" />;
|
27
|
+
};
|
28
|
+
|
29
|
+
InhibitorInfoItem.propTypes = {
|
30
|
+
entry: PropTypes.object.isRequired,
|
31
|
+
};
|
32
|
+
|
33
|
+
export default InhibitorInfoItem;
|
@@ -3,9 +3,10 @@ import { ListView, Grid, Icon } from 'patternfly-react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
4
4
|
import './foreman_leapp.scss';
|
5
5
|
|
6
|
+
import InhibitorInfoItem from './InhibitorInfoItem';
|
7
|
+
|
6
8
|
import {
|
7
9
|
itemIteratorId,
|
8
|
-
presentSeverity,
|
9
10
|
hasRemediations,
|
10
11
|
getExternals,
|
11
12
|
getRemediations,
|
@@ -13,27 +14,34 @@ import {
|
|
13
14
|
getSeverity,
|
14
15
|
getSummary,
|
15
16
|
getTags,
|
17
|
+
getSeverityImg,
|
16
18
|
} from './helpers';
|
17
19
|
|
18
|
-
|
20
|
+
import { entryFixable } from '../../PreupgradeReports/PreupgradeReportsHelpers';
|
21
|
+
|
22
|
+
const PreupgradeReportEntry = ({ entry, isEntrySelected, toggleSelected }) => (
|
19
23
|
<ListView.Item
|
20
24
|
key={entry.id}
|
21
25
|
stacked
|
22
|
-
checkboxInput={
|
26
|
+
checkboxInput={
|
27
|
+
<input
|
28
|
+
type="checkbox"
|
29
|
+
value={isEntrySelected}
|
30
|
+
checked={isEntrySelected}
|
31
|
+
disabled={!entryFixable(entry)}
|
32
|
+
onChange={() => toggleSelected(entry, isEntrySelected)}
|
33
|
+
/>
|
34
|
+
}
|
23
35
|
description={entry.title}
|
24
36
|
additionalInfo={[
|
25
37
|
<ListView.InfoItem key={itemIteratorId(entry, entry.hostname)}>
|
26
38
|
<Icon type="pf" name="cluster" /> {entry.hostname}
|
27
39
|
</ListView.InfoItem>,
|
28
40
|
<ListView.InfoItem key={itemIteratorId(entry, entry.severity)}>
|
29
|
-
|
30
|
-
type="pf"
|
31
|
-
name="resources-full"
|
32
|
-
style={{ color: presentSeverity(entry.severity) }}
|
33
|
-
/>
|
34
|
-
{entry.severity}
|
41
|
+
{getSeverityImg(entry)}
|
35
42
|
</ListView.InfoItem>,
|
36
43
|
hasRemediations(entry),
|
44
|
+
<InhibitorInfoItem key={itemIteratorId(entry, 'flags')} entry={entry} />,
|
37
45
|
]}
|
38
46
|
>
|
39
47
|
<Grid fluid>
|
@@ -49,6 +57,8 @@ const PreupgradeReportEntry = ({ entry }) => (
|
|
49
57
|
|
50
58
|
PreupgradeReportEntry.propTypes = {
|
51
59
|
entry: PropTypes.object.isRequired,
|
60
|
+
isEntrySelected: PropTypes.bool.isRequired,
|
61
|
+
toggleSelected: PropTypes.func.isRequired,
|
52
62
|
};
|
53
63
|
|
54
64
|
export default PreupgradeReportEntry;
|
@@ -0,0 +1,56 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { ListView } from 'patternfly-react';
|
3
|
+
import PropTypes from 'prop-types';
|
4
|
+
|
5
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
6
|
+
|
7
|
+
import InfoItem from './InfoItem';
|
8
|
+
import SortableHeaderItem from './SortableHeaderItem';
|
9
|
+
|
10
|
+
const PreupgradeReportsListHeader = ({ sort, changeSort, toggleSelectAll }) => {
|
11
|
+
const additionalInfoColumns = [
|
12
|
+
{ label: __('Host'), value: 'hostname' },
|
13
|
+
{ label: __('Risk Factor'), value: 'severity' },
|
14
|
+
{ label: __('Has Remediation?'), value: 'fix' },
|
15
|
+
{ label: __('Inhibitor?'), value: 'inhibitor' },
|
16
|
+
];
|
17
|
+
|
18
|
+
const additionalInfo = additionalInfoColumns.map((col, idx) => (
|
19
|
+
<InfoItem itemId={idx.toString()} key={idx}>
|
20
|
+
<strong>
|
21
|
+
<SortableHeaderItem
|
22
|
+
title={col.label}
|
23
|
+
sort={sort}
|
24
|
+
value={col.value}
|
25
|
+
changeSort={changeSort}
|
26
|
+
/>
|
27
|
+
</strong>
|
28
|
+
</InfoItem>
|
29
|
+
));
|
30
|
+
|
31
|
+
return (
|
32
|
+
<ListView.Item
|
33
|
+
additionalInfo={additionalInfo}
|
34
|
+
className="list-view-header"
|
35
|
+
checkboxInput={<input type="checkbox" onClick={toggleSelectAll} />}
|
36
|
+
description={
|
37
|
+
<SortableHeaderItem
|
38
|
+
title={__('Title')}
|
39
|
+
sort={sort}
|
40
|
+
value="title"
|
41
|
+
changeSort={changeSort}
|
42
|
+
/>
|
43
|
+
}
|
44
|
+
hideCloseIcon
|
45
|
+
stacked
|
46
|
+
/>
|
47
|
+
);
|
48
|
+
};
|
49
|
+
|
50
|
+
PreupgradeReportsListHeader.propTypes = {
|
51
|
+
sort: PropTypes.object.isRequired,
|
52
|
+
changeSort: PropTypes.func.isRequired,
|
53
|
+
toggleSelectAll: PropTypes.func.isRequired,
|
54
|
+
};
|
55
|
+
|
56
|
+
export default PreupgradeReportsListHeader;
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { Icon } from 'patternfly-react';
|
3
|
+
import classNames from 'classnames';
|
4
|
+
import PropTypes from 'prop-types';
|
5
|
+
|
6
|
+
const SortableHeaderItem = ({ value, title, sort, changeSort }) => {
|
7
|
+
const chooseChevron = (active, order) => {
|
8
|
+
if (!active) {
|
9
|
+
return null;
|
10
|
+
}
|
11
|
+
|
12
|
+
const direction = order === 'asc' ? 'angle-up' : 'angle-down';
|
13
|
+
|
14
|
+
return <Icon type="fa" name={direction} />;
|
15
|
+
};
|
16
|
+
|
17
|
+
const active = sort.attribute === value;
|
18
|
+
|
19
|
+
const clickHandler = () => {
|
20
|
+
let direction = 'asc';
|
21
|
+
|
22
|
+
if (active) {
|
23
|
+
direction = sort.order === 'asc' ? 'desc' : 'asc';
|
24
|
+
}
|
25
|
+
|
26
|
+
changeSort({
|
27
|
+
attribute: value,
|
28
|
+
order: direction,
|
29
|
+
});
|
30
|
+
};
|
31
|
+
|
32
|
+
return (
|
33
|
+
<span
|
34
|
+
className={`sortable-header ${classNames({ active })}`}
|
35
|
+
onClick={clickHandler}
|
36
|
+
>
|
37
|
+
{chooseChevron(active, sort.order)}
|
38
|
+
{title}
|
39
|
+
</span>
|
40
|
+
);
|
41
|
+
};
|
42
|
+
|
43
|
+
SortableHeaderItem.propTypes = {
|
44
|
+
sort: PropTypes.object.isRequired,
|
45
|
+
changeSort: PropTypes.func.isRequired,
|
46
|
+
value: PropTypes.string.isRequired,
|
47
|
+
title: PropTypes.string.isRequired,
|
48
|
+
};
|
49
|
+
|
50
|
+
export default SortableHeaderItem;
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
2
|
+
|
3
|
+
import InhibitorInfoItem from '../InhibitorInfoItem';
|
4
|
+
|
5
|
+
const fixtures = {
|
6
|
+
'should render when inhibitor': {
|
7
|
+
entry: {
|
8
|
+
title: 'no title',
|
9
|
+
severity: 'low',
|
10
|
+
id: 5,
|
11
|
+
preupgradeReportId: 7,
|
12
|
+
flags: ['inhibitor'],
|
13
|
+
},
|
14
|
+
},
|
15
|
+
'should render when not inhibitor': {
|
16
|
+
entry: {
|
17
|
+
title: 'no title',
|
18
|
+
severity: 'low',
|
19
|
+
id: 5,
|
20
|
+
preupgradeReportId: 7,
|
21
|
+
flags: [],
|
22
|
+
},
|
23
|
+
},
|
24
|
+
};
|
25
|
+
|
26
|
+
describe('InhibitorInfoItem', () =>
|
27
|
+
testComponentSnapshotsWithFixtures(InhibitorInfoItem, fixtures));
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
2
|
+
|
3
|
+
import PreupgradeReportsListHeader from '../PreupgradeReportsListHeader';
|
4
|
+
|
5
|
+
const fixtures = {
|
6
|
+
'should render': {
|
7
|
+
sort: { attribute: '', order: 'asc' },
|
8
|
+
changeSort: () => {},
|
9
|
+
toggleSelectAll: () => {},
|
10
|
+
},
|
11
|
+
};
|
12
|
+
|
13
|
+
describe('PreupgradeReportsListHeader', () =>
|
14
|
+
testComponentSnapshotsWithFixtures(PreupgradeReportsListHeader, fixtures));
|