foreman_leapp 4.2.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/foreman_leapp/locale/de/foreman_leapp.js +2 -2
  3. data/app/assets/javascripts/foreman_leapp/locale/en/foreman_leapp.js +1 -1
  4. data/app/assets/javascripts/foreman_leapp/locale/fr/foreman_leapp.js +12 -12
  5. data/app/assets/javascripts/foreman_leapp/locale/ja/foreman_leapp.js +12 -12
  6. data/app/assets/javascripts/foreman_leapp/locale/ka/foreman_leapp.js +1 -1
  7. data/app/assets/javascripts/foreman_leapp/locale/ko/foreman_leapp.js +13 -13
  8. data/app/assets/javascripts/foreman_leapp/locale/zh_CN/foreman_leapp.js +12 -12
  9. data/app/controllers/api/v2/preupgrade_report_entries_controller.rb +17 -29
  10. data/app/controllers/concerns/foreman_leapp/preupgrade_report_entry_bulk_remediate.rb +69 -0
  11. data/config/routes.rb +1 -2
  12. data/lib/foreman_leapp/engine.rb +1 -12
  13. data/lib/foreman_leapp/version.rb +1 -1
  14. data/locale/de/LC_MESSAGES/foreman_leapp.mo +0 -0
  15. data/locale/de/foreman_leapp.po +3 -3
  16. data/locale/en/LC_MESSAGES/foreman_leapp.mo +0 -0
  17. data/locale/en/foreman_leapp.po +1 -1
  18. data/locale/foreman_leapp.pot +2 -2
  19. data/locale/fr/LC_MESSAGES/foreman_leapp.mo +0 -0
  20. data/locale/fr/foreman_leapp.po +13 -13
  21. data/locale/ja/LC_MESSAGES/foreman_leapp.mo +0 -0
  22. data/locale/ja/foreman_leapp.po +13 -13
  23. data/locale/ka/LC_MESSAGES/foreman_leapp.mo +0 -0
  24. data/locale/ka/foreman_leapp.po +1 -1
  25. data/locale/ko/LC_MESSAGES/foreman_leapp.mo +0 -0
  26. data/locale/ko/foreman_leapp.po +15 -16
  27. data/locale/zh_CN/LC_MESSAGES/foreman_leapp.mo +0 -0
  28. data/locale/zh_CN/foreman_leapp.po +13 -13
  29. data/package.json +0 -1
  30. data/test/functional/api/v2/preupgrade_report_entries_controller_test.rb +64 -0
  31. data/webpack/components/PreupgradeReportsTable/PreupgradeReportsTableHelpers.js +43 -16
  32. data/webpack/components/PreupgradeReportsTable/__tests__/PreupgradeReportsTable.test.js +41 -8
  33. data/webpack/components/PreupgradeReportsTable/index.js +64 -71
  34. data/webpack/index.js +0 -13
  35. metadata +3 -66
  36. data/app/controllers/preupgrade_reports_controller.rb +0 -17
  37. data/app/views/job_invocations/_leapp_preupgrade_report.html.erb +0 -11
  38. data/app/views/preupgrade_report_entries/base.json.rabl +0 -4
  39. data/app/views/preupgrade_reports/index.json.rabl +0 -3
  40. data/app/views/preupgrade_reports/show.json.rabl +0 -7
  41. data/test/functional/preupgrade_reports_controller_test.rb +0 -39
  42. data/webpack/components/PreupgradeReports/PreupgradeReports.js +0 -154
  43. data/webpack/components/PreupgradeReports/PreupgradeReportsActions.js +0 -31
  44. data/webpack/components/PreupgradeReports/PreupgradeReportsHelpers.js +0 -152
  45. data/webpack/components/PreupgradeReports/PreupgradeReportsReducer.js +0 -37
  46. data/webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js +0 -18
  47. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js +0 -129
  48. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js +0 -159
  49. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsHelpers.test.js +0 -78
  50. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsReducer.test.js +0 -44
  51. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsSelectors.test.js +0 -28
  52. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsHelpers.test.js.snap +0 -489
  53. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap +0 -102
  54. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap +0 -76
  55. data/webpack/components/PreupgradeReports/components/EntriesFilter.js +0 -121
  56. data/webpack/components/PreupgradeReports/components/EntriesFilter.scss +0 -3
  57. data/webpack/components/PreupgradeReports/components/EntriesFilter.test.js +0 -30
  58. data/webpack/components/PreupgradeReports/components/FixSelectedButton.js +0 -35
  59. data/webpack/components/PreupgradeReports/components/FixSelectedButton.test.js +0 -15
  60. data/webpack/components/PreupgradeReports/components/NoReports.js +0 -35
  61. data/webpack/components/PreupgradeReports/components/NoReports.test.js +0 -29
  62. data/webpack/components/PreupgradeReports/components/UpgradeAllButton.js +0 -28
  63. data/webpack/components/PreupgradeReports/components/UpgradeAllButton.test.js +0 -17
  64. data/webpack/components/PreupgradeReports/components/__snapshots__/EntriesFilter.test.js.snap +0 -330
  65. data/webpack/components/PreupgradeReports/components/__snapshots__/FixSelectedButton.test.js.snap +0 -40
  66. data/webpack/components/PreupgradeReports/components/__snapshots__/UpgradeAllButton.test.js.snap +0 -41
  67. data/webpack/components/PreupgradeReports/index.js +0 -57
  68. data/webpack/components/PreupgradeReportsList/PreupgradeReportList.scss +0 -37
  69. data/webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js +0 -124
  70. data/webpack/components/PreupgradeReportsList/components/EmptyInfoItem.js +0 -16
  71. data/webpack/components/PreupgradeReportsList/components/InfoItem.js +0 -34
  72. data/webpack/components/PreupgradeReportsList/components/InhibitorInfoItem.js +0 -33
  73. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js +0 -64
  74. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportsListHeader.js +0 -56
  75. data/webpack/components/PreupgradeReportsList/components/SortableHeaderItem.js +0 -50
  76. data/webpack/components/PreupgradeReportsList/components/__tests__/EmptyInfoItem.test.js +0 -13
  77. data/webpack/components/PreupgradeReportsList/components/__tests__/InhibitorInfoItem.test.js +0 -27
  78. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.fixtures.js +0 -38
  79. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js +0 -14
  80. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportsListHeader.test.js +0 -14
  81. data/webpack/components/PreupgradeReportsList/components/__tests__/SortableHeaderItem.test.js +0 -29
  82. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/EmptyInfoItem.test.js.snap +0 -8
  83. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/InhibitorInfoItem.test.js.snap +0 -32
  84. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap +0 -134
  85. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportsListHeader.test.js.snap +0 -113
  86. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/SortableHeaderItem.test.js.snap +0 -36
  87. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap +0 -197
  88. data/webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js +0 -28
  89. data/webpack/components/PreupgradeReportsList/components/foreman_leapp.scss +0 -15
  90. data/webpack/components/PreupgradeReportsList/components/helpers.js +0 -186
  91. data/webpack/components/PreupgradeReportsList/components/images/i_severity-critical.svg +0 -61
  92. data/webpack/components/PreupgradeReportsList/components/images/i_severity-high.svg +0 -61
  93. data/webpack/components/PreupgradeReportsList/components/images/i_severity-low.svg +0 -62
  94. data/webpack/components/PreupgradeReportsList/components/images/i_severity-med.svg +0 -62
  95. data/webpack/components/PreupgradeReportsList/index.js +0 -61
  96. data/webpack/consts.js +0 -3
  97. data/webpack/csrf.js +0 -4
  98. data/webpack/reducer.js +0 -5
@@ -1,41 +0,0 @@
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
- <input
29
- key="5"
30
- name="host_ids[]"
31
- type="hidden"
32
- value={5}
33
- />
34
- <input
35
- key="6"
36
- name="host_ids[]"
37
- type="hidden"
38
- value={6}
39
- />
40
- </form>
41
- `;
@@ -1,57 +0,0 @@
1
- import React, { useEffect } from 'react';
2
- import { useDispatch, useSelector } from 'react-redux';
3
- import PropTypes from 'prop-types';
4
-
5
- import PreupgradeReports from './PreupgradeReports';
6
-
7
- import getCsrfToken from '../../csrf';
8
-
9
- import {
10
- selectPreupgradeReports,
11
- selectLoadingPreupgradeReports,
12
- selectReportsExpected,
13
- selectError,
14
- selectJobInvocationsPolling,
15
- } from './PreupgradeReportsSelectors';
16
-
17
- import { getPreupgradeReportsAction } from './PreupgradeReportsActions';
18
-
19
- const WrappedPreupgradeReports = ({ url, newJobInvocationUrl }) => {
20
- const loading = useSelector(state => selectLoadingPreupgradeReports(state));
21
- const preupgradeReports = useSelector(state =>
22
- selectPreupgradeReports(state)
23
- );
24
- const error = useSelector(state => selectError(state));
25
-
26
- const invocationPending = useSelector(state =>
27
- selectJobInvocationsPolling(state)
28
- );
29
-
30
- const reportsExpected = useSelector(state => selectReportsExpected(state));
31
-
32
- const dispatch = useDispatch();
33
-
34
- useEffect(() => {
35
- if (!invocationPending) {
36
- dispatch(getPreupgradeReportsAction(url));
37
- }
38
- }, [dispatch, url, invocationPending]);
39
-
40
- return (
41
- <PreupgradeReports
42
- preupgradeReports={preupgradeReports}
43
- error={error}
44
- loading={loading}
45
- csrfToken={getCsrfToken()}
46
- newJobInvocationUrl={newJobInvocationUrl}
47
- reportsExpected={reportsExpected}
48
- />
49
- );
50
- };
51
-
52
- WrappedPreupgradeReports.propTypes = {
53
- url: PropTypes.string.isRequired,
54
- newJobInvocationUrl: PropTypes.string.isRequired,
55
- };
56
-
57
- export default WrappedPreupgradeReports;
@@ -1,37 +0,0 @@
1
- @import 'foremanReact/common/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
- }
@@ -1,124 +0,0 @@
1
- import React from 'react';
2
- import { render, screen, fireEvent } from '@testing-library/react';
3
- import '@testing-library/jest-dom';
4
-
5
- import PreupgradeReportsList from '../index';
6
-
7
- jest.mock('foremanReact/components/Pagination', () => {
8
- const MockPagination = () => <div data-testid="pagination">Pagination</div>;
9
- return MockPagination;
10
- });
11
-
12
- jest.mock('../components/images/i_severity-high.svg', () => 'severity-high.svg');
13
- jest.mock('../components/images/i_severity-med.svg', () => 'severity-med.svg');
14
- jest.mock('../components/images/i_severity-low.svg', () => 'severity-low.svg');
15
-
16
- const createMockEntries = count =>
17
- Array.from({ length: count }, (_, i) => ({
18
- id: i + 1,
19
- preupgradeReportId: 100,
20
- title: `Entry ${i + 1}`,
21
- hostname: `host${i + 1}.example.com`,
22
- severity: i % 3 === 0 ? 'high' : i % 3 === 1 ? 'medium' : 'low',
23
- flags: i === 0 ? ['inhibitor'] : [],
24
- detail: {
25
- remediations:
26
- i < 2
27
- ? [{ type: 'command', context: ['echo', 'fix', 'command'] }]
28
- : [],
29
- },
30
- }));
31
-
32
- const defaultProps = {
33
- allEntries: createMockEntries(4),
34
- isSelected: () => false,
35
- toggleSelected: jest.fn(),
36
- sort: { attribute: '', order: 'asc' },
37
- changeSort: jest.fn(),
38
- toggleSelectAll: jest.fn(),
39
- };
40
-
41
- const renderComponent = (props = {}) =>
42
- render(<PreupgradeReportsList {...defaultProps} {...props} />);
43
-
44
- describe('PreupgradeReportsList', () => {
45
- beforeEach(() => {
46
- jest.clearAllMocks();
47
- });
48
-
49
- it('renders the list header', () => {
50
- renderComponent();
51
-
52
- expect(screen.getByText('Title')).toBeInTheDocument();
53
- expect(screen.getByText('Host')).toBeInTheDocument();
54
- expect(screen.getByText('Risk Factor')).toBeInTheDocument();
55
- expect(screen.getByText('Has Remediation?')).toBeInTheDocument();
56
- expect(screen.getByText('Inhibitor?')).toBeInTheDocument();
57
- });
58
-
59
- it('renders entry titles', () => {
60
- renderComponent();
61
-
62
- expect(screen.getByText('Entry 1')).toBeInTheDocument();
63
- expect(screen.getByText('Entry 2')).toBeInTheDocument();
64
- expect(screen.getByText('Entry 3')).toBeInTheDocument();
65
- expect(screen.getByText('Entry 4')).toBeInTheDocument();
66
- });
67
-
68
- it('renders entry hostnames', () => {
69
- renderComponent();
70
-
71
- expect(screen.getByText('host1.example.com')).toBeInTheDocument();
72
- expect(screen.getByText('host2.example.com')).toBeInTheDocument();
73
- });
74
-
75
- it('renders checkboxes for entries', () => {
76
- renderComponent();
77
-
78
- const checkboxes = screen.getAllByRole('checkbox');
79
- expect(checkboxes.length).toBeGreaterThan(0);
80
- });
81
-
82
- it('calls toggleSelectAll when header checkbox is clicked', () => {
83
- const toggleSelectAll = jest.fn();
84
- renderComponent({ toggleSelectAll });
85
-
86
- const checkboxes = screen.getAllByRole('checkbox');
87
- fireEvent.click(checkboxes[0]);
88
-
89
- expect(toggleSelectAll).toHaveBeenCalled();
90
- });
91
-
92
- it('renders with empty entries array', () => {
93
- renderComponent({ allEntries: [] });
94
-
95
- expect(screen.getByText('Title')).toBeInTheDocument();
96
- expect(screen.queryByText('Entry 1')).not.toBeInTheDocument();
97
- });
98
-
99
- it('renders entries with selected state', () => {
100
- const isSelected = entry => entry.id === 1;
101
- renderComponent({ isSelected });
102
-
103
- const checkboxes = screen.getAllByRole('checkbox');
104
- const entryCheckboxes = checkboxes.slice(1);
105
- expect(entryCheckboxes[0]).toBeChecked();
106
- expect(entryCheckboxes[1]).not.toBeChecked();
107
- });
108
-
109
- it('calls toggleSelected when entry checkbox is clicked', () => {
110
- const toggleSelected = jest.fn();
111
- renderComponent({ toggleSelected });
112
-
113
- const checkboxes = screen.getAllByRole('checkbox');
114
- fireEvent.click(checkboxes[1]);
115
-
116
- expect(toggleSelected).toHaveBeenCalled();
117
- });
118
-
119
- it('renders pagination component', () => {
120
- renderComponent();
121
-
122
- expect(screen.getByTestId('pagination')).toBeInTheDocument();
123
- });
124
- });
@@ -1,16 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
-
4
- import InfoItem from './InfoItem';
5
- import { itemIteratorId } from './helpers';
6
-
7
- const EmptyInfoItem = ({ entry, attr }) => (
8
- <InfoItem itemId={itemIteratorId(entry, attr)} />
9
- );
10
-
11
- EmptyInfoItem.propTypes = {
12
- entry: PropTypes.object.isRequired,
13
- attr: PropTypes.string.isRequired,
14
- };
15
-
16
- export default EmptyInfoItem;
@@ -1,34 +0,0 @@
1
- import React from 'react';
2
- import { ListView, OverlayTrigger, Tooltip } from 'patternfly-react';
3
- import PropTypes from 'prop-types';
4
-
5
- const InfoItem = ({ itemId, children, tooltipText }) => {
6
- const overlay = (
7
- <OverlayTrigger
8
- overlay={tooltipText ? <Tooltip id={itemId}>{tooltipText}</Tooltip> : ''}
9
- placement="top"
10
- trigger={['hover', 'focus']}
11
- rootClose={false}
12
- >
13
- {children}
14
- </OverlayTrigger>
15
- );
16
- return (
17
- <ListView.InfoItem key={itemId}>
18
- {tooltipText ? overlay : children}
19
- </ListView.InfoItem>
20
- );
21
- };
22
-
23
- InfoItem.propTypes = {
24
- itemId: PropTypes.string.isRequired,
25
- children: PropTypes.node,
26
- tooltipText: PropTypes.string,
27
- };
28
-
29
- InfoItem.defaultProps = {
30
- tooltipText: '',
31
- children: undefined,
32
- };
33
-
34
- export default InfoItem;
@@ -1,33 +0,0 @@
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;
@@ -1,64 +0,0 @@
1
- import React from 'react';
2
- import { ListView, Grid, Icon } from 'patternfly-react';
3
- import PropTypes from 'prop-types';
4
- import './foreman_leapp.scss';
5
-
6
- import InhibitorInfoItem from './InhibitorInfoItem';
7
-
8
- import {
9
- itemIteratorId,
10
- hasRemediations,
11
- getExternals,
12
- getRemediations,
13
- getTitle,
14
- getSeverity,
15
- getSummary,
16
- getTags,
17
- getSeverityImg,
18
- } from './helpers';
19
-
20
- import { entryFixable } from '../../PreupgradeReports/PreupgradeReportsHelpers';
21
-
22
- const PreupgradeReportEntry = ({ entry, isEntrySelected, toggleSelected }) => (
23
- <ListView.Item
24
- key={entry.id}
25
- stacked
26
- checkboxInput={
27
- <input
28
- type="checkbox"
29
- value={isEntrySelected}
30
- checked={isEntrySelected}
31
- disabled={!entryFixable(entry)}
32
- onChange={() => toggleSelected(entry, isEntrySelected)}
33
- />
34
- }
35
- description={entry.title}
36
- additionalInfo={[
37
- <ListView.InfoItem key={itemIteratorId(entry, entry.hostname)}>
38
- <Icon type="pf" name="cluster" /> {entry.hostname}
39
- </ListView.InfoItem>,
40
- <ListView.InfoItem key={itemIteratorId(entry, entry.severity)}>
41
- {getSeverityImg(entry)}
42
- </ListView.InfoItem>,
43
- hasRemediations(entry),
44
- <InhibitorInfoItem key={itemIteratorId(entry, 'flags')} entry={entry} />,
45
- ]}
46
- >
47
- <Grid fluid>
48
- {getTitle(entry)}
49
- {getSeverity(entry)}
50
- {getSummary(entry)}
51
- {getTags(entry)}
52
- {getExternals(entry)}
53
- {getRemediations(entry)}
54
- </Grid>
55
- </ListView.Item>
56
- );
57
-
58
- PreupgradeReportEntry.propTypes = {
59
- entry: PropTypes.object.isRequired,
60
- isEntrySelected: PropTypes.bool.isRequired,
61
- toggleSelected: PropTypes.func.isRequired,
62
- };
63
-
64
- export default PreupgradeReportEntry;
@@ -1,56 +0,0 @@
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;
@@ -1,50 +0,0 @@
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;
@@ -1,13 +0,0 @@
1
- import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
-
3
- import EmptyInfoItem from '../EmptyInfoItem';
4
-
5
- const fixtures = {
6
- 'should render': {
7
- entry: { title: 'no title', severity: 'low', id: 5, preupgradeReportId: 7 },
8
- attr: 'title',
9
- },
10
- };
11
-
12
- describe('EmptyInfoItem', () =>
13
- testComponentSnapshotsWithFixtures(EmptyInfoItem, fixtures));
@@ -1,27 +0,0 @@
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));
@@ -1,38 +0,0 @@
1
- export const reportEntry = {
2
- hostname: 'leapp-20200407164551',
3
- severity: 'high',
4
- title: 'Difference in Python versions and support in RHEL 8',
5
- timeStamp: '2020-04-08T16:49:34.453295Z',
6
- tags: ['python'],
7
- summary: 'This checks difference in python versions',
8
- detail: {
9
- related_resources: [
10
- {
11
- scheme: 'package',
12
- title: 'python',
13
- },
14
- {
15
- scheme: 'package',
16
- title: 'python2',
17
- },
18
- {
19
- scheme: 'package',
20
- title: 'python3',
21
- },
22
- ],
23
- external: [
24
- {
25
- url:
26
- 'https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/configuring_basic_system_settings/#using-python3',
27
- title: 'Difference in Python versions and support in RHEL 8',
28
- },
29
- ],
30
- remediations: [
31
- {
32
- type: 'hint',
33
- context:
34
- 'Please run "alternatives --set python /usr/bin/python3" after upgrade',
35
- },
36
- ],
37
- },
38
- };
@@ -1,14 +0,0 @@
1
- import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
-
3
- import PreupgradeReportEntry from '../PreupgradeReportEntry';
4
-
5
- const fixtures = {
6
- 'should render': {
7
- entry: { title: 'no title', severity: 'low', id: 5, preupgradeReportId: 7 },
8
- isEntrySelected: false,
9
- toggleSelected: () => {},
10
- },
11
- };
12
-
13
- describe('PreupgradeReportEntry', () =>
14
- testComponentSnapshotsWithFixtures(PreupgradeReportEntry, fixtures));
@@ -1,14 +0,0 @@
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));
@@ -1,29 +0,0 @@
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));
@@ -1,8 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`EmptyInfoItem should render 1`] = `
4
- <InfoItem
5
- itemId="5-7-title"
6
- tooltipText=""
7
- />
8
- `;