foreman_leapp 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/app/views/foreman_leapp/job_templates/upgrade.erb +12 -4
  3. data/app/views/job_invocations/_leapp_preupgrade_report.html.erb +2 -1
  4. data/lib/foreman_leapp/version.rb +1 -1
  5. data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +4 -0
  6. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +2 -0
  7. data/webpack/components/PreupgradeReports/PreupgradeReports.js +32 -4
  8. data/webpack/components/PreupgradeReports/PreupgradeReportsHelpers.js +35 -0
  9. data/webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js +1 -0
  10. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js +34 -2
  11. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js +9 -0
  12. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsHelpers.test.js +38 -0
  13. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReports.test.js.snap +131 -24
  14. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsHelpers.test.js.snap +82 -0
  15. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap +19 -0
  16. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap +19 -0
  17. data/webpack/components/PreupgradeReports/components/FixAllButton.js +37 -0
  18. data/webpack/components/PreupgradeReports/components/FixAllButton.test.js +18 -0
  19. data/webpack/components/PreupgradeReports/components/__snapshots__/FixAllButton.test.js.snap +34 -0
  20. data/webpack/components/PreupgradeReports/index.js +7 -2
  21. data/webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js +12 -2
  22. data/webpack/components/PreupgradeReportsList/__tests__/__snapshots__/PreupgradeReportsList.test.js.snap +81 -0
  23. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js +39 -5
  24. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.fixtures.js +38 -0
  25. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap +97 -22
  26. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap +196 -28
  27. data/webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js +21 -8
  28. data/webpack/components/PreupgradeReportsList/components/foreman_leapp.scss +9 -0
  29. data/webpack/components/PreupgradeReportsList/components/helpers.js +149 -21
  30. data/webpack/components/PreupgradeReportsList/index.js +21 -8
  31. data/webpack/csrf.js +4 -0
  32. metadata +27 -5
  33. data/webpack/components/PreupgradeReportsList/components/StringInfoItem.js +0 -49
  34. data/webpack/components/PreupgradeReportsList/components/__tests__/StringInfoItem.test.js +0 -13
  35. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/StringInfoItem.test.js.snap +0 -12
@@ -0,0 +1,9 @@
1
+ @import '~@theforeman/vendor/scss/variables';
2
+
3
+ .top-padded {
4
+ padding-top: 8px;
5
+ }
6
+
7
+ .pre-wrap{
8
+ white-space: pre-wrap;
9
+ }
@@ -1,28 +1,156 @@
1
1
  import React from 'react';
2
-
2
+ import { Grid, ListView, Badge, Icon } from 'patternfly-react';
3
3
  import EmptyInfoItem from './EmptyInfoItem';
4
- import StringInfoItem from './StringInfoItem';
5
4
 
6
5
  export const itemIteratorId = (entry, ...rest) =>
7
6
  `${entry.id}-${entry.preupgradeReportId}-${rest.join('-')}`;
8
7
 
9
- export const additionalInfo = entry => {
10
- const infoAttrs = ['title', 'severity'];
11
-
12
- return infoAttrs.map(attr => {
13
- const key = itemIteratorId(entry, attr);
14
-
15
- if (!entry[attr]) {
16
- return <EmptyInfoItem entry={entry} attr={attr} key={key} />;
17
- }
18
-
19
- switch (attr) {
20
- case 'title':
21
- return <StringInfoItem entry={entry} attr={attr} key={key} />;
22
- case 'severity':
23
- return <StringInfoItem entry={entry} attr={attr} key={key} />;
24
- default:
25
- return '';
26
- }
27
- });
8
+ export const presentSeverity = severity => {
9
+ switch (severity) {
10
+ case 'low':
11
+ return '#39a5dc';
12
+ case 'medium':
13
+ return '#f0ab00';
14
+ case 'high':
15
+ return '#cc0000';
16
+ default:
17
+ return '#39a5dc';
18
+ }
19
+ };
20
+
21
+ export const tagInfo = tags =>
22
+ tags.map(attr => (
23
+ <Badge key={attr} variant="pill primary">
24
+ {attr}
25
+ </Badge>
26
+ ));
27
+
28
+ export const hasRemediations = entry => {
29
+ const key = itemIteratorId(entry, `rm${entry.id}`);
30
+ if (entry.detail && entry.detail.remediations) {
31
+ return (
32
+ <ListView.InfoItem key={key}>
33
+ <Icon type="pf" name="warning-triangle-o" /> Has Remediation
34
+ </ListView.InfoItem>
35
+ );
36
+ }
37
+
38
+ return <EmptyInfoItem key={key} entry={entry} attr="remediation" />;
39
+ };
40
+
41
+ export const getTitle = entry => {
42
+ if (entry.title) {
43
+ return (
44
+ <Grid.Row>
45
+ <Grid.Col md={1}>
46
+ <strong>Title</strong>
47
+ </Grid.Col>
48
+ <Grid.Col md={8}>{entry.title}</Grid.Col>
49
+ </Grid.Row>
50
+ );
51
+ }
52
+ return <div />;
53
+ };
54
+
55
+ export const getSeverity = entry => {
56
+ if (entry.severity) {
57
+ return (
58
+ <Grid.Row className="top-padded">
59
+ <Grid.Col md={1}>
60
+ <strong>Risk Factor</strong>
61
+ </Grid.Col>
62
+ <Grid.Col md={8}>
63
+ <Icon
64
+ type="pf"
65
+ name="resources-full"
66
+ style={{ color: presentSeverity(entry.severity) }}
67
+ />{' '}
68
+ {entry.severity}
69
+ </Grid.Col>
70
+ </Grid.Row>
71
+ );
72
+ }
73
+ return <div />;
74
+ };
75
+
76
+ export const getSummary = entry => {
77
+ if (entry.summary) {
78
+ return (
79
+ <Grid.Row className="top-padded">
80
+ <Grid.Col md={1}>
81
+ <strong>Summary</strong>
82
+ </Grid.Col>
83
+ <Grid.Col md={8} className="pre-wrap">
84
+ {entry.summary}
85
+ </Grid.Col>
86
+ </Grid.Row>
87
+ );
88
+ }
89
+ return <div />;
90
+ };
91
+
92
+ export const getTags = entry => {
93
+ if (entry.tags) {
94
+ return (
95
+ <Grid.Row className="top-padded">
96
+ <Grid.Col md={1}>
97
+ <strong>Tags</strong>
98
+ </Grid.Col>
99
+ <Grid.Col md={8}>{tagInfo(entry.tags)}</Grid.Col>
100
+ </Grid.Row>
101
+ );
102
+ }
103
+ return <div />;
104
+ };
105
+
106
+ export const getExternals = entry => {
107
+ if (entry.detail && entry.detail.external) {
108
+ return entry.detail.external.map(attr => {
109
+ const key = itemIteratorId(entry, attr);
110
+ return (
111
+ <Grid.Row className="top-padded" key={key}>
112
+ <Grid.Col md={1}>
113
+ <strong>Links</strong>
114
+ </Grid.Col>
115
+ <Grid.Col md={8}>
116
+ <a href={attr.url}>{attr.title}</a>
117
+ </Grid.Col>
118
+ </Grid.Row>
119
+ );
120
+ });
121
+ }
122
+ return <div />;
123
+ };
124
+
125
+ export const getRemediations = entry => {
126
+ if (entry.detail && entry.detail.remediations) {
127
+ return entry.detail.remediations.map(attr => {
128
+ const key = itemIteratorId(entry, attr);
129
+ if (attr.type === 'hint') {
130
+ return (
131
+ <Grid.Row className="top-padded" key={key}>
132
+ <Grid.Col md={1}>
133
+ <strong>Hint</strong>
134
+ </Grid.Col>
135
+ <Grid.Col md={8}>{attr.context}</Grid.Col>
136
+ </Grid.Row>
137
+ );
138
+ }
139
+ if (attr.type === 'command') {
140
+ return (
141
+ <Grid.Row className="top-padded" key={key}>
142
+ <Grid.Col md={1}>
143
+ <strong>Command</strong>
144
+ </Grid.Col>
145
+ <Grid.Col md={8}>
146
+ <code>{attr.context.join(' ')}</code>
147
+ </Grid.Col>
148
+ </Grid.Row>
149
+ );
150
+ }
151
+
152
+ return <div />;
153
+ });
154
+ }
155
+ return <div />;
28
156
  };
@@ -1,26 +1,39 @@
1
- import React from 'react';
1
+ import React, { useState } from 'react';
2
2
  import { ListView } from 'patternfly-react';
3
3
  import PropTypes from 'prop-types';
4
4
 
5
+ import Pagination from 'foremanReact/components/Pagination/PaginationWrapper';
6
+ import { useForemanSettings } from 'foremanReact/Root/Context/ForemanContext';
7
+
5
8
  import PreupgradeReportEntry from './components/PreupgradeReportEntry';
9
+ import { entriesPage } from '../PreupgradeReports/PreupgradeReportsHelpers';
6
10
 
7
- const PreupgradeReportsList = ({ preupgradeReports }) => {
8
- const flatEntries = preupgradeReports.reduce(
9
- (memo, report) => [...memo, ...report.entries],
10
- []
11
- );
11
+ const PreupgradeReportsList = ({ allEntries }) => {
12
+ const { perPage, perPageOptions } = useForemanSettings();
13
+ const [pagination, setPagination] = useState({
14
+ page: 1,
15
+ perPage,
16
+ perPageOptions,
17
+ });
12
18
 
13
19
  return (
14
20
  <ListView>
15
- {flatEntries.map((entry, idx) => (
21
+ {entriesPage(allEntries, pagination).map((entry, idx) => (
16
22
  <PreupgradeReportEntry entry={entry} key={idx} />
17
23
  ))}
24
+ <Pagination
25
+ viewType="list"
26
+ itemCount={allEntries.length}
27
+ pagination={pagination}
28
+ onChange={newPage => setPagination({ ...pagination, ...newPage })}
29
+ dropdownButtonId="preupgrade-report-entries-pagination-dropdown"
30
+ />
18
31
  </ListView>
19
32
  );
20
33
  };
21
34
 
22
35
  PreupgradeReportsList.propTypes = {
23
- preupgradeReports: PropTypes.array.isRequired,
36
+ allEntries: PropTypes.array.isRequired,
24
37
  };
25
38
 
26
39
  export default PreupgradeReportsList;
data/webpack/csrf.js ADDED
@@ -0,0 +1,4 @@
1
+ export default () => {
2
+ const tokenMeta = document.getElementsByName('csrf-token')[0];
3
+ return tokenMeta && tokenMeta.content;
4
+ };
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_leapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Foreman Leapp team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-16 00:00:00.000000000 Z
11
+ date: 2020-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: foreman_remote_execution
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: foreman_ansible
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rdoc
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -107,37 +121,45 @@ files:
107
121
  - test/test_plugin_helper.rb
108
122
  - test/unit/actions/preupgrade_job_test.rb
109
123
  - test/unit/helpers/job_helper_test.rb
124
+ - webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js
110
125
  - webpack/__mocks__/foremanReact/common/I18n.js
126
+ - webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js
111
127
  - webpack/__mocks__/foremanReact/components/common/MessageBox.js
112
128
  - webpack/components/PreupgradeReports/PreupgradeReports.js
113
129
  - webpack/components/PreupgradeReports/PreupgradeReportsActions.js
130
+ - webpack/components/PreupgradeReports/PreupgradeReportsHelpers.js
114
131
  - webpack/components/PreupgradeReports/PreupgradeReportsReducer.js
115
132
  - webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js
116
133
  - webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js
117
134
  - webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js
135
+ - webpack/components/PreupgradeReports/__tests__/PreupgradeReportsHelpers.test.js
118
136
  - webpack/components/PreupgradeReports/__tests__/PreupgradeReportsReducer.test.js
119
137
  - webpack/components/PreupgradeReports/__tests__/PreupgradeReportsSelectors.test.js
120
138
  - webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReports.test.js.snap
139
+ - webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsHelpers.test.js.snap
121
140
  - webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap
122
141
  - webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap
142
+ - webpack/components/PreupgradeReports/components/FixAllButton.js
143
+ - webpack/components/PreupgradeReports/components/FixAllButton.test.js
144
+ - webpack/components/PreupgradeReports/components/__snapshots__/FixAllButton.test.js.snap
123
145
  - webpack/components/PreupgradeReports/index.js
124
146
  - webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js
125
147
  - webpack/components/PreupgradeReportsList/__tests__/__snapshots__/PreupgradeReportsList.test.js.snap
126
148
  - webpack/components/PreupgradeReportsList/components/EmptyInfoItem.js
127
149
  - webpack/components/PreupgradeReportsList/components/InfoItem.js
128
150
  - webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js
129
- - webpack/components/PreupgradeReportsList/components/StringInfoItem.js
130
151
  - webpack/components/PreupgradeReportsList/components/__tests__/EmptyInfoItem.test.js
152
+ - webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.fixtures.js
131
153
  - webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js
132
- - webpack/components/PreupgradeReportsList/components/__tests__/StringInfoItem.test.js
133
154
  - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/EmptyInfoItem.test.js.snap
134
155
  - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap
135
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/StringInfoItem.test.js.snap
136
156
  - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap
137
157
  - webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js
158
+ - webpack/components/PreupgradeReportsList/components/foreman_leapp.scss
138
159
  - webpack/components/PreupgradeReportsList/components/helpers.js
139
160
  - webpack/components/PreupgradeReportsList/index.js
140
161
  - webpack/consts.js
162
+ - webpack/csrf.js
141
163
  - webpack/index.js
142
164
  - webpack/reducer.js
143
165
  - webpack/testSetup.js
@@ -1,49 +0,0 @@
1
- import React from 'react';
2
- import EllipsisWithTooltip from 'react-ellipsis-with-tooltip';
3
- import PropTypes from 'prop-types';
4
- import { translate as __ } from 'foremanReact/common/I18n';
5
-
6
- import InfoItem from './InfoItem';
7
- import { itemIteratorId } from './helpers';
8
-
9
- const StringInfoItem = ({
10
- entry,
11
- attr,
12
- tooltipText,
13
- translate,
14
- mapAttr,
15
- elipsed,
16
- }) => {
17
- const inner = (
18
- <span>{translate ? __(mapAttr(entry, attr)) : mapAttr(entry, attr)}</span>
19
- );
20
- const innerContent = elipsed ? (
21
- <EllipsisWithTooltip placement="top">{inner}</EllipsisWithTooltip>
22
- ) : (
23
- inner
24
- );
25
-
26
- return (
27
- <InfoItem itemId={itemIteratorId(entry, attr)} tooltipText={tooltipText}>
28
- {innerContent}
29
- </InfoItem>
30
- );
31
- };
32
-
33
- StringInfoItem.propTypes = {
34
- entry: PropTypes.object.isRequired,
35
- attr: PropTypes.string.isRequired,
36
- tooltipText: PropTypes.string,
37
- translate: PropTypes.bool,
38
- mapAttr: PropTypes.func,
39
- elipsed: PropTypes.bool,
40
- };
41
-
42
- StringInfoItem.defaultProps = {
43
- translate: false,
44
- mapAttr: (entry, attr) => entry[attr],
45
- elipsed: false,
46
- tooltipText: undefined,
47
- };
48
-
49
- export default StringInfoItem;
@@ -1,13 +0,0 @@
1
- import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
-
3
- import StringInfoItem from '../StringInfoItem';
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('StringInfoItem', () =>
13
- testComponentSnapshotsWithFixtures(StringInfoItem, fixtures));
@@ -1,12 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`StringInfoItem should render 1`] = `
4
- <InfoItem
5
- itemId="5-7-title"
6
- tooltipText=""
7
- >
8
- <span>
9
- no title
10
- </span>
11
- </InfoItem>
12
- `;