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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/lib/foreman_leapp/version.rb +1 -1
  3. data/package.json +44 -0
  4. data/webpack/__mocks__/foremanReact/common/I18n.js +1 -0
  5. data/webpack/__mocks__/foremanReact/components/common/MessageBox.js +2 -0
  6. data/webpack/components/PreupgradeReports/PreupgradeReports.js +32 -0
  7. data/webpack/components/PreupgradeReports/PreupgradeReportsActions.js +30 -0
  8. data/webpack/components/PreupgradeReports/PreupgradeReportsReducer.js +35 -0
  9. data/webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js +7 -0
  10. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js +16 -0
  11. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js +29 -0
  12. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsReducer.test.js +44 -0
  13. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsSelectors.test.js +28 -0
  14. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReports.test.js.snap +66 -0
  15. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap +63 -0
  16. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap +41 -0
  17. data/webpack/components/PreupgradeReports/index.js +41 -0
  18. data/webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js +14 -0
  19. data/webpack/components/PreupgradeReportsList/__tests__/__snapshots__/PreupgradeReportsList.test.js.snap +44 -0
  20. data/webpack/components/PreupgradeReportsList/components/EmptyInfoItem.js +16 -0
  21. data/webpack/components/PreupgradeReportsList/components/InfoItem.js +34 -0
  22. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js +20 -0
  23. data/webpack/components/PreupgradeReportsList/components/StringInfoItem.js +49 -0
  24. data/webpack/components/PreupgradeReportsList/components/__tests__/EmptyInfoItem.test.js +13 -0
  25. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js +12 -0
  26. data/webpack/components/PreupgradeReportsList/components/__tests__/StringInfoItem.test.js +13 -0
  27. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/EmptyInfoItem.test.js.snap +8 -0
  28. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap +53 -0
  29. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/StringInfoItem.test.js.snap +12 -0
  30. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap +34 -0
  31. data/webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js +17 -0
  32. data/webpack/components/PreupgradeReportsList/components/helpers.js +28 -0
  33. data/webpack/components/PreupgradeReportsList/index.js +26 -0
  34. data/webpack/consts.js +3 -0
  35. data/webpack/index.js +13 -0
  36. data/webpack/reducer.js +5 -0
  37. data/webpack/testSetup.js +0 -0
  38. metadata +36 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf4504120077006e5ca8edc0f997e6ab1d8b66f990b78391c13a4ffb967c261b
4
- data.tar.gz: b3db74a5763028634de4442930773da3fac4fd8b367d675644ec3a6f5f5c7123
3
+ metadata.gz: 35a96d620395ecc178b6424e6c4e40264d26412c4217ad92c442ea03ef2f070e
4
+ data.tar.gz: 6b5a4ff4992ced0d82dff4b5298eab442e611abe8db75645de6b269338cbeb97
5
5
  SHA512:
6
- metadata.gz: ba709bb8fd26100eb0a10e782f6ba46e073d640d0b0822c6c563593934d6f0aeefda70bbfe18cbfcd0c0ba4407a3639af17d2050bb81c5a1a58e9893fa2d20bd
7
- data.tar.gz: e77c7cd51c28a2f67356e06e7bdb84b07fa721064eee9b6e0d0ece65ef7b7ac743484119cb6e3d8b77a6f34795c1f55fe83b543efe0ba5129136ad764a9ee3de
6
+ metadata.gz: 2b8cfdfe0e0097cdadebd60a0e68ad047d19181e5a8628dd783308b77043a5e09dd31f1cf0c8ee76071714c5d68aa4f52bbb75585f01035484b53a011c2d2a8c
7
+ data.tar.gz: 75fcee9f88f2b5413b3e5227f52c64e7be70be1765f08afbc6c1f7ce2288cebe44d2ff8d77a0b79d2e08d7f8cc46e866ce1b1ed063d542d1a20f9e43dde5caa8
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ForemanLeapp
4
- VERSION = '0.0.3'
4
+ VERSION = '0.0.4'
5
5
  end
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,2 @@
1
+ const MessageBox = () => jest.fn();
2
+ export default MessageBox;
@@ -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));
@@ -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));
@@ -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,8 @@
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
+ `;
@@ -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,12 @@
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
+ `;
@@ -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
@@ -0,0 +1,3 @@
1
+ export const PREUPGRADE_REPORTS_REQUEST = 'PREUPGRADE_REPORTS_REQUEST';
2
+ export const PREUPGRADE_REPORTS_SUCCESS = 'PREUPGRADE_REPORTS_SUCCESS';
3
+ export const PREUPGRADE_REPORTS_FAILURE = 'PREUPGRADE_REPORTS_FAILURE';
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);
@@ -0,0 +1,5 @@
1
+ import { combineReducers } from 'redux';
2
+
3
+ import preupgrade from './components/PreupgradeReports/PreupgradeReportsReducer';
4
+
5
+ export default combineReducers({ preupgrade });
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.3
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