foreman_discovery 16.3.1 → 17.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/api/v2/discovered_hosts_controller.rb +1 -0
- data/app/controllers/discovered_hosts_controller.rb +24 -35
- data/app/controllers/discovery_rules_controller.rb +12 -1
- data/app/helpers/discovered_hosts_helper.rb +6 -1
- data/app/helpers/discovery_rules_helper.rb +1 -0
- data/app/models/discovery_rule.rb +10 -5
- data/app/services/foreman_discovery/fact_to_category_resolver.rb +106 -0
- data/app/services/foreman_discovery/ui_notifications/failed_discovery.rb +34 -0
- data/app/services/foreman_discovery/ui_notifications/new_host.rb +2 -1
- data/app/views/discovered_hosts/_discovered_hosts_list.html.erb +44 -40
- data/app/views/discovered_hosts/welcome.html.erb +1 -2
- data/app/views/discovery_rules/clone.erb +3 -0
- data/app/views/discovery_rules/index.html.erb +4 -0
- data/app/views/discovery_rules/welcome.html.erb +15 -0
- data/app/views/foreman_discovery/debian_kexec.erb +1 -1
- data/app/views/foreman_discovery/redhat_kexec.erb +1 -1
- data/config/routes.rb +2 -0
- data/db/seeds.d/80_discovery_ui_notification.rb +11 -5
- data/lib/foreman_discovery/engine.rb +3 -7
- data/lib/foreman_discovery/version.rb +1 -1
- data/locale/ca/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ca/foreman_discovery.edit.po +136 -98
- data/locale/ca/foreman_discovery.po +36 -9
- data/locale/de/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/de/foreman_discovery.edit.po +148 -112
- data/locale/de/foreman_discovery.po +45 -18
- data/locale/en/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/en/foreman_discovery.edit.po +127 -91
- data/locale/en/foreman_discovery.po +31 -4
- data/locale/en_GB/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/en_GB/foreman_discovery.edit.po +139 -109
- data/locale/en_GB/foreman_discovery.po +36 -9
- data/locale/es/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/es/foreman_discovery.edit.po +172 -140
- data/locale/es/foreman_discovery.po +70 -41
- data/locale/foreman_discovery.pot +142 -97
- data/locale/fr/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/fr/foreman_discovery.edit.po +179 -147
- data/locale/fr/foreman_discovery.po +76 -49
- data/locale/gl/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/gl/foreman_discovery.edit.po +133 -92
- data/locale/gl/foreman_discovery.po +32 -5
- data/locale/it/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/it/foreman_discovery.edit.po +147 -106
- data/locale/it/foreman_discovery.po +44 -17
- data/locale/ja/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ja/foreman_discovery.edit.po +182 -152
- data/locale/ja/foreman_discovery.po +79 -54
- data/locale/ko/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ko/foreman_discovery.edit.po +146 -105
- data/locale/ko/foreman_discovery.po +43 -16
- data/locale/pt_BR/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/pt_BR/foreman_discovery.edit.po +171 -136
- data/locale/pt_BR/foreman_discovery.po +69 -39
- data/locale/ru/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ru/foreman_discovery.edit.po +147 -106
- data/locale/ru/foreman_discovery.po +43 -16
- data/locale/sv_SE/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/sv_SE/foreman_discovery.edit.po +135 -94
- data/locale/sv_SE/foreman_discovery.po +34 -7
- data/locale/zh_CN/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/zh_CN/foreman_discovery.edit.po +217 -188
- data/locale/zh_CN/foreman_discovery.po +114 -90
- data/locale/zh_TW/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/zh_TW/foreman_discovery.edit.po +146 -105
- data/locale/zh_TW/foreman_discovery.po +43 -16
- data/package.json +7 -7
- data/test/functional/api/v2/discovered_hosts_controller_test.rb +9 -0
- data/test/functional/discovery_rules_controller_test.rb +6 -1
- data/test/integration/discovered_hosts_test.rb +53 -5
- data/test/test_helper_discovery.rb +5 -0
- data/test/unit/discovery_rule_test.rb +24 -2
- data/test/unit/fact_to_category_resolver_test.rb +41 -0
- data/test/unit/ui_notifications/destroy_host_test.rb +2 -9
- data/test/unit/ui_notifications/new_host_test.rb +3 -3
- data/webpack/__mocks__/foremanReact/common/I18n.js +3 -0
- data/webpack/__mocks__/foremanReact/common/helpers.js +1 -0
- data/webpack/__mocks__/foremanReact/common/index.js +5 -0
- data/webpack/__mocks__/foremanReact/components/common/EmptyState/DefaultEmptyState.js +69 -0
- data/webpack/__mocks__/foremanReact/components/common/EmptyState/EmptyStatePattern.js +77 -0
- data/webpack/__mocks__/foremanReact/components/common/EmptyState/EmptyStatePropTypes.js +29 -0
- data/webpack/__mocks__/foremanReact/components/common/EmptyState/index.js +5 -0
- data/webpack/index.js +9 -8
- data/webpack/src/ForemanDiscovery/DiscoveredHosts/Components/EmptyState/EmptyState.js +7 -7
- data/webpack/src/ForemanDiscovery/DiscoveredHosts/Components/EmptyState/__test__/EmptyState.test.js +12 -0
- data/webpack/src/ForemanDiscovery/DiscoveredHosts/Components/EmptyState/__test__/__snapshots__/EmptyState.test.js.snap +16 -0
- data/webpack/src/ForemanDiscovery/DiscoveredHosts/Components/EmptyState/index.js +1 -1
- data/webpack/src/ForemanDiscovery/DiscoveredHosts/index.js +3 -3
- data/webpack/src/ForemanDiscovery/DiscoveryRules/Components/EmptyState/EmptyState.js +34 -0
- data/webpack/src/ForemanDiscovery/DiscoveryRules/Components/EmptyState/index.js +1 -0
- data/webpack/src/ForemanDiscovery/DiscoveryRules/Components/__test__/EmptyState.test.js +19 -0
- data/webpack/src/ForemanDiscovery/DiscoveryRules/Components/__test__/__snapshots__/EmptyState.test.js.snap +22 -0
- data/webpack/src/ForemanDiscovery/DiscoveryRules/index.js +6 -0
- data/webpack/src/reducers.js +0 -2
- metadata +39 -17
@@ -21,13 +21,6 @@ class DestroyHostNotificationTest < ActiveSupport::TestCase
|
|
21
21
|
ForemanDiscovery::UINotifications::NewHost.deliver!(host)
|
22
22
|
end
|
23
23
|
assert_equal 1, blueprint.notifications.count
|
24
|
-
assert_no_difference('blueprint.notifications.count') do
|
25
|
-
host = FactoryBot.create(:discovered_host)
|
26
|
-
ForemanDiscovery::UINotifications::NewHost.deliver!(host)
|
27
|
-
end
|
28
|
-
assert_no_difference('blueprint.notifications.count') do
|
29
|
-
Host::Discovered.all.last.destroy
|
30
|
-
end
|
31
24
|
Host::Discovered.destroy_all
|
32
25
|
assert_equal 0, blueprint.notifications.count
|
33
26
|
end
|
@@ -55,9 +48,9 @@ class DestroyHostNotificationTest < ActiveSupport::TestCase
|
|
55
48
|
ForemanDiscovery::UINotifications::NewHost.deliver!(host1)
|
56
49
|
host2 = FactoryBot.create(:discovered_host)
|
57
50
|
ForemanDiscovery::UINotifications::NewHost.deliver!(host2)
|
58
|
-
assert_equal
|
51
|
+
assert_equal 2, blueprint.notifications.count
|
59
52
|
new_host = ::ForemanDiscovery::HostConverter.to_managed(host1, false, false)
|
60
53
|
assert new_host.save!
|
61
|
-
assert_equal
|
54
|
+
assert_equal 2, blueprint.notifications.count
|
62
55
|
end
|
63
56
|
end
|
@@ -16,14 +16,14 @@ class NewHostNotificationTest < ActiveSupport::TestCase
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
test 'multiple discovered hosts should generate
|
19
|
+
test 'multiple discovered hosts should generate multiple notifications' do
|
20
20
|
host1 = FactoryBot.create :discovered_host
|
21
21
|
ForemanDiscovery::UINotifications::NewHost.deliver!(host1)
|
22
22
|
expired_at = blueprint.notifications.first.expired_at
|
23
23
|
Time.any_instance.stubs(:utc).returns(expired_at + 1.hour)
|
24
24
|
host2 = FactoryBot.create :discovered_host
|
25
25
|
ForemanDiscovery::UINotifications::NewHost.deliver!(host2)
|
26
|
-
assert_equal
|
27
|
-
assert_not_equal expired_at, blueprint.notifications.
|
26
|
+
assert_equal 2, blueprint.notifications.count
|
27
|
+
assert_not_equal expired_at, blueprint.notifications.last.expired_at
|
28
28
|
end
|
29
29
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
export const foremanUrl = path => `${window.URL_PREFIX}${path}`;
|
@@ -0,0 +1,69 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { useDispatch } from 'react-redux';
|
3
|
+
import { push } from 'connected-react-router';
|
4
|
+
import { Button } from '@patternfly/react-core';
|
5
|
+
import EmptyStatePattern from './EmptyStatePattern';
|
6
|
+
import { defaultEmptyStatePropTypes } from './EmptyStatePropTypes';
|
7
|
+
|
8
|
+
const DefaultEmptyState = props => {
|
9
|
+
const {
|
10
|
+
icon,
|
11
|
+
iconType,
|
12
|
+
header,
|
13
|
+
description,
|
14
|
+
documentation,
|
15
|
+
action,
|
16
|
+
secondaryActions,
|
17
|
+
} = props;
|
18
|
+
|
19
|
+
const dispatch = useDispatch();
|
20
|
+
const actionButtonClickHandler = ({ url, onClick }) => {
|
21
|
+
if (onClick) onClick();
|
22
|
+
else if (url) dispatch(push(url));
|
23
|
+
};
|
24
|
+
|
25
|
+
const ActionButton = action ? (
|
26
|
+
<Button
|
27
|
+
component="a"
|
28
|
+
onClick={() => actionButtonClickHandler(action)}
|
29
|
+
variant="primary"
|
30
|
+
>
|
31
|
+
{action.title}
|
32
|
+
</Button>
|
33
|
+
) : null;
|
34
|
+
|
35
|
+
const SecondaryButton = secondaryActions
|
36
|
+
? secondaryActions.map(({ title, url, onClick }) => (
|
37
|
+
<Button
|
38
|
+
component="a"
|
39
|
+
key={`sec-button-${title}`}
|
40
|
+
onClick={() => actionButtonClickHandler({ url, onClick })}
|
41
|
+
variant="secondary"
|
42
|
+
>
|
43
|
+
{title}
|
44
|
+
</Button>
|
45
|
+
))
|
46
|
+
: null;
|
47
|
+
|
48
|
+
return (
|
49
|
+
<EmptyStatePattern
|
50
|
+
icon={icon}
|
51
|
+
iconType={iconType}
|
52
|
+
header={header}
|
53
|
+
description={description}
|
54
|
+
documentation={documentation}
|
55
|
+
action={ActionButton}
|
56
|
+
secondaryActions={SecondaryButton}
|
57
|
+
/>
|
58
|
+
);
|
59
|
+
};
|
60
|
+
|
61
|
+
DefaultEmptyState.propTypes = defaultEmptyStatePropTypes;
|
62
|
+
|
63
|
+
DefaultEmptyState.defaultProps = {
|
64
|
+
icon: 'add-circle-o',
|
65
|
+
secondaryActions: [],
|
66
|
+
iconType: 'pf',
|
67
|
+
};
|
68
|
+
|
69
|
+
export default DefaultEmptyState;
|
@@ -0,0 +1,77 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { Icon } from 'patternfly-react';
|
3
|
+
import {
|
4
|
+
Title,
|
5
|
+
EmptyState,
|
6
|
+
EmptyStateVariant,
|
7
|
+
EmptyStateBody,
|
8
|
+
EmptyStateSecondaryActions,
|
9
|
+
} from '@patternfly/react-core';
|
10
|
+
import { emptyStatePatternPropTypes } from './EmptyStatePropTypes';
|
11
|
+
import { translate as __ } from '../../../common/I18n';
|
12
|
+
|
13
|
+
const EmptyStatePattern = props => {
|
14
|
+
const {
|
15
|
+
documentation,
|
16
|
+
action,
|
17
|
+
secondaryActions,
|
18
|
+
iconType,
|
19
|
+
icon,
|
20
|
+
header,
|
21
|
+
description,
|
22
|
+
} = props;
|
23
|
+
|
24
|
+
const DocumentationBlock = () => {
|
25
|
+
if (!documentation) {
|
26
|
+
return null;
|
27
|
+
}
|
28
|
+
// The documentation prop can also be a customized node
|
29
|
+
if (React.isValidElement(documentation)) {
|
30
|
+
return documentation;
|
31
|
+
}
|
32
|
+
const {
|
33
|
+
label = __('For more information please see '), // eslint-disable-line react/prop-types
|
34
|
+
buttonLabel = __('documentation'), // eslint-disable-line react/prop-types
|
35
|
+
url, // eslint-disable-line react/prop-types
|
36
|
+
} = documentation;
|
37
|
+
return (
|
38
|
+
<span>
|
39
|
+
{label}
|
40
|
+
<a href={url}>{buttonLabel}</a>
|
41
|
+
</span>
|
42
|
+
);
|
43
|
+
};
|
44
|
+
|
45
|
+
return (
|
46
|
+
<EmptyState variant={EmptyStateVariant.xl}>
|
47
|
+
<span className="empty-state-icon">
|
48
|
+
{/* TODO: Add pf4 icons, Redmine issue: #30865 */}
|
49
|
+
<Icon name={icon} type={iconType} size="2x" />
|
50
|
+
</span>
|
51
|
+
<Title headingLevel="h5" size="4xl">
|
52
|
+
{header}
|
53
|
+
</Title>
|
54
|
+
<EmptyStateBody>
|
55
|
+
<div className="empty-state-description">{description}</div>
|
56
|
+
<DocumentationBlock />
|
57
|
+
</EmptyStateBody>
|
58
|
+
{action}
|
59
|
+
<EmptyStateSecondaryActions>
|
60
|
+
{secondaryActions}
|
61
|
+
</EmptyStateSecondaryActions>
|
62
|
+
</EmptyState>
|
63
|
+
);
|
64
|
+
};
|
65
|
+
|
66
|
+
EmptyStatePattern.propTypes = emptyStatePatternPropTypes;
|
67
|
+
|
68
|
+
EmptyStatePattern.defaultProps = {
|
69
|
+
icon: 'add-circle-o',
|
70
|
+
secondaryActions: [],
|
71
|
+
documentation: {
|
72
|
+
url: '#',
|
73
|
+
},
|
74
|
+
iconType: 'pf',
|
75
|
+
};
|
76
|
+
|
77
|
+
export default EmptyStatePattern;
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import PropTypes from 'prop-types';
|
2
|
+
|
3
|
+
export const actionButtonPropTypes = {
|
4
|
+
title: PropTypes.node.isRequired,
|
5
|
+
url: PropTypes.string,
|
6
|
+
onChange: PropTypes.func,
|
7
|
+
};
|
8
|
+
|
9
|
+
export const emptyStatePatternPropTypes = {
|
10
|
+
icon: PropTypes.string.isRequired,
|
11
|
+
header: PropTypes.string.isRequired,
|
12
|
+
documentation: PropTypes.oneOfType([
|
13
|
+
PropTypes.shape({
|
14
|
+
label: PropTypes.string,
|
15
|
+
buttonLabel: PropTypes.string,
|
16
|
+
url: PropTypes.string.isRequired,
|
17
|
+
}),
|
18
|
+
PropTypes.node,
|
19
|
+
]),
|
20
|
+
description: PropTypes.string.isRequired,
|
21
|
+
action: PropTypes.node,
|
22
|
+
secondaryActions: PropTypes.node,
|
23
|
+
};
|
24
|
+
|
25
|
+
export const defaultEmptyStatePropTypes = {
|
26
|
+
...emptyStatePatternPropTypes,
|
27
|
+
action: PropTypes.shape(actionButtonPropTypes),
|
28
|
+
secondaryActions: PropTypes.arrayOf(PropTypes.shape(actionButtonPropTypes)),
|
29
|
+
};
|
data/webpack/index.js
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
/* eslint import/no-unresolved: [2, { ignore: [foremanReact/*] }] */
|
2
2
|
/* eslint-disable import/no-extraneous-dependencies */
|
3
3
|
/* eslint-disable import/extensions */
|
4
|
-
import componentRegistry from
|
5
|
-
import { registerReducer } from
|
6
|
-
import reducers from
|
7
|
-
import DiscoveredHosts from
|
4
|
+
import componentRegistry from 'foremanReact/components/componentRegistry';
|
5
|
+
import { registerReducer } from 'foremanReact/common/MountingService';
|
6
|
+
import reducers from './src/reducers';
|
7
|
+
import DiscoveredHosts from './src/ForemanDiscovery/DiscoveredHosts';
|
8
|
+
import DiscoveryRules from './src/ForemanDiscovery/DiscoveryRules';
|
8
9
|
|
9
10
|
// register reducers
|
10
11
|
Object.entries(reducers).forEach(([key, reducer]) =>
|
@@ -12,7 +13,7 @@ Object.entries(reducers).forEach(([key, reducer]) =>
|
|
12
13
|
);
|
13
14
|
|
14
15
|
// register components for erb mounting
|
15
|
-
componentRegistry.
|
16
|
-
name:
|
17
|
-
type:
|
18
|
-
|
16
|
+
componentRegistry.registerMultiple([
|
17
|
+
{ name: 'DiscoveredHosts', type: DiscoveredHosts },
|
18
|
+
{ name: 'DiscoveryRules', type: DiscoveryRules },
|
19
|
+
]);
|
@@ -1,11 +1,11 @@
|
|
1
|
-
import React from
|
2
|
-
import PropTypes from
|
3
|
-
import { translate as __ } from
|
4
|
-
import ForemanEmptyState from
|
1
|
+
import React from 'react';
|
2
|
+
import PropTypes from 'prop-types';
|
3
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
4
|
+
import ForemanEmptyState from 'foremanReact/components/common/EmptyState';
|
5
5
|
|
6
|
-
const EmptyState =
|
6
|
+
const EmptyState = props => {
|
7
7
|
const description = __(
|
8
|
-
|
8
|
+
'No discovered hosts found in this context. This page shows discovered bare-metal or virtual nodes waiting to be provisioned.'
|
9
9
|
);
|
10
10
|
const documentation = {
|
11
11
|
url: props.docUrl,
|
@@ -22,7 +22,7 @@ const EmptyState = (props) => {
|
|
22
22
|
};
|
23
23
|
|
24
24
|
EmptyState.propTypes = {
|
25
|
-
docUrl: PropTypes.string,
|
25
|
+
docUrl: PropTypes.string.isRequired,
|
26
26
|
};
|
27
27
|
|
28
28
|
export default EmptyState;
|
data/webpack/src/ForemanDiscovery/DiscoveredHosts/Components/EmptyState/__test__/EmptyState.test.js
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
2
|
+
|
3
|
+
import ForemanEmptyState from '../EmptyState';
|
4
|
+
|
5
|
+
const fixtures = {
|
6
|
+
'render with Props': { docUrl: 'https://foreman.example.com' },
|
7
|
+
};
|
8
|
+
|
9
|
+
describe('ForemanEmptyState', () => {
|
10
|
+
describe('rendering', () =>
|
11
|
+
testComponentSnapshotsWithFixtures(ForemanEmptyState, fixtures));
|
12
|
+
});
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`ForemanEmptyState rendering render with Props 1`] = `
|
4
|
+
<DefaultEmptyState
|
5
|
+
description="No discovered hosts found in this context. This page shows discovered bare-metal or virtual nodes waiting to be provisioned."
|
6
|
+
documentation={
|
7
|
+
Object {
|
8
|
+
"url": "https://foreman.example.com",
|
9
|
+
}
|
10
|
+
}
|
11
|
+
header="Foreman Discovery"
|
12
|
+
icon="gears"
|
13
|
+
iconType="fa"
|
14
|
+
secondaryActions={Array []}
|
15
|
+
/>
|
16
|
+
`;
|
@@ -1 +1 @@
|
|
1
|
-
export { default } from
|
1
|
+
export { default } from './EmptyState';
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import React from
|
2
|
-
import EmptyState from
|
1
|
+
import React from 'react';
|
2
|
+
import EmptyState from './Components/EmptyState';
|
3
3
|
|
4
|
-
const DiscoveredHosts =
|
4
|
+
const DiscoveredHosts = props => <EmptyState {...props} />;
|
5
5
|
|
6
6
|
export default DiscoveredHosts;
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import PropTypes from 'prop-types';
|
3
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
4
|
+
import ForemanEmptyState from 'foremanReact/components/common/EmptyState';
|
5
|
+
import { foremanUrl } from 'foremanReact/common/helpers';
|
6
|
+
|
7
|
+
const EmptyState = props => {
|
8
|
+
const action = {
|
9
|
+
title: __('Create Rule'),
|
10
|
+
url: foremanUrl('/discovery_rules/new'),
|
11
|
+
};
|
12
|
+
const description = __(
|
13
|
+
'No Discovery Rules found in this context. Create Discovery Rules to perform automated provisioning on Discovered Hosts'
|
14
|
+
);
|
15
|
+
const documentation = {
|
16
|
+
url: props.docUrl,
|
17
|
+
};
|
18
|
+
return (
|
19
|
+
<ForemanEmptyState
|
20
|
+
header="Discovery Rules"
|
21
|
+
description={description}
|
22
|
+
icon="gavel"
|
23
|
+
iconType="fa"
|
24
|
+
documentation={documentation}
|
25
|
+
action={action}
|
26
|
+
/>
|
27
|
+
);
|
28
|
+
};
|
29
|
+
|
30
|
+
EmptyState.propTypes = {
|
31
|
+
docUrl: PropTypes.string.isRequired,
|
32
|
+
};
|
33
|
+
|
34
|
+
export default EmptyState;
|
@@ -0,0 +1 @@
|
|
1
|
+
export { default } from './EmptyState';
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
2
|
+
import ForemanEmptyState from '../EmptyState';
|
3
|
+
|
4
|
+
const action = {
|
5
|
+
title: 'action-title',
|
6
|
+
url: `action-url`,
|
7
|
+
};
|
8
|
+
|
9
|
+
const fixtures = {
|
10
|
+
'render with Props': {
|
11
|
+
docUrl: 'https://foreman.example.com',
|
12
|
+
action,
|
13
|
+
},
|
14
|
+
};
|
15
|
+
|
16
|
+
describe('ForemanEmptyState', () => {
|
17
|
+
describe('rendering', () =>
|
18
|
+
testComponentSnapshotsWithFixtures(ForemanEmptyState, fixtures));
|
19
|
+
});
|
@@ -0,0 +1,22 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`ForemanEmptyState rendering render with Props 1`] = `
|
4
|
+
<DefaultEmptyState
|
5
|
+
action={
|
6
|
+
Object {
|
7
|
+
"title": "Create Rule",
|
8
|
+
"url": "/discovery_rules/new",
|
9
|
+
}
|
10
|
+
}
|
11
|
+
description="No Discovery Rules found in this context. Create Discovery Rules to perform automated provisioning on Discovered Hosts"
|
12
|
+
documentation={
|
13
|
+
Object {
|
14
|
+
"url": "https://foreman.example.com",
|
15
|
+
}
|
16
|
+
}
|
17
|
+
header="Discovery Rules"
|
18
|
+
icon="gavel"
|
19
|
+
iconType="fa"
|
20
|
+
secondaryActions={Array []}
|
21
|
+
/>
|
22
|
+
`;
|