foreman_rh_cloud 5.0.29 → 5.0.30
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/Gemfile.lock.gh_test +204 -168
- data/config/package-lock.json +41822 -0
- data/config/package-lock.json.gh_test +14336 -7973
- data/config/routes.rb +1 -1
- data/lib/foreman_inventory_upload/generators/tags.rb +8 -1
- data/lib/foreman_rh_cloud/engine.rb +10 -1
- data/lib/foreman_rh_cloud/version.rb +1 -1
- data/package.json +1 -1
- data/test/unit/rh_cloud_permissions_test.rb +14 -0
- data/test/unit/tags_generator_test.rb +15 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListActions.js +1 -1
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilter.js +3 -3
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/index.js +0 -2
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js +1 -1
- data/webpack/ForemanRhCloudFills.js +8 -1
- data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsActions.js +1 -1
- data/webpack/InsightsHostDetailsTab/InsightsTabActions.js +1 -1
- data/webpack/InsightsHostDetailsTab/InsightsTabConstants.js +75 -0
- data/webpack/InsightsHostDetailsTab/InsightsTotalRiskChart.js +147 -0
- data/webpack/InsightsHostDetailsTab/NewHostDetailsTab.js +0 -1
- data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +1 -0
- data/webpack/__mocks__/foremanReact/{redux/actions/toasts.js → components/ToastsList/index.js} +0 -0
- data/webpack/common/ForemanTasks/ForemanTasksActions.js +1 -1
- metadata +7 -4
- data/webpack/__mocks__/foremanReact/components/Layout/LayoutSelectors.js +0 -1
data/config/routes.rb
CHANGED
@@ -18,7 +18,7 @@ Rails.application.routes.draw do
|
|
18
18
|
namespace :insights_cloud do
|
19
19
|
resources :tasks, only: [:create]
|
20
20
|
resource :settings, only: [:show, :update]
|
21
|
-
resources :hits,
|
21
|
+
resources :hits, only: [:index] do
|
22
22
|
collection do
|
23
23
|
get 'auto_complete_search'
|
24
24
|
get 'resolutions', to: 'hits#resolutions'
|
@@ -13,7 +13,7 @@ module ForemanInventoryUpload
|
|
13
13
|
organizations +
|
14
14
|
content_data +
|
15
15
|
satellite_server_data
|
16
|
-
).reject { |key, value| value.empty? }
|
16
|
+
).reject { |key, value| value.empty? }.map { |key, value| [key, truncated_value(value)] }
|
17
17
|
end
|
18
18
|
|
19
19
|
def generate_parameters
|
@@ -21,6 +21,7 @@ module ForemanInventoryUpload
|
|
21
21
|
|
22
22
|
(@host.host_params || {})
|
23
23
|
.select { |_name, value| value.present? || value.is_a?(FalseClass) }
|
24
|
+
.map { |key, value| [key, truncated_value(value)] }
|
24
25
|
end
|
25
26
|
|
26
27
|
private
|
@@ -57,6 +58,12 @@ module ForemanInventoryUpload
|
|
57
58
|
['organization_id', @host.organization_id.to_s],
|
58
59
|
]
|
59
60
|
end
|
61
|
+
|
62
|
+
def truncated_value(value)
|
63
|
+
return 'Original value exceeds 250 characters' if value.to_s.length > 250
|
64
|
+
|
65
|
+
value
|
66
|
+
end
|
60
67
|
end
|
61
68
|
end
|
62
69
|
end
|
@@ -48,13 +48,22 @@ module ForemanRhCloud
|
|
48
48
|
security_block :foreman_rh_cloud do
|
49
49
|
permission(
|
50
50
|
:generate_foreman_rh_cloud,
|
51
|
-
'foreman_inventory_upload/reports': [:generate]
|
51
|
+
'foreman_inventory_upload/reports': [:generate],
|
52
|
+
'foreman_inventory_upload/tasks': [:create],
|
53
|
+
'api/v2/rh_cloud/inventory': [:sync_inventory_status, :download_file, :generate_report, :enable_cloud_connector],
|
54
|
+
'foreman_inventory_upload/uploads': [:enable_cloud_connector],
|
55
|
+
'foreman_inventory_upload/uploads_settings': [:set_advanced_setting],
|
56
|
+
'insights_cloud/settings': [:save_token_and_sync, :update],
|
57
|
+
'insights_cloud/tasks': [:create]
|
52
58
|
)
|
53
59
|
permission(
|
54
60
|
:view_foreman_rh_cloud,
|
55
61
|
'foreman_inventory_upload/accounts': [:index],
|
56
62
|
'foreman_inventory_upload/reports': [:last],
|
57
63
|
'foreman_inventory_upload/uploads': [:auto_upload, :show_auto_upload, :download_file, :last],
|
64
|
+
'foreman_inventory_upload/tasks': [:show],
|
65
|
+
'foreman_inventory_upload/cloud_status': [:index],
|
66
|
+
'foreman_inventory_upload/uploads_settings': [:index],
|
58
67
|
'react': [:index]
|
59
68
|
)
|
60
69
|
permission(
|
data/package.json
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'test_plugin_helper'
|
2
|
+
require 'unit/shared/access_permissions_test_base'
|
3
|
+
|
4
|
+
class RhCloudPermissionsTest < ActiveSupport::TestCase
|
5
|
+
include AccessPermissionsTestBase
|
6
|
+
|
7
|
+
check_routes(
|
8
|
+
Rails.application.routes,
|
9
|
+
[
|
10
|
+
'insights_cloud/api/machine_telemetries/forward_request',
|
11
|
+
'insights_cloud/api/machine_telemetries/branch_info',
|
12
|
+
],
|
13
|
+
skip_patterns: [/^(?!foreman_inventory_upload|insights_cloud|.*rh_cloud).*/]) # include only plugin paths
|
14
|
+
end
|
@@ -103,6 +103,21 @@ class TagsGeneratorTest < ActiveSupport::TestCase
|
|
103
103
|
assert_equal 0, actual.count
|
104
104
|
end
|
105
105
|
|
106
|
+
test 'truncates parameter tags' do
|
107
|
+
Setting[:include_parameter_tags] = true
|
108
|
+
|
109
|
+
@host.stubs(:host_params).returns(
|
110
|
+
{
|
111
|
+
'str_param' => 'a' * 251,
|
112
|
+
}
|
113
|
+
)
|
114
|
+
|
115
|
+
generator = create_generator
|
116
|
+
actual = Hash[generator.generate_parameters]
|
117
|
+
|
118
|
+
assert_equal 'Original value exceeds 250 characters', actual['str_param']
|
119
|
+
end
|
120
|
+
|
106
121
|
private
|
107
122
|
|
108
123
|
def create_generator
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { API } from 'foremanReact/redux/API';
|
2
|
-
import { addToast } from 'foremanReact/
|
2
|
+
import { addToast } from 'foremanReact/components/ToastsList';
|
3
3
|
import { inventoryUrl } from '../../ForemanInventoryHelpers';
|
4
4
|
import {
|
5
5
|
INVENTORY_ACCOUNT_STATUS_POLLING,
|
@@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
|
|
4
4
|
import { FormGroup, TextInput } from '@patternfly/react-core';
|
5
5
|
import { noop } from 'foremanReact/common/helpers';
|
6
6
|
import { translate as __ } from 'foremanReact/common/I18n';
|
7
|
+
import { useForemanOrganization } from 'foremanReact/Root/Context/ForemanContext';
|
7
8
|
import ClearButton from './Components/ClearButton';
|
8
9
|
import './inventoryFilter.scss';
|
9
10
|
import { ANY_ORGANIZATION } from './InventoryFilterConstants';
|
@@ -12,13 +13,14 @@ const InventoryFilter = ({
|
|
12
13
|
handleFilterChange,
|
13
14
|
handleFilterClear,
|
14
15
|
filterTerm,
|
15
|
-
organization,
|
16
16
|
}) => {
|
17
17
|
useEffect(() => {
|
18
18
|
const initialTerm = organization === ANY_ORGANIZATION ? '' : organization;
|
19
19
|
handleFilterChange(initialTerm);
|
20
20
|
}, []);
|
21
21
|
|
22
|
+
const organization = useForemanOrganization()?.title;
|
23
|
+
|
22
24
|
return (
|
23
25
|
<form id="inventory_filter_form">
|
24
26
|
<FormGroup>
|
@@ -39,14 +41,12 @@ InventoryFilter.propTypes = {
|
|
39
41
|
handleFilterChange: PropTypes.func,
|
40
42
|
handleFilterClear: PropTypes.func,
|
41
43
|
filterTerm: PropTypes.string,
|
42
|
-
organization: PropTypes.string,
|
43
44
|
};
|
44
45
|
|
45
46
|
InventoryFilter.defaultProps = {
|
46
47
|
handleFilterChange: noop,
|
47
48
|
handleFilterClear: noop,
|
48
49
|
filterTerm: '',
|
49
|
-
organization: '',
|
50
50
|
};
|
51
51
|
|
52
52
|
export default InventoryFilter;
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import { bindActionCreators } from 'redux';
|
2
2
|
import { connect } from 'react-redux';
|
3
|
-
import { selectCurrentOrganization } from 'foremanReact/components/Layout/LayoutSelectors';
|
4
3
|
import reducer from './InventoryFilterReducer';
|
5
4
|
import * as actions from './InventoryFilterActions';
|
6
5
|
import InventoryFilter from './InventoryFilter';
|
@@ -10,7 +9,6 @@ export const reducers = { inventoryFilter: reducer };
|
|
10
9
|
|
11
10
|
const mapStateToProps = state => ({
|
12
11
|
filterTerm: selectFilterTerm(state),
|
13
|
-
organization: selectCurrentOrganization(state),
|
14
12
|
});
|
15
13
|
// map action dispatchers to props
|
16
14
|
const mapDispatchToProps = dispatch => bindActionCreators(actions, dispatch);
|
data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { post } from 'foremanReact/redux/API';
|
3
|
-
import { addToast } from 'foremanReact/
|
3
|
+
import { addToast } from 'foremanReact/components/ToastsList';
|
4
4
|
import { translate as __ } from 'foremanReact/common/I18n';
|
5
5
|
import { inventoryUrl } from '../../../../ForemanInventoryHelpers';
|
6
6
|
import Toast from './components/Toast';
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
2
2
|
import { addGlobalFill } from 'foremanReact/components/common/Fill/GlobalFill';
|
3
3
|
import InventoryAutoUploadSwitcher from './ForemanInventoryUpload/SubscriptionsPageExtension/InventoryAutoUpload';
|
4
4
|
import NewHostDetailsTab from './InsightsHostDetailsTab/NewHostDetailsTab';
|
5
|
+
import InsightsTotalRiskCard from './InsightsHostDetailsTab/InsightsTotalRiskChart';
|
5
6
|
|
6
7
|
const fills = [
|
7
8
|
{
|
@@ -14,7 +15,13 @@ const fills = [
|
|
14
15
|
slot: 'host-details-page-tabs',
|
15
16
|
name: 'Insights',
|
16
17
|
component: props => <NewHostDetailsTab {...props} />,
|
17
|
-
weight:
|
18
|
+
weight: 400,
|
19
|
+
},
|
20
|
+
{
|
21
|
+
slot: 'details-cards',
|
22
|
+
name: 'insights-total-risk-chart',
|
23
|
+
component: props => <InsightsTotalRiskCard {...props} />,
|
24
|
+
weight: 1100,
|
18
25
|
},
|
19
26
|
];
|
20
27
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { API } from 'foremanReact/redux/API';
|
2
|
-
import { addToast } from 'foremanReact/
|
2
|
+
import { addToast } from 'foremanReact/components/ToastsList';
|
3
3
|
import { insightsCloudUrl } from '../../InsightsCloudSyncHelpers';
|
4
4
|
import {
|
5
5
|
INSIGHTS_SYNC_SETTING_SET,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { API } from 'foremanReact/redux/API';
|
2
|
-
import { addToast } from 'foremanReact/
|
2
|
+
import { addToast } from 'foremanReact/components/ToastsList';
|
3
3
|
import { insightsCloudUrl } from '../InsightsCloudSync/InsightsCloudSyncHelpers';
|
4
4
|
import {
|
5
5
|
INSIGHTS_HITS_REQUEST,
|
@@ -1,2 +1,77 @@
|
|
1
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
2
|
+
|
1
3
|
export const INSIGHTS_HITS_REQUEST = 'INSIGHTS_HITS_REQUEST';
|
2
4
|
export const INSIGHTS_HITS_SUCCESS = 'INSIGHTS_HITS_SUCCESS';
|
5
|
+
|
6
|
+
export const getInitialRisks = () => ({
|
7
|
+
1: {
|
8
|
+
value: 0,
|
9
|
+
title: __('Low'),
|
10
|
+
hoverFill: '#2b9af3',
|
11
|
+
},
|
12
|
+
2: {
|
13
|
+
value: 0,
|
14
|
+
title: __('Moderate'),
|
15
|
+
hoverFill: '#d5a632',
|
16
|
+
},
|
17
|
+
3: {
|
18
|
+
value: 0,
|
19
|
+
title: __('Important'),
|
20
|
+
hoverFill: '#ec7a08',
|
21
|
+
},
|
22
|
+
4: {
|
23
|
+
value: 0,
|
24
|
+
title: __('Critical'),
|
25
|
+
hoverFill: '#7d1007',
|
26
|
+
},
|
27
|
+
total: 0,
|
28
|
+
});
|
29
|
+
|
30
|
+
const colorScale = ['#bee1f4', '#f4c145', '#f4b678', '#c9190b'];
|
31
|
+
|
32
|
+
export const theme = {
|
33
|
+
legend: {
|
34
|
+
gutter: 20,
|
35
|
+
orientation: 'horizontal',
|
36
|
+
titleOrientation: 'top',
|
37
|
+
style: {
|
38
|
+
data: {
|
39
|
+
type: 'square',
|
40
|
+
},
|
41
|
+
labels: {
|
42
|
+
fontFamily: 'RedHatText',
|
43
|
+
fontSize: 14,
|
44
|
+
letterSpacing: 'normal',
|
45
|
+
padding: 10,
|
46
|
+
stroke: 'transparent',
|
47
|
+
fill: '#06c',
|
48
|
+
textDecorationColor: '#06c',
|
49
|
+
},
|
50
|
+
title: {
|
51
|
+
fontFamily: 'RedHatText',
|
52
|
+
fontSize: 14,
|
53
|
+
letterSpacing: 'normal',
|
54
|
+
padding: 2,
|
55
|
+
stroke: 'transparent',
|
56
|
+
},
|
57
|
+
},
|
58
|
+
colorScale,
|
59
|
+
},
|
60
|
+
pie: {
|
61
|
+
colorScale,
|
62
|
+
height: 230,
|
63
|
+
padAngle: 1,
|
64
|
+
padding: 20,
|
65
|
+
style: {
|
66
|
+
data: { padding: 8, stroke: 'transparent', strokeWidth: 1 },
|
67
|
+
labels: {
|
68
|
+
fontFamily: 'RedHatText',
|
69
|
+
fontSize: 14,
|
70
|
+
letterSpacing: 'normal',
|
71
|
+
padding: 8,
|
72
|
+
stroke: 'transparent',
|
73
|
+
},
|
74
|
+
},
|
75
|
+
width: 230,
|
76
|
+
},
|
77
|
+
};
|
@@ -0,0 +1,147 @@
|
|
1
|
+
import React, { useEffect, useState, useMemo } from 'react';
|
2
|
+
import PropTypes from 'prop-types';
|
3
|
+
import { useDispatch } from 'react-redux';
|
4
|
+
import { push } from 'connected-react-router';
|
5
|
+
import { useHistory } from 'react-router-dom';
|
6
|
+
import { DropdownItem, Bullseye, Title } from '@patternfly/react-core';
|
7
|
+
import { ChartDonut, ChartLegend, ChartLabel } from '@patternfly/react-charts';
|
8
|
+
import { STATUS } from 'foremanReact/constants';
|
9
|
+
import { useAPI } from 'foremanReact/common/hooks/API/APIHooks';
|
10
|
+
import CardTemplate from 'foremanReact/components/HostDetails/Templates/CardItem/CardTemplate';
|
11
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
12
|
+
import SkeletonLoader from 'foremanReact/components/common/SkeletonLoader';
|
13
|
+
import { insightsCloudUrl } from '../InsightsCloudSync/InsightsCloudSyncHelpers';
|
14
|
+
import { getInitialRisks, theme } from './InsightsTabConstants';
|
15
|
+
|
16
|
+
const InsightsTotalRiskCard = ({ hostDetails: { id } }) => {
|
17
|
+
const [totalRisks, setTotalRisks] = useState(getInitialRisks());
|
18
|
+
const hashHistory = useHistory();
|
19
|
+
const dispatch = useDispatch();
|
20
|
+
const API_KEY = `HOST_${id}_RECOMMENDATIONS`;
|
21
|
+
const API_OPTIONS = useMemo(() => ({ key: API_KEY }), [API_KEY]);
|
22
|
+
const {
|
23
|
+
status = STATUS.PENDING,
|
24
|
+
response: { hits = [] },
|
25
|
+
} = useAPI('get', insightsCloudUrl(`hits/${id}`), API_OPTIONS);
|
26
|
+
|
27
|
+
useEffect(() => {
|
28
|
+
if (status !== STATUS.PENDING) {
|
29
|
+
const risks = getInitialRisks();
|
30
|
+
hits.forEach(({ total_risk: risk }) => {
|
31
|
+
risks[risk].value += 1;
|
32
|
+
});
|
33
|
+
risks.total = hits.length;
|
34
|
+
setTotalRisks(risks);
|
35
|
+
}
|
36
|
+
}, [hits, status]);
|
37
|
+
|
38
|
+
const onChartClick = (evt, { index }) => {
|
39
|
+
hashHistory.push(`/Insights`);
|
40
|
+
dispatch(
|
41
|
+
push({
|
42
|
+
search: `search=total_risk+%3D+${index + 1}`,
|
43
|
+
})
|
44
|
+
);
|
45
|
+
};
|
46
|
+
|
47
|
+
const onChartHover = (evt, { index }) => [
|
48
|
+
{
|
49
|
+
mutation: ({ style }) => ({
|
50
|
+
style: { ...style, fill: totalRisks[index + 1]?.hoverFill },
|
51
|
+
}),
|
52
|
+
},
|
53
|
+
];
|
54
|
+
|
55
|
+
const { 1: low, 2: moderate, 3: important, 4: critical, total } = totalRisks;
|
56
|
+
|
57
|
+
// eslint-disable-next-line react/prop-types
|
58
|
+
const LegendLabel = ({ index, ...rest }) => (
|
59
|
+
<a key={index} onClick={() => onChartClick(null, { index })}>
|
60
|
+
<ChartLabel {...rest} />
|
61
|
+
</a>
|
62
|
+
);
|
63
|
+
|
64
|
+
const legend = (
|
65
|
+
<ChartLegend
|
66
|
+
height={400}
|
67
|
+
width={200}
|
68
|
+
fontSize={14}
|
69
|
+
rowGutter={{ top: -5, bottom: -5 }}
|
70
|
+
orientation="vertical"
|
71
|
+
labelComponent={<LegendLabel />}
|
72
|
+
data={[
|
73
|
+
{ name: `${low.title}: ${low.value}` },
|
74
|
+
{ name: `${moderate.title}: ${moderate.value}` },
|
75
|
+
{ name: `${important.title}: ${important.value}` },
|
76
|
+
{ name: `${critical.title}: ${critical.value}` },
|
77
|
+
]}
|
78
|
+
/>
|
79
|
+
);
|
80
|
+
|
81
|
+
const cardBody = (
|
82
|
+
<ChartDonut
|
83
|
+
ariaDesc="Number of recommendations total-risks"
|
84
|
+
constrainToVisibleArea
|
85
|
+
data={[
|
86
|
+
{ x: low.title, y: low.value },
|
87
|
+
{ x: moderate.title, y: moderate.value },
|
88
|
+
{ x: important.title, y: important.value },
|
89
|
+
{ x: critical.title, y: critical.value },
|
90
|
+
]}
|
91
|
+
labels={({ datum: { x, y } }) => `${x}: ${y}`}
|
92
|
+
legendComponent={legend}
|
93
|
+
legendPosition="right"
|
94
|
+
subTitle="Recommendations"
|
95
|
+
title={`${total}`}
|
96
|
+
padding={{
|
97
|
+
bottom: 20,
|
98
|
+
left: 20,
|
99
|
+
right: 140,
|
100
|
+
top: 20,
|
101
|
+
}}
|
102
|
+
width={350}
|
103
|
+
theme={theme}
|
104
|
+
events={[
|
105
|
+
{
|
106
|
+
target: 'data',
|
107
|
+
eventHandlers: {
|
108
|
+
onClick: onChartClick,
|
109
|
+
onMouseOver: onChartHover,
|
110
|
+
onMouseOut: () => [{ mutation: () => null }],
|
111
|
+
},
|
112
|
+
},
|
113
|
+
]}
|
114
|
+
/>
|
115
|
+
);
|
116
|
+
|
117
|
+
return (
|
118
|
+
<CardTemplate
|
119
|
+
header={__('Total Risks')}
|
120
|
+
dropdownItems={[
|
121
|
+
<DropdownItem
|
122
|
+
key="insights-tab"
|
123
|
+
onClick={() => hashHistory.push(`/Insights`)}
|
124
|
+
>
|
125
|
+
{__('View all recommendations')}
|
126
|
+
</DropdownItem>,
|
127
|
+
]}
|
128
|
+
>
|
129
|
+
<SkeletonLoader
|
130
|
+
status={status}
|
131
|
+
emptyState={
|
132
|
+
<Bullseye>
|
133
|
+
<Title headingLevel="h4"> {__('No results found')} </Title>
|
134
|
+
</Bullseye>
|
135
|
+
}
|
136
|
+
>
|
137
|
+
<div id="rh-cloud-total-risk-card">{cardBody}</div>
|
138
|
+
</SkeletonLoader>
|
139
|
+
</CardTemplate>
|
140
|
+
);
|
141
|
+
};
|
142
|
+
|
143
|
+
InsightsTotalRiskCard.propTypes = {
|
144
|
+
hostDetails: PropTypes.object.isRequired,
|
145
|
+
};
|
146
|
+
|
147
|
+
export default InsightsTotalRiskCard;
|
@@ -20,7 +20,6 @@ import {
|
|
20
20
|
selectSearch,
|
21
21
|
selectHits,
|
22
22
|
} from '../InsightsCloudSync/Components/InsightsTable/InsightsTableSelectors';
|
23
|
-
import './InsightsTab.scss';
|
24
23
|
import { redHatAdvisorSystems } from '../InsightsCloudSync/InsightsCloudSyncHelpers';
|
25
24
|
|
26
25
|
const NewHostDetailsTab = ({ hostName, router }) => {
|
data/webpack/__mocks__/foremanReact/{redux/actions/toasts.js → components/ToastsList/index.js}
RENAMED
File without changes
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { get } from 'foremanReact/redux/API';
|
3
3
|
import { withInterval } from 'foremanReact/redux/middlewares/IntervalMiddleware';
|
4
|
-
import { addToast } from 'foremanReact/
|
4
|
+
import { addToast } from 'foremanReact/components/ToastsList';
|
5
5
|
import { translate as __ } from 'foremanReact/common/I18n';
|
6
6
|
import { foremanTaskDetailsUrl } from './ForemanTasksHelpers';
|
7
7
|
import { foremanUrl } from '../../ForemanRhCloudHelpers';
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_rh_cloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.30
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Foreman Red Hat Cloud team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: katello
|
@@ -176,6 +176,7 @@ files:
|
|
176
176
|
- app/views/layouts/foreman_rh_cloud/application.html.erb
|
177
177
|
- config/Gemfile.lock.gh_test
|
178
178
|
- config/database.yml.example
|
179
|
+
- config/package-lock.json
|
179
180
|
- config/package-lock.json.gh_test
|
180
181
|
- config/package-lock.json.plugin
|
181
182
|
- config/rh_cert-api_chain.pem
|
@@ -262,6 +263,7 @@ files:
|
|
262
263
|
- test/unit/insights_facet_test.rb
|
263
264
|
- test/unit/metadata_generator_test.rb
|
264
265
|
- test/unit/rh_cloud_http_proxy_test.rb
|
266
|
+
- test/unit/rh_cloud_permissions_test.rb
|
265
267
|
- test/unit/services/foreman_rh_cloud/branch_info_test.rb
|
266
268
|
- test/unit/services/foreman_rh_cloud/cloud_request_forwarder_test.rb
|
267
269
|
- test/unit/services/foreman_rh_cloud/cloud_status_service_test.rb
|
@@ -595,6 +597,7 @@ files:
|
|
595
597
|
- webpack/InsightsHostDetailsTab/InsightsTabConstants.js
|
596
598
|
- webpack/InsightsHostDetailsTab/InsightsTabReducer.js
|
597
599
|
- webpack/InsightsHostDetailsTab/InsightsTabSelectors.js
|
600
|
+
- webpack/InsightsHostDetailsTab/InsightsTotalRiskChart.js
|
598
601
|
- webpack/InsightsHostDetailsTab/NewHostDetailsTab.js
|
599
602
|
- webpack/InsightsHostDetailsTab/__tests__/InsightsTab.fixtures.js
|
600
603
|
- webpack/InsightsHostDetailsTab/__tests__/InsightsTab.test.js
|
@@ -615,11 +618,10 @@ files:
|
|
615
618
|
- webpack/__mocks__/foremanReact/common/helpers.js
|
616
619
|
- webpack/__mocks__/foremanReact/components/Head.js
|
617
620
|
- webpack/__mocks__/foremanReact/components/Layout/LayoutConstants.js
|
618
|
-
- webpack/__mocks__/foremanReact/components/
|
621
|
+
- webpack/__mocks__/foremanReact/components/ToastsList/index.js
|
619
622
|
- webpack/__mocks__/foremanReact/constants.js
|
620
623
|
- webpack/__mocks__/foremanReact/redux/API/APISelectors.js
|
621
624
|
- webpack/__mocks__/foremanReact/redux/API/index.js
|
622
|
-
- webpack/__mocks__/foremanReact/redux/actions/toasts.js
|
623
625
|
- webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware.js
|
624
626
|
- webpack/__mocks__/foremanReact/routes/RouterSelector.js
|
625
627
|
- webpack/__mocks__/foremanReact/routes/common/PageLayout/PageLayout.js
|
@@ -696,6 +698,7 @@ test_files:
|
|
696
698
|
- test/unit/insights_facet_test.rb
|
697
699
|
- test/unit/metadata_generator_test.rb
|
698
700
|
- test/unit/rh_cloud_http_proxy_test.rb
|
701
|
+
- test/unit/rh_cloud_permissions_test.rb
|
699
702
|
- test/unit/services/foreman_rh_cloud/branch_info_test.rb
|
700
703
|
- test/unit/services/foreman_rh_cloud/cloud_request_forwarder_test.rb
|
701
704
|
- test/unit/services/foreman_rh_cloud/cloud_status_service_test.rb
|
@@ -1 +0,0 @@
|
|
1
|
-
export const selectCurrentOrganization = state => 'some-org';
|