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,29 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`UpgradeAllButton should render 1`] = `
4
+ <form
5
+ action="/job_invocations/new"
6
+ method="post"
7
+ >
8
+ <Button
9
+ active={false}
10
+ block={false}
11
+ bsClass="btn"
12
+ bsStyle="default"
13
+ disabled={false}
14
+ type="submit"
15
+ >
16
+ Run Upgrade
17
+ </Button>
18
+ <input
19
+ name="authenticity_token"
20
+ type="hidden"
21
+ value="abcd"
22
+ />
23
+ <input
24
+ name="feature"
25
+ type="hidden"
26
+ value="leapp_upgrade"
27
+ />
28
+ </form>
29
+ `;
@@ -1,4 +1,4 @@
1
- import React, { useEffect } from 'react';
1
+ import React, { useEffect, useRef } from 'react';
2
2
  import { useDispatch, useSelector } from 'react-redux';
3
3
  import PropTypes from 'prop-types';
4
4
 
@@ -9,10 +9,12 @@ import getCsrfToken from '../../csrf';
9
9
  import {
10
10
  selectPreupgradeReports,
11
11
  selectLoadingPreupgradeReports,
12
+ selectReportsExpected,
12
13
  selectError,
14
+ selectJobInvocationsPolling,
13
15
  } from './PreupgradeReportsSelectors';
14
16
 
15
- import { getPreupgradeReports } from './PreupgradeReportsActions';
17
+ import { getPreupgradeReportsAction } from './PreupgradeReportsActions';
16
18
 
17
19
  const WrappedPreupgradeReports = ({ url, newJobInvocationUrl }) => {
18
20
  const loading = useSelector(state => selectLoadingPreupgradeReports(state));
@@ -21,11 +23,26 @@ const WrappedPreupgradeReports = ({ url, newJobInvocationUrl }) => {
21
23
  );
22
24
  const error = useSelector(state => selectError(state));
23
25
 
26
+ const invocationPending = useSelector(state =>
27
+ selectJobInvocationsPolling(state)
28
+ );
29
+
30
+ const reportsExpected = useSelector(state => selectReportsExpected(state));
31
+
32
+ const previousInvocationRef = useRef();
33
+ useEffect(() => {
34
+ previousInvocationRef.current = invocationPending;
35
+ });
36
+
37
+ const previousInvocationPending = previousInvocationRef.current;
38
+
24
39
  const dispatch = useDispatch();
25
40
 
26
41
  useEffect(() => {
27
- dispatch(getPreupgradeReports(url));
28
- }, [url, dispatch]);
42
+ if (previousInvocationPending && !invocationPending) {
43
+ dispatch(getPreupgradeReportsAction(url));
44
+ }
45
+ }, [dispatch, url, invocationPending, previousInvocationPending]);
29
46
 
30
47
  return (
31
48
  <PreupgradeReports
@@ -34,6 +51,7 @@ const WrappedPreupgradeReports = ({ url, newJobInvocationUrl }) => {
34
51
  loading={loading}
35
52
  csrfToken={getCsrfToken()}
36
53
  newJobInvocationUrl={newJobInvocationUrl}
54
+ reportsExpected={reportsExpected}
37
55
  />
38
56
  );
39
57
  };
@@ -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} className="additional-info-wide">
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
- const PreupgradeReportEntry = ({ entry }) => (
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={<input type="checkbox" />}
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
- <Icon
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: __('Severity'), 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));
@@ -5,6 +5,8 @@ import PreupgradeReportEntry from '../PreupgradeReportEntry';
5
5
  const fixtures = {
6
6
  'should render': {
7
7
  entry: { title: 'no title', severity: 'low', id: 5, preupgradeReportId: 7 },
8
+ isEntrySelected: false,
9
+ toggleSelected: () => {},
8
10
  },
9
11
  };
10
12
 
@@ -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));
@@ -0,0 +1,29 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+
3
+ import SortableHeaderItem from '../SortableHeaderItem';
4
+
5
+ const changeSort = () => {};
6
+
7
+ const fixtures = {
8
+ 'should render when not selected': {
9
+ changeSort,
10
+ sort: { attribute: '', order: 'asc' },
11
+ value: 'severity',
12
+ title: 'severity',
13
+ },
14
+ 'should render when selected and sorting asc': {
15
+ changeSort,
16
+ sort: { attribute: 'severity', order: 'asc' },
17
+ value: 'severity',
18
+ title: 'Severity',
19
+ },
20
+ 'should render when selected and sorting desc': {
21
+ changeSort,
22
+ sort: { attribute: 'severity', order: 'desc' },
23
+ value: 'severity',
24
+ title: 'Severity',
25
+ },
26
+ };
27
+
28
+ describe('SortableHeaderItem', () =>
29
+ testComponentSnapshotsWithFixtures(SortableHeaderItem, fixtures));
@@ -0,0 +1,32 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`InhibitorInfoItem should render when inhibitor 1`] = `
4
+ <InfoItem
5
+ itemId="inhibitor-5"
6
+ tooltipText="This issue inhibits the upgrade."
7
+ >
8
+ <span>
9
+ <Icon
10
+ className="severity-high"
11
+ name="security"
12
+ type="pf"
13
+ />
14
+ Inhibitor
15
+ </span>
16
+ </InfoItem>
17
+ `;
18
+
19
+ exports[`InhibitorInfoItem should render when not inhibitor 1`] = `
20
+ <EmptyInfoItem
21
+ attr="inhibitor"
22
+ entry={
23
+ Object {
24
+ "flags": Array [],
25
+ "id": 5,
26
+ "preupgradeReportId": 7,
27
+ "severity": "low",
28
+ "title": "no title",
29
+ }
30
+ }
31
+ />
32
+ `;
@@ -19,16 +19,11 @@ exports[`PreupgradeReportEntry should render 1`] = `
19
19
  className=""
20
20
  stacked={false}
21
21
  >
22
- <Icon
23
- name="resources-full"
24
- style={
25
- Object {
26
- "color": "#39a5dc",
27
- }
28
- }
29
- type="pf"
22
+ <img
23
+ alt="Low Severity"
24
+ className="severity-img"
25
+ src={[Function]}
30
26
  />
31
- low
32
27
  </ListViewInfoItem>,
33
28
  <EmptyInfoItem
34
29
  attr="remediation"
@@ -41,11 +36,25 @@ exports[`PreupgradeReportEntry should render 1`] = `
41
36
  }
42
37
  }
43
38
  />,
39
+ <InhibitorInfoItem
40
+ entry={
41
+ Object {
42
+ "id": 5,
43
+ "preupgradeReportId": 7,
44
+ "severity": "low",
45
+ "title": "no title",
46
+ }
47
+ }
48
+ />,
44
49
  ]
45
50
  }
46
51
  checkboxInput={
47
52
  <input
53
+ checked={false}
54
+ disabled={true}
55
+ onChange={[Function]}
48
56
  type="checkbox"
57
+ value={false}
49
58
  />
50
59
  }
51
60
  compoundExpand={false}
@@ -106,14 +115,11 @@ exports[`PreupgradeReportEntry should render 1`] = `
106
115
  componentClass="div"
107
116
  md={8}
108
117
  >
109
- <Icon
110
- name="resources-full"
111
- style={
112
- Object {
113
- "color": "#39a5dc",
114
- }
115
- }
116
- type="pf"
118
+ <img
119
+ alt="Low Severity"
120
+ className="severity-img"
121
+ key="5-7-sv5"
122
+ src={[Function]}
117
123
  />
118
124
 
119
125
  low