foreman_leapp 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/foreman_leapp/version.rb +1 -1
- data/package.json +44 -0
- data/webpack/__mocks__/foremanReact/common/I18n.js +1 -0
- data/webpack/__mocks__/foremanReact/components/common/MessageBox.js +2 -0
- data/webpack/components/PreupgradeReports/PreupgradeReports.js +32 -0
- data/webpack/components/PreupgradeReports/PreupgradeReportsActions.js +30 -0
- data/webpack/components/PreupgradeReports/PreupgradeReportsReducer.js +35 -0
- data/webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js +7 -0
- data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js +16 -0
- data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js +29 -0
- data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsReducer.test.js +44 -0
- data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsSelectors.test.js +28 -0
- data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReports.test.js.snap +66 -0
- data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap +63 -0
- data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap +41 -0
- data/webpack/components/PreupgradeReports/index.js +41 -0
- data/webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js +14 -0
- data/webpack/components/PreupgradeReportsList/__tests__/__snapshots__/PreupgradeReportsList.test.js.snap +44 -0
- data/webpack/components/PreupgradeReportsList/components/EmptyInfoItem.js +16 -0
- data/webpack/components/PreupgradeReportsList/components/InfoItem.js +34 -0
- data/webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js +20 -0
- data/webpack/components/PreupgradeReportsList/components/StringInfoItem.js +49 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/EmptyInfoItem.test.js +13 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js +12 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/StringInfoItem.test.js +13 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/EmptyInfoItem.test.js.snap +8 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap +53 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/StringInfoItem.test.js.snap +12 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap +34 -0
- data/webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js +17 -0
- data/webpack/components/PreupgradeReportsList/components/helpers.js +28 -0
- data/webpack/components/PreupgradeReportsList/index.js +26 -0
- data/webpack/consts.js +3 -0
- data/webpack/index.js +13 -0
- data/webpack/reducer.js +5 -0
- data/webpack/testSetup.js +0 -0
- metadata +36 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35a96d620395ecc178b6424e6c4e40264d26412c4217ad92c442ea03ef2f070e
|
4
|
+
data.tar.gz: 6b5a4ff4992ced0d82dff4b5298eab442e611abe8db75645de6b269338cbeb97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b8cfdfe0e0097cdadebd60a0e68ad047d19181e5a8628dd783308b77043a5e09dd31f1cf0c8ee76071714c5d68aa4f52bbb75585f01035484b53a011c2d2a8c
|
7
|
+
data.tar.gz: 75fcee9f88f2b5413b3e5227f52c64e7be70be1765f08afbc6c1f7ce2288cebe44d2ff8d77a0b79d2e08d7f8cc46e866ce1b1ed063d542d1a20f9e43dde5caa8
|
data/package.json
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
{
|
2
|
+
"name": "foreman_leapp",
|
3
|
+
"version": "0.0.1",
|
4
|
+
"description": "Plugin for RHEL upgrades using Foreman.",
|
5
|
+
"main": "index.js",
|
6
|
+
"scripts": {
|
7
|
+
"lint": "tfm-lint --plugin -d /webpack",
|
8
|
+
"link-leapp-js": "./script/link_leapp_js.sh",
|
9
|
+
"test": "tfm-test --plugin",
|
10
|
+
"test:watch": "tfm-test --plugin --watchAll",
|
11
|
+
"test:current": "tfm-test --plugin --watch",
|
12
|
+
"publish-coverage": "tfm-publish-coverage",
|
13
|
+
"stories": "tfm-stories --plugin",
|
14
|
+
"stories:build": "tfm-build-stories --plugin",
|
15
|
+
"stories:deploy": "surge --project .storybook-dist"
|
16
|
+
},
|
17
|
+
"repository": {
|
18
|
+
"type": "git",
|
19
|
+
"url": "git+https://github.com/oamg/foreman_leapp.git"
|
20
|
+
},
|
21
|
+
"author": "LEAPP team + The Foreman team",
|
22
|
+
"license": "GPL-3.0",
|
23
|
+
"bugs": {
|
24
|
+
"url": "http://projects.theforeman.org/projects/foreman_leapp/issues"
|
25
|
+
},
|
26
|
+
"homepage": "https://github.com/oamg/foreman_leapp",
|
27
|
+
"peerDependencies": {
|
28
|
+
"@theforeman/vendor": ">= 4.2.1"
|
29
|
+
},
|
30
|
+
"devDependencies": {
|
31
|
+
"@babel/core": "^7.7.0",
|
32
|
+
"@theforeman/builder": "^4.2.1",
|
33
|
+
"@theforeman/eslint-plugin-foreman": "4.2.1",
|
34
|
+
"@theforeman/stories": "^4.2.1",
|
35
|
+
"@theforeman/vendor-dev": "^4.2.1",
|
36
|
+
"@theforeman/test": "^4.2.1",
|
37
|
+
"babel-eslint": "^10.0.0",
|
38
|
+
"eslint": "^6.8.0",
|
39
|
+
"prettier": "^1.19.1"
|
40
|
+
},
|
41
|
+
"dependencies": {
|
42
|
+
"react-ellipsis-with-tooltip": "^1.0.8"
|
43
|
+
}
|
44
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export const translate = () => jest.fn();
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import MessageBox from 'foremanReact/components/common/MessageBox';
|
3
|
+
import { LoadingState } from 'patternfly-react';
|
4
|
+
import PropTypes from 'prop-types';
|
5
|
+
|
6
|
+
import PreupgradeReportsList from '../PreupgradeReportsList';
|
7
|
+
|
8
|
+
const PreupgradeReports = ({ preupgradeReports, loading, error }) => {
|
9
|
+
if (Object.keys(error).length > 0) {
|
10
|
+
return (
|
11
|
+
<MessageBox
|
12
|
+
key="preupgrade-reports-error"
|
13
|
+
icontype="error-circle-o"
|
14
|
+
msg={`Could not retrieve data: ${error.statusText} - ${error.errorMsg}`}
|
15
|
+
/>
|
16
|
+
);
|
17
|
+
}
|
18
|
+
|
19
|
+
return (
|
20
|
+
<LoadingState loading={loading}>
|
21
|
+
<PreupgradeReportsList preupgradeReports={preupgradeReports} />
|
22
|
+
</LoadingState>
|
23
|
+
);
|
24
|
+
};
|
25
|
+
|
26
|
+
PreupgradeReports.propTypes = {
|
27
|
+
preupgradeReports: PropTypes.array.isRequired,
|
28
|
+
loading: PropTypes.bool.isRequired,
|
29
|
+
error: PropTypes.object.isRequired,
|
30
|
+
};
|
31
|
+
|
32
|
+
export default PreupgradeReports;
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import api from 'foremanReact/API';
|
2
|
+
import { deepPropsToCamelCase } from 'foremanReact/common/helpers';
|
3
|
+
|
4
|
+
import {
|
5
|
+
PREUPGRADE_REPORTS_REQUEST,
|
6
|
+
PREUPGRADE_REPORTS_SUCCESS,
|
7
|
+
PREUPGRADE_REPORTS_FAILURE,
|
8
|
+
} from '../../consts';
|
9
|
+
|
10
|
+
export const getPreupgradeReports = url => async dispatch => {
|
11
|
+
dispatch({ type: PREUPGRADE_REPORTS_REQUEST });
|
12
|
+
|
13
|
+
try {
|
14
|
+
const { data } = await api.get(url);
|
15
|
+
return dispatch({
|
16
|
+
type: PREUPGRADE_REPORTS_SUCCESS,
|
17
|
+
payload: deepPropsToCamelCase(data),
|
18
|
+
});
|
19
|
+
} catch (error) {
|
20
|
+
return dispatch(errorHandler(PREUPGRADE_REPORTS_FAILURE, error));
|
21
|
+
}
|
22
|
+
};
|
23
|
+
|
24
|
+
const errorHandler = (msg, err) => {
|
25
|
+
const error = {
|
26
|
+
errorMsg: 'Failed to fetch preupgrade reports from server.',
|
27
|
+
statusText: err.response.statusText,
|
28
|
+
};
|
29
|
+
return { type: msg, payload: { error } };
|
30
|
+
};
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import Immutable from 'seamless-immutable';
|
2
|
+
|
3
|
+
import {
|
4
|
+
PREUPGRADE_REPORTS_REQUEST,
|
5
|
+
PREUPGRADE_REPORTS_SUCCESS,
|
6
|
+
PREUPGRADE_REPORTS_FAILURE,
|
7
|
+
} from '../../consts';
|
8
|
+
|
9
|
+
export const initialState = Immutable({
|
10
|
+
loadingPreupgradeReports: false,
|
11
|
+
preupgradeReports: [],
|
12
|
+
error: {},
|
13
|
+
});
|
14
|
+
|
15
|
+
const reducer = (state = initialState, action) => {
|
16
|
+
const { payload } = action;
|
17
|
+
switch (action.type) {
|
18
|
+
case PREUPGRADE_REPORTS_REQUEST:
|
19
|
+
return state.set('loadingPreupgradeReports', true);
|
20
|
+
case PREUPGRADE_REPORTS_SUCCESS:
|
21
|
+
return state.merge({
|
22
|
+
loadingPreupgradeReports: false,
|
23
|
+
preupgradeReports: payload.results,
|
24
|
+
});
|
25
|
+
case PREUPGRADE_REPORTS_FAILURE:
|
26
|
+
return state.merge({
|
27
|
+
error: payload.error,
|
28
|
+
loadingPreupgradeReports: false,
|
29
|
+
});
|
30
|
+
default:
|
31
|
+
return state;
|
32
|
+
}
|
33
|
+
};
|
34
|
+
|
35
|
+
export default reducer;
|
@@ -0,0 +1,7 @@
|
|
1
|
+
export const selectPreupgrade = state => state.foremanLeapp.preupgrade;
|
2
|
+
|
3
|
+
export const selectPreupgradeReports = state =>
|
4
|
+
selectPreupgrade(state).preupgradeReports;
|
5
|
+
export const selectLoadingPreupgradeReports = state =>
|
6
|
+
selectPreupgrade(state).loadingPreupgradeReports;
|
7
|
+
export const selectError = state => selectPreupgrade(state).error;
|
@@ -0,0 +1,16 @@
|
|
1
|
+
export const preupgradeReports = [
|
2
|
+
{
|
3
|
+
hostId: 5,
|
4
|
+
entries: [
|
5
|
+
{ title: 'Fix me!', severity: 'Too severe to talk about' },
|
6
|
+
{ title: 'I am broken too', severity: 'medium' },
|
7
|
+
],
|
8
|
+
},
|
9
|
+
{
|
10
|
+
hostId: 6,
|
11
|
+
entries: [
|
12
|
+
{ title: 'Octocat is not happy', severity: 'high' },
|
13
|
+
{ title: 'Not enough credits', severity: 'low' },
|
14
|
+
],
|
15
|
+
},
|
16
|
+
];
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
2
|
+
|
3
|
+
import PreupgradeReports from '../PreupgradeReports';
|
4
|
+
|
5
|
+
import { preupgradeReports } from './PreupgradeReports.fixtures';
|
6
|
+
|
7
|
+
const fixtures = {
|
8
|
+
'should render when loaded': {
|
9
|
+
loading: false,
|
10
|
+
error: {},
|
11
|
+
preupgradeReports,
|
12
|
+
},
|
13
|
+
'should render when loading': {
|
14
|
+
loading: true,
|
15
|
+
error: {},
|
16
|
+
preupgradeReports: [],
|
17
|
+
},
|
18
|
+
'should render error': {
|
19
|
+
loading: false,
|
20
|
+
error: {
|
21
|
+
statusText: 'Internal server error',
|
22
|
+
errorMsg: 'Well, this is embarassing',
|
23
|
+
},
|
24
|
+
preupgradeReports: [],
|
25
|
+
},
|
26
|
+
};
|
27
|
+
|
28
|
+
describe('PreupgradeReports', () =>
|
29
|
+
testComponentSnapshotsWithFixtures(PreupgradeReports, fixtures));
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import { testReducerSnapshotWithFixtures } from '@theforeman/test';
|
2
|
+
|
3
|
+
import reducer, { initialState } from '../PreupgradeReportsReducer';
|
4
|
+
|
5
|
+
import {
|
6
|
+
PREUPGRADE_REPORTS_REQUEST,
|
7
|
+
PREUPGRADE_REPORTS_SUCCESS,
|
8
|
+
PREUPGRADE_REPORTS_FAILURE,
|
9
|
+
} from '../../../consts';
|
10
|
+
|
11
|
+
import { preupgradeReports } from './PreupgradeReports.fixtures';
|
12
|
+
|
13
|
+
const fixtures = {
|
14
|
+
'should return initial state': {
|
15
|
+
state: initialState,
|
16
|
+
action: {
|
17
|
+
type: undefined,
|
18
|
+
payload: [],
|
19
|
+
},
|
20
|
+
},
|
21
|
+
'should start loading reports on request': {
|
22
|
+
state: initialState,
|
23
|
+
action: {
|
24
|
+
type: PREUPGRADE_REPORTS_REQUEST,
|
25
|
+
},
|
26
|
+
},
|
27
|
+
'should stop loading on reports success': {
|
28
|
+
state: initialState.set('loadingPreupgradeReports', true),
|
29
|
+
action: {
|
30
|
+
type: PREUPGRADE_REPORTS_SUCCESS,
|
31
|
+
payload: { results: preupgradeReports },
|
32
|
+
},
|
33
|
+
},
|
34
|
+
'should show error on request failure': {
|
35
|
+
state: initialState.set('loadingPreupgradeReports', true),
|
36
|
+
action: {
|
37
|
+
type: PREUPGRADE_REPORTS_FAILURE,
|
38
|
+
payload: { error: { errorMsg: 'This is error', statusText: 'Not good' } },
|
39
|
+
},
|
40
|
+
},
|
41
|
+
};
|
42
|
+
|
43
|
+
describe('PreupgradeReportsReducer', () =>
|
44
|
+
testReducerSnapshotWithFixtures(reducer, fixtures));
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import { testSelectorsSnapshotWithFixtures } from '@theforeman/test';
|
2
|
+
|
3
|
+
import { preupgradeReports } from './PreupgradeReports.fixtures';
|
4
|
+
|
5
|
+
import {
|
6
|
+
selectPreupgradeReports,
|
7
|
+
selectLoadingPreupgradeReports,
|
8
|
+
selectError,
|
9
|
+
} from '../PreupgradeReportsSelectors';
|
10
|
+
|
11
|
+
const state = {
|
12
|
+
foremanLeapp: {
|
13
|
+
preupgrade: {
|
14
|
+
preupgradeReports,
|
15
|
+
loadingPreupgradeReports: false,
|
16
|
+
error: { errorMsg: 'Error', statusText: 'Status text' },
|
17
|
+
},
|
18
|
+
},
|
19
|
+
};
|
20
|
+
|
21
|
+
const fixtures = {
|
22
|
+
'should return preupgrade reports': () => selectPreupgradeReports(state),
|
23
|
+
'should return loading state': () => selectLoadingPreupgradeReports(state),
|
24
|
+
'should return error': () => selectError(state),
|
25
|
+
};
|
26
|
+
|
27
|
+
describe('PreupgradeReportsSelectors', () =>
|
28
|
+
testSelectorsSnapshotWithFixtures(fixtures));
|
data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReports.test.js.snap
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`PreupgradeReports should render error 1`] = `
|
4
|
+
<MessageBox
|
5
|
+
icontype="error-circle-o"
|
6
|
+
key="preupgrade-reports-error"
|
7
|
+
msg="Could not retrieve data: Internal server error - Well, this is embarassing"
|
8
|
+
/>
|
9
|
+
`;
|
10
|
+
|
11
|
+
exports[`PreupgradeReports should render when loaded 1`] = `
|
12
|
+
<LoadingState
|
13
|
+
additionalClasses=""
|
14
|
+
loading={false}
|
15
|
+
loadingText="Loading"
|
16
|
+
size="lg"
|
17
|
+
timeout={300}
|
18
|
+
>
|
19
|
+
<PreupgradeReportsList
|
20
|
+
preupgradeReports={
|
21
|
+
Array [
|
22
|
+
Object {
|
23
|
+
"entries": Array [
|
24
|
+
Object {
|
25
|
+
"severity": "Too severe to talk about",
|
26
|
+
"title": "Fix me!",
|
27
|
+
},
|
28
|
+
Object {
|
29
|
+
"severity": "medium",
|
30
|
+
"title": "I am broken too",
|
31
|
+
},
|
32
|
+
],
|
33
|
+
"hostId": 5,
|
34
|
+
},
|
35
|
+
Object {
|
36
|
+
"entries": Array [
|
37
|
+
Object {
|
38
|
+
"severity": "high",
|
39
|
+
"title": "Octocat is not happy",
|
40
|
+
},
|
41
|
+
Object {
|
42
|
+
"severity": "low",
|
43
|
+
"title": "Not enough credits",
|
44
|
+
},
|
45
|
+
],
|
46
|
+
"hostId": 6,
|
47
|
+
},
|
48
|
+
]
|
49
|
+
}
|
50
|
+
/>
|
51
|
+
</LoadingState>
|
52
|
+
`;
|
53
|
+
|
54
|
+
exports[`PreupgradeReports should render when loading 1`] = `
|
55
|
+
<LoadingState
|
56
|
+
additionalClasses=""
|
57
|
+
loading={true}
|
58
|
+
loadingText="Loading"
|
59
|
+
size="lg"
|
60
|
+
timeout={300}
|
61
|
+
>
|
62
|
+
<PreupgradeReportsList
|
63
|
+
preupgradeReports={Array []}
|
64
|
+
/>
|
65
|
+
</LoadingState>
|
66
|
+
`;
|
@@ -0,0 +1,63 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`PreupgradeReportsReducer should return initial state 1`] = `
|
4
|
+
Object {
|
5
|
+
"error": Object {},
|
6
|
+
"loadingPreupgradeReports": false,
|
7
|
+
"preupgradeReports": Array [],
|
8
|
+
}
|
9
|
+
`;
|
10
|
+
|
11
|
+
exports[`PreupgradeReportsReducer should show error on request failure 1`] = `
|
12
|
+
Object {
|
13
|
+
"error": Object {
|
14
|
+
"errorMsg": "This is error",
|
15
|
+
"statusText": "Not good",
|
16
|
+
},
|
17
|
+
"loadingPreupgradeReports": false,
|
18
|
+
"preupgradeReports": Array [],
|
19
|
+
}
|
20
|
+
`;
|
21
|
+
|
22
|
+
exports[`PreupgradeReportsReducer should start loading reports on request 1`] = `
|
23
|
+
Object {
|
24
|
+
"error": Object {},
|
25
|
+
"loadingPreupgradeReports": true,
|
26
|
+
"preupgradeReports": Array [],
|
27
|
+
}
|
28
|
+
`;
|
29
|
+
|
30
|
+
exports[`PreupgradeReportsReducer should stop loading on reports success 1`] = `
|
31
|
+
Object {
|
32
|
+
"error": Object {},
|
33
|
+
"loadingPreupgradeReports": false,
|
34
|
+
"preupgradeReports": Array [
|
35
|
+
Object {
|
36
|
+
"entries": Array [
|
37
|
+
Object {
|
38
|
+
"severity": "Too severe to talk about",
|
39
|
+
"title": "Fix me!",
|
40
|
+
},
|
41
|
+
Object {
|
42
|
+
"severity": "medium",
|
43
|
+
"title": "I am broken too",
|
44
|
+
},
|
45
|
+
],
|
46
|
+
"hostId": 5,
|
47
|
+
},
|
48
|
+
Object {
|
49
|
+
"entries": Array [
|
50
|
+
Object {
|
51
|
+
"severity": "high",
|
52
|
+
"title": "Octocat is not happy",
|
53
|
+
},
|
54
|
+
Object {
|
55
|
+
"severity": "low",
|
56
|
+
"title": "Not enough credits",
|
57
|
+
},
|
58
|
+
],
|
59
|
+
"hostId": 6,
|
60
|
+
},
|
61
|
+
],
|
62
|
+
}
|
63
|
+
`;
|
@@ -0,0 +1,41 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`PreupgradeReportsSelectors should return error 1`] = `
|
4
|
+
Object {
|
5
|
+
"errorMsg": "Error",
|
6
|
+
"statusText": "Status text",
|
7
|
+
}
|
8
|
+
`;
|
9
|
+
|
10
|
+
exports[`PreupgradeReportsSelectors should return loading state 1`] = `false`;
|
11
|
+
|
12
|
+
exports[`PreupgradeReportsSelectors should return preupgrade reports 1`] = `
|
13
|
+
Array [
|
14
|
+
Object {
|
15
|
+
"entries": Array [
|
16
|
+
Object {
|
17
|
+
"severity": "Too severe to talk about",
|
18
|
+
"title": "Fix me!",
|
19
|
+
},
|
20
|
+
Object {
|
21
|
+
"severity": "medium",
|
22
|
+
"title": "I am broken too",
|
23
|
+
},
|
24
|
+
],
|
25
|
+
"hostId": 5,
|
26
|
+
},
|
27
|
+
Object {
|
28
|
+
"entries": Array [
|
29
|
+
Object {
|
30
|
+
"severity": "high",
|
31
|
+
"title": "Octocat is not happy",
|
32
|
+
},
|
33
|
+
Object {
|
34
|
+
"severity": "low",
|
35
|
+
"title": "Not enough credits",
|
36
|
+
},
|
37
|
+
],
|
38
|
+
"hostId": 6,
|
39
|
+
},
|
40
|
+
]
|
41
|
+
`;
|
@@ -0,0 +1,41 @@
|
|
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 {
|
8
|
+
selectPreupgradeReports,
|
9
|
+
selectLoadingPreupgradeReports,
|
10
|
+
selectError,
|
11
|
+
} from './PreupgradeReportsSelectors';
|
12
|
+
|
13
|
+
import { getPreupgradeReports } from './PreupgradeReportsActions';
|
14
|
+
|
15
|
+
const WrappedPreupgradeReports = ({ url }) => {
|
16
|
+
const loading = useSelector(state => selectLoadingPreupgradeReports(state));
|
17
|
+
const preupgradeReports = useSelector(state =>
|
18
|
+
selectPreupgradeReports(state)
|
19
|
+
);
|
20
|
+
const error = useSelector(state => selectError(state));
|
21
|
+
|
22
|
+
const dispatch = useDispatch();
|
23
|
+
|
24
|
+
useEffect(() => {
|
25
|
+
dispatch(getPreupgradeReports(url));
|
26
|
+
}, [url]);
|
27
|
+
|
28
|
+
return (
|
29
|
+
<PreupgradeReports
|
30
|
+
preupgradeReports={preupgradeReports}
|
31
|
+
error={error}
|
32
|
+
loading={loading}
|
33
|
+
/>
|
34
|
+
);
|
35
|
+
};
|
36
|
+
|
37
|
+
WrappedPreupgradeReports.propTypes = {
|
38
|
+
url: PropTypes.string.isRequired,
|
39
|
+
};
|
40
|
+
|
41
|
+
export default WrappedPreupgradeReports;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
2
|
+
|
3
|
+
import PreupgradeReportsList from '../index';
|
4
|
+
|
5
|
+
import { preupgradeReports } from '../../PreupgradeReports/__tests__/PreupgradeReports.fixtures';
|
6
|
+
|
7
|
+
const fixtures = {
|
8
|
+
'should render': {
|
9
|
+
preupgradeReports,
|
10
|
+
},
|
11
|
+
};
|
12
|
+
|
13
|
+
describe('PreupgradeReportsList', () =>
|
14
|
+
testComponentSnapshotsWithFixtures(PreupgradeReportsList, fixtures));
|
@@ -0,0 +1,44 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`PreupgradeReportsList should render 1`] = `
|
4
|
+
<ListView
|
5
|
+
className=""
|
6
|
+
>
|
7
|
+
<PreupgradeReportEntry
|
8
|
+
entry={
|
9
|
+
Object {
|
10
|
+
"severity": "Too severe to talk about",
|
11
|
+
"title": "Fix me!",
|
12
|
+
}
|
13
|
+
}
|
14
|
+
key="0"
|
15
|
+
/>
|
16
|
+
<PreupgradeReportEntry
|
17
|
+
entry={
|
18
|
+
Object {
|
19
|
+
"severity": "medium",
|
20
|
+
"title": "I am broken too",
|
21
|
+
}
|
22
|
+
}
|
23
|
+
key="1"
|
24
|
+
/>
|
25
|
+
<PreupgradeReportEntry
|
26
|
+
entry={
|
27
|
+
Object {
|
28
|
+
"severity": "high",
|
29
|
+
"title": "Octocat is not happy",
|
30
|
+
}
|
31
|
+
}
|
32
|
+
key="2"
|
33
|
+
/>
|
34
|
+
<PreupgradeReportEntry
|
35
|
+
entry={
|
36
|
+
Object {
|
37
|
+
"severity": "low",
|
38
|
+
"title": "Not enough credits",
|
39
|
+
}
|
40
|
+
}
|
41
|
+
key="3"
|
42
|
+
/>
|
43
|
+
</ListView>
|
44
|
+
`;
|
@@ -0,0 +1,16 @@
|
|
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;
|
@@ -0,0 +1,34 @@
|
|
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} className="additional-info-wide">
|
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;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { ListView } from 'patternfly-react';
|
3
|
+
import PropTypes from 'prop-types';
|
4
|
+
|
5
|
+
import { additionalInfo } from './helpers';
|
6
|
+
|
7
|
+
const PreupgradeReportEntry = ({ entry }) => (
|
8
|
+
<ListView.Item
|
9
|
+
key={entry.id}
|
10
|
+
className="listViewItem--listItemVariants"
|
11
|
+
stacked
|
12
|
+
additionalInfo={additionalInfo(entry)}
|
13
|
+
/>
|
14
|
+
);
|
15
|
+
|
16
|
+
PreupgradeReportEntry.propTypes = {
|
17
|
+
entry: PropTypes.object.isRequired,
|
18
|
+
};
|
19
|
+
|
20
|
+
export default PreupgradeReportEntry;
|
@@ -0,0 +1,49 @@
|
|
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;
|
@@ -0,0 +1,13 @@
|
|
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));
|
data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js
ADDED
@@ -0,0 +1,12 @@
|
|
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
|
+
},
|
9
|
+
};
|
10
|
+
|
11
|
+
describe('PreupgradeReportEntry', () =>
|
12
|
+
testComponentSnapshotsWithFixtures(PreupgradeReportEntry, fixtures));
|
@@ -0,0 +1,13 @@
|
|
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));
|
@@ -0,0 +1,53 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`PreupgradeReportEntry should render 1`] = `
|
4
|
+
<ListViewItem
|
5
|
+
actions={null}
|
6
|
+
additionalInfo={
|
7
|
+
Array [
|
8
|
+
<StringInfoItem
|
9
|
+
attr="title"
|
10
|
+
elipsed={false}
|
11
|
+
entry={
|
12
|
+
Object {
|
13
|
+
"id": 5,
|
14
|
+
"preupgradeReportId": 7,
|
15
|
+
"severity": "low",
|
16
|
+
"title": "no title",
|
17
|
+
}
|
18
|
+
}
|
19
|
+
mapAttr={[Function]}
|
20
|
+
translate={false}
|
21
|
+
/>,
|
22
|
+
<StringInfoItem
|
23
|
+
attr="severity"
|
24
|
+
elipsed={false}
|
25
|
+
entry={
|
26
|
+
Object {
|
27
|
+
"id": 5,
|
28
|
+
"preupgradeReportId": 7,
|
29
|
+
"severity": "low",
|
30
|
+
"title": "no title",
|
31
|
+
}
|
32
|
+
}
|
33
|
+
mapAttr={[Function]}
|
34
|
+
translate={false}
|
35
|
+
/>,
|
36
|
+
]
|
37
|
+
}
|
38
|
+
checkboxInput={null}
|
39
|
+
className="listViewItem--listItemVariants"
|
40
|
+
compoundExpand={false}
|
41
|
+
compoundExpanded={false}
|
42
|
+
description={null}
|
43
|
+
heading={null}
|
44
|
+
hideCloseIcon={false}
|
45
|
+
initExpanded={false}
|
46
|
+
key="5"
|
47
|
+
leftContent={null}
|
48
|
+
onCloseCompoundExpand={[Function]}
|
49
|
+
onExpand={[Function]}
|
50
|
+
onExpandClose={[Function]}
|
51
|
+
stacked={true}
|
52
|
+
/>
|
53
|
+
`;
|
@@ -0,0 +1,34 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`PreupgradeReportList/helpers should return additional info 1`] = `
|
4
|
+
Array [
|
5
|
+
<StringInfoItem
|
6
|
+
attr="title"
|
7
|
+
elipsed={false}
|
8
|
+
entry={
|
9
|
+
Object {
|
10
|
+
"id": 5,
|
11
|
+
"preupgradeReportId": 6,
|
12
|
+
"severity": "low",
|
13
|
+
"title": "This is title",
|
14
|
+
}
|
15
|
+
}
|
16
|
+
mapAttr={[Function]}
|
17
|
+
translate={false}
|
18
|
+
/>,
|
19
|
+
<StringInfoItem
|
20
|
+
attr="severity"
|
21
|
+
elipsed={false}
|
22
|
+
entry={
|
23
|
+
Object {
|
24
|
+
"id": 5,
|
25
|
+
"preupgradeReportId": 6,
|
26
|
+
"severity": "low",
|
27
|
+
"title": "This is title",
|
28
|
+
}
|
29
|
+
}
|
30
|
+
mapAttr={[Function]}
|
31
|
+
translate={false}
|
32
|
+
/>,
|
33
|
+
]
|
34
|
+
`;
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { testSelectorsSnapshotWithFixtures } from '@theforeman/test';
|
2
|
+
|
3
|
+
import { additionalInfo } from '../helpers';
|
4
|
+
|
5
|
+
const reportEntry = {
|
6
|
+
title: 'This is title',
|
7
|
+
severity: 'low',
|
8
|
+
id: 5,
|
9
|
+
preupgradeReportId: 6,
|
10
|
+
};
|
11
|
+
|
12
|
+
const fixtures = {
|
13
|
+
'should return additional info': () => additionalInfo(reportEntry),
|
14
|
+
};
|
15
|
+
|
16
|
+
describe('PreupgradeReportList/helpers', () =>
|
17
|
+
testSelectorsSnapshotWithFixtures(fixtures));
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
|
3
|
+
import EmptyInfoItem from './EmptyInfoItem';
|
4
|
+
import StringInfoItem from './StringInfoItem';
|
5
|
+
|
6
|
+
export const itemIteratorId = (entry, ...rest) =>
|
7
|
+
`${entry.id}-${entry.preupgradeReportId}-${rest.join('-')}`;
|
8
|
+
|
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
|
+
});
|
28
|
+
};
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { ListView } from 'patternfly-react';
|
3
|
+
import PropTypes from 'prop-types';
|
4
|
+
|
5
|
+
import PreupgradeReportEntry from './components/PreupgradeReportEntry';
|
6
|
+
|
7
|
+
const PreupgradeReportsList = ({ preupgradeReports }) => {
|
8
|
+
const flatEntries = preupgradeReports.reduce(
|
9
|
+
(memo, report) => [...memo, ...report.entries],
|
10
|
+
[]
|
11
|
+
);
|
12
|
+
|
13
|
+
return (
|
14
|
+
<ListView>
|
15
|
+
{flatEntries.map((entry, idx) => (
|
16
|
+
<PreupgradeReportEntry entry={entry} key={idx} />
|
17
|
+
))}
|
18
|
+
</ListView>
|
19
|
+
);
|
20
|
+
};
|
21
|
+
|
22
|
+
PreupgradeReportsList.propTypes = {
|
23
|
+
preupgradeReports: PropTypes.array.isRequired,
|
24
|
+
};
|
25
|
+
|
26
|
+
export default PreupgradeReportsList;
|
data/webpack/consts.js
ADDED
data/webpack/index.js
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
import componentRegistry from 'foremanReact/components/componentRegistry';
|
2
|
+
|
3
|
+
import injectReducer from 'foremanReact/redux/reducers/registerReducer';
|
4
|
+
|
5
|
+
import PreupgradeReports from './components/PreupgradeReports';
|
6
|
+
import reducer from './reducer';
|
7
|
+
|
8
|
+
componentRegistry.register({
|
9
|
+
name: 'PreupgradeReports',
|
10
|
+
type: PreupgradeReports,
|
11
|
+
});
|
12
|
+
|
13
|
+
injectReducer('foremanLeapp', reducer);
|
data/webpack/reducer.js
ADDED
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_leapp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Foreman Leapp team
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- locale/en/foreman_leapp.po
|
98
98
|
- locale/foreman_leapp.pot
|
99
99
|
- locale/gemspec.rb
|
100
|
+
- package.json
|
100
101
|
- test/factories/foreman_leapp_factories.rb
|
101
102
|
- test/functional/api/v2/preupgrade_reports_controller_test.rb
|
102
103
|
- test/functional/preupgrade_reports_controller_test.rb
|
@@ -106,6 +107,40 @@ files:
|
|
106
107
|
- test/test_plugin_helper.rb
|
107
108
|
- test/unit/actions/preupgrade_job_test.rb
|
108
109
|
- test/unit/helpers/job_helper_test.rb
|
110
|
+
- webpack/__mocks__/foremanReact/common/I18n.js
|
111
|
+
- webpack/__mocks__/foremanReact/components/common/MessageBox.js
|
112
|
+
- webpack/components/PreupgradeReports/PreupgradeReports.js
|
113
|
+
- webpack/components/PreupgradeReports/PreupgradeReportsActions.js
|
114
|
+
- webpack/components/PreupgradeReports/PreupgradeReportsReducer.js
|
115
|
+
- webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js
|
116
|
+
- webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js
|
117
|
+
- webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js
|
118
|
+
- webpack/components/PreupgradeReports/__tests__/PreupgradeReportsReducer.test.js
|
119
|
+
- webpack/components/PreupgradeReports/__tests__/PreupgradeReportsSelectors.test.js
|
120
|
+
- webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReports.test.js.snap
|
121
|
+
- webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap
|
122
|
+
- webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap
|
123
|
+
- webpack/components/PreupgradeReports/index.js
|
124
|
+
- webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js
|
125
|
+
- webpack/components/PreupgradeReportsList/__tests__/__snapshots__/PreupgradeReportsList.test.js.snap
|
126
|
+
- webpack/components/PreupgradeReportsList/components/EmptyInfoItem.js
|
127
|
+
- webpack/components/PreupgradeReportsList/components/InfoItem.js
|
128
|
+
- webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js
|
129
|
+
- webpack/components/PreupgradeReportsList/components/StringInfoItem.js
|
130
|
+
- webpack/components/PreupgradeReportsList/components/__tests__/EmptyInfoItem.test.js
|
131
|
+
- webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js
|
132
|
+
- webpack/components/PreupgradeReportsList/components/__tests__/StringInfoItem.test.js
|
133
|
+
- webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/EmptyInfoItem.test.js.snap
|
134
|
+
- webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap
|
135
|
+
- webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/StringInfoItem.test.js.snap
|
136
|
+
- webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap
|
137
|
+
- webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js
|
138
|
+
- webpack/components/PreupgradeReportsList/components/helpers.js
|
139
|
+
- webpack/components/PreupgradeReportsList/index.js
|
140
|
+
- webpack/consts.js
|
141
|
+
- webpack/index.js
|
142
|
+
- webpack/reducer.js
|
143
|
+
- webpack/testSetup.js
|
109
144
|
homepage: https://github.com/oamg/foreman_leapp
|
110
145
|
licenses:
|
111
146
|
- GPL-3.0
|