foreman_rh_cloud 5.0.29 → 5.0.30

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 (26) hide show
  1. checksums.yaml +4 -4
  2. data/config/Gemfile.lock.gh_test +204 -168
  3. data/config/package-lock.json +41822 -0
  4. data/config/package-lock.json.gh_test +14336 -7973
  5. data/config/routes.rb +1 -1
  6. data/lib/foreman_inventory_upload/generators/tags.rb +8 -1
  7. data/lib/foreman_rh_cloud/engine.rb +10 -1
  8. data/lib/foreman_rh_cloud/version.rb +1 -1
  9. data/package.json +1 -1
  10. data/test/unit/rh_cloud_permissions_test.rb +14 -0
  11. data/test/unit/tags_generator_test.rb +15 -0
  12. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListActions.js +1 -1
  13. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilter.js +3 -3
  14. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/index.js +0 -2
  15. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js +1 -1
  16. data/webpack/ForemanRhCloudFills.js +8 -1
  17. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsActions.js +1 -1
  18. data/webpack/InsightsHostDetailsTab/InsightsTabActions.js +1 -1
  19. data/webpack/InsightsHostDetailsTab/InsightsTabConstants.js +75 -0
  20. data/webpack/InsightsHostDetailsTab/InsightsTotalRiskChart.js +147 -0
  21. data/webpack/InsightsHostDetailsTab/NewHostDetailsTab.js +0 -1
  22. data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +1 -0
  23. data/webpack/__mocks__/foremanReact/{redux/actions/toasts.js → components/ToastsList/index.js} +0 -0
  24. data/webpack/common/ForemanTasks/ForemanTasksActions.js +1 -1
  25. metadata +7 -4
  26. 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, except: %i[show] do
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(
@@ -1,3 +1,3 @@
1
1
  module ForemanRhCloud
2
- VERSION = '5.0.29'.freeze
2
+ VERSION = '5.0.30'.freeze
3
3
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foreman_rh_cloud",
3
- "version": "5.0.29",
3
+ "version": "5.0.30",
4
4
  "description": "Inventory Upload =============",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -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/redux/actions/toasts';
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);
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { post } from 'foremanReact/redux/API';
3
- import { addToast } from 'foremanReact/redux/actions/toasts';
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: 700,
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/redux/actions/toasts';
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/redux/actions/toasts';
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 }) => {
@@ -1 +1,2 @@
1
1
  export const useForemanSettings = () => ({ perPage: 20 });
2
+ export const useForemanOrganization = () => ({ title: 'some-org' });
@@ -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/redux/actions/toasts';
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.29
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: 2021-11-29 00:00:00.000000000 Z
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/Layout/LayoutSelectors.js
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';