foreman_leapp 0.0.3 → 0.0.4

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 (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