foreman_remote_execution 4.4.0 → 4.5.3

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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/api/v2/job_invocations_controller.rb +13 -24
  3. data/app/controllers/job_invocations_controller.rb +1 -1
  4. data/app/controllers/job_templates_controller.rb +4 -4
  5. data/app/controllers/ui_job_wizard_controller.rb +19 -0
  6. data/app/helpers/job_invocations_helper.rb +2 -2
  7. data/app/helpers/remote_execution_helper.rb +13 -9
  8. data/app/lib/actions/remote_execution/run_host_job.rb +36 -6
  9. data/app/models/concerns/foreman_remote_execution/host_extensions.rb +7 -5
  10. data/app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb +6 -0
  11. data/app/models/host_proxy_invocation.rb +4 -0
  12. data/app/models/host_status/execution_status.rb +5 -5
  13. data/app/models/job_invocation.rb +31 -12
  14. data/app/models/job_invocation_composer.rb +61 -19
  15. data/app/models/remote_execution_provider.rb +1 -1
  16. data/app/models/setting/remote_execution.rb +2 -2
  17. data/app/models/ssh_execution_provider.rb +4 -4
  18. data/app/models/targeting.rb +5 -1
  19. data/app/overrides/execution_interface.rb +8 -8
  20. data/app/overrides/subnet_proxies.rb +6 -6
  21. data/app/views/job_invocations/index.html.erb +1 -1
  22. data/app/views/templates/ssh/module_action.erb +1 -0
  23. data/app/views/templates/ssh/puppet_run_once.erb +1 -0
  24. data/config/routes.rb +1 -0
  25. data/db/migrate/20180110104432_rename_template_invocation_permission.rb +1 -1
  26. data/db/migrate/20190111153330_remove_remote_execution_without_proxy_setting.rb +4 -4
  27. data/db/migrate/2021051713291621250977_add_host_proxy_invocations.rb +12 -0
  28. data/extra/cockpit/foreman-cockpit-session +6 -6
  29. data/lib/foreman_remote_execution/engine.rb +11 -8
  30. data/lib/foreman_remote_execution/version.rb +1 -1
  31. data/package.json +2 -1
  32. data/test/functional/api/v2/job_invocations_controller_test.rb +14 -1
  33. data/test/unit/job_invocation_composer_test.rb +59 -2
  34. data/test/unit/job_invocation_test.rb +1 -1
  35. data/webpack/JobWizard/JobWizard.js +80 -19
  36. data/webpack/JobWizard/JobWizard.scss +42 -1
  37. data/webpack/JobWizard/JobWizardConstants.js +11 -0
  38. data/webpack/JobWizard/JobWizardSelectors.js +27 -1
  39. data/webpack/JobWizard/__tests__/__snapshots__/integration.test.js.snap +43 -0
  40. data/webpack/JobWizard/__tests__/fixtures.js +128 -0
  41. data/webpack/JobWizard/__tests__/integration.test.js +84 -0
  42. data/webpack/JobWizard/steps/AdvancedFields/AdvancedFields.js +110 -0
  43. data/webpack/JobWizard/steps/AdvancedFields/DescriptionField.js +67 -0
  44. data/webpack/JobWizard/steps/AdvancedFields/Fields.js +195 -0
  45. data/webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js +144 -0
  46. data/webpack/JobWizard/steps/AdvancedFields/__tests__/DescriptionField.test.js +23 -0
  47. data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js +34 -2
  48. data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.test.js +122 -44
  49. data/webpack/JobWizard/steps/CategoryAndTemplate/index.js +9 -1
  50. data/webpack/JobWizard/steps/Schedule/QueryType.js +48 -0
  51. data/webpack/JobWizard/steps/Schedule/RepeatOn.js +61 -0
  52. data/webpack/JobWizard/steps/Schedule/ScheduleType.js +25 -0
  53. data/webpack/JobWizard/steps/Schedule/StartEndDates.js +51 -0
  54. data/webpack/JobWizard/steps/Schedule/__tests__/StartEndDates.test.js +22 -0
  55. data/webpack/JobWizard/steps/Schedule/index.js +41 -0
  56. data/webpack/JobWizard/steps/form/FormHelpers.js +20 -0
  57. data/webpack/JobWizard/steps/form/Formatter.js +149 -0
  58. data/webpack/JobWizard/steps/form/GroupedSelectField.js +3 -0
  59. data/webpack/JobWizard/steps/form/NumberInput.js +33 -0
  60. data/webpack/JobWizard/steps/form/SelectField.js +24 -3
  61. data/webpack/JobWizard/steps/form/__tests__/Formatter.test.js.example +76 -0
  62. data/webpack/__mocks__/foremanReact/components/SearchBar.js +18 -1
  63. data/webpack/__mocks__/foremanReact/redux/API/APISelectors.js +21 -2
  64. data/webpack/global_index.js +5 -3
  65. data/webpack/index.js +3 -0
  66. data/webpack/react_app/components/RecentJobsCard/RecentJobsCard.js +1 -5
  67. data/webpack/react_app/components/TargetingHosts/__tests__/TargetingHostsSelectors.test.js +8 -3
  68. data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsPage.test.js.snap +1 -0
  69. data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsSelectors.test.js.snap +7 -2
  70. data/webpack/react_app/extend/{fills.js → fillRecentJobsCard.js} +7 -6
  71. data/webpack/react_app/extend/fillregistrationAdvanced.js +11 -0
  72. data/webpack/react_app/extend/reducers.js +2 -1
  73. metadata +24 -14
  74. data/app/models/concerns/foreman_remote_execution/orchestration/ssh.rb +0 -70
  75. data/test/models/orchestration/ssh_test.rb +0 -56
  76. data/webpack/JobWizard/__tests__/JobWizard.test.js +0 -20
  77. data/webpack/JobWizard/__tests__/__snapshots__/JobWizard.test.js.snap +0 -83
  78. data/webpack/JobWizard/steps/CategoryAndTemplate/__snapshots__/CategoryAndTemplate.test.js.snap +0 -64
  79. data/webpack/JobWizard/steps/form/__tests__/GroupedSelectField.test.js +0 -38
  80. data/webpack/JobWizard/steps/form/__tests__/SelectField.test.js +0 -23
  81. data/webpack/JobWizard/steps/form/__tests__/__snapshots__/GroupedSelectField.test.js.snap +0 -36
  82. data/webpack/JobWizard/steps/form/__tests__/__snapshots__/SelectField.test.js.snap +0 -22
  83. data/webpack/fills_index.js +0 -11
@@ -0,0 +1,33 @@
1
+ import React, { useState } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { FormGroup, TextInput, ValidatedOptions } from '@patternfly/react-core';
4
+ import { translate as __ } from 'foremanReact/common/I18n';
5
+
6
+ export const NumberInput = ({ formProps, inputProps }) => {
7
+ const [validated, setValidated] = useState();
8
+ return (
9
+ <FormGroup
10
+ {...formProps}
11
+ helperTextInvalid={__('Has to be a number')}
12
+ validated={validated}
13
+ >
14
+ <TextInput
15
+ type="text"
16
+ {...inputProps}
17
+ onChange={newValue => {
18
+ setValidated(
19
+ /^\d+$/.test(newValue) || newValue === ''
20
+ ? ValidatedOptions.noval
21
+ : ValidatedOptions.error
22
+ );
23
+ inputProps.onChange(newValue);
24
+ }}
25
+ />
26
+ </FormGroup>
27
+ );
28
+ };
29
+
30
+ NumberInput.propTypes = {
31
+ formProps: PropTypes.object.isRequired,
32
+ inputProps: PropTypes.object.isRequired,
33
+ };
@@ -2,14 +2,28 @@ import React, { useState } from 'react';
2
2
  import { FormGroup, Select, SelectOption } from '@patternfly/react-core';
3
3
  import PropTypes from 'prop-types';
4
4
 
5
- export const SelectField = ({ label, fieldId, options, value, setValue }) => {
5
+ export const SelectField = ({
6
+ label,
7
+ fieldId,
8
+ options,
9
+ value,
10
+ setValue,
11
+ labelIcon,
12
+ isRequired,
13
+ ...props
14
+ }) => {
6
15
  const onSelect = (event, selection) => {
7
16
  setValue(selection);
8
17
  setIsOpen(false);
9
18
  };
10
19
  const [isOpen, setIsOpen] = useState(false);
11
20
  return (
12
- <FormGroup label={label} fieldId={fieldId}>
21
+ <FormGroup
22
+ label={label}
23
+ fieldId={fieldId}
24
+ labelIcon={labelIcon}
25
+ isRequired={isRequired}
26
+ >
13
27
  <Select
14
28
  selections={value}
15
29
  onSelect={onSelect}
@@ -17,6 +31,8 @@ export const SelectField = ({ label, fieldId, options, value, setValue }) => {
17
31
  isOpen={isOpen}
18
32
  className="without_select2"
19
33
  maxHeight="45vh"
34
+ menuAppendTo={() => document.body}
35
+ {...props}
20
36
  >
21
37
  {options.map((option, index) => (
22
38
  <SelectOption key={index} value={option} />
@@ -26,14 +42,19 @@ export const SelectField = ({ label, fieldId, options, value, setValue }) => {
26
42
  );
27
43
  };
28
44
  SelectField.propTypes = {
29
- label: PropTypes.string.isRequired,
45
+ label: PropTypes.string,
30
46
  fieldId: PropTypes.string.isRequired,
31
47
  options: PropTypes.array,
32
48
  value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
33
49
  setValue: PropTypes.func.isRequired,
50
+ labelIcon: PropTypes.node,
51
+ isRequired: PropTypes.bool,
34
52
  };
35
53
 
36
54
  SelectField.defaultProps = {
55
+ label: null,
37
56
  options: [],
57
+ labelIcon: null,
38
58
  value: null,
59
+ isRequired: false,
39
60
  };
@@ -0,0 +1,76 @@
1
+ import React from 'react';
2
+ import { Provider } from 'react-redux';
3
+ import configureMockStore from 'redux-mock-store';
4
+ import * as patternfly from '@patternfly/react-core';
5
+ import { mount, shallow } from '@theforeman/test';
6
+ import { formatter } from '../Formatter';
7
+
8
+ jest.spyOn(patternfly, 'Select');
9
+ jest.spyOn(patternfly, 'SelectOption');
10
+ jest.spyOn(patternfly, 'FormGroup');
11
+ patternfly.Select.mockImplementation(props => <div props={props} />);
12
+ patternfly.SelectOption.mockImplementation(props => <div props={props} />);
13
+ patternfly.FormGroup.mockImplementation(props => <div props={props} />);
14
+ const mockStore = configureMockStore([]);
15
+ const store = mockStore({});
16
+
17
+ describe('formatter', () => {
18
+ it('render date input', () => {
19
+ const props = {
20
+ name: 'date adv',
21
+ required: false,
22
+ options: '',
23
+ advanced: true,
24
+ value_type: 'date',
25
+ resource_type: 'ansible_roles',
26
+ default: '',
27
+ hidden_value: false,
28
+ };
29
+ expect(shallow(formatter(props, {}, jest.fn()))).toMatchSnapshot();
30
+ });
31
+ it('render text input', () => {
32
+ const props = {
33
+ name: 'plain adv hidden',
34
+ required: true,
35
+ description: 'some Description',
36
+ options: '',
37
+ advanced: true,
38
+ value_type: 'plain',
39
+ resource_type: 'ansible_roles',
40
+ default: 'Default val',
41
+ hidden_value: true,
42
+ };
43
+ expect(shallow(formatter(props, {}, jest.fn()))).toMatchSnapshot();
44
+ });
45
+ it('render select input', () => {
46
+ const props = {
47
+ name: 'adv plain search',
48
+ required: false,
49
+ input_type: 'user',
50
+ options: 'option 1\r\noption 2\r\noption 3\r\noption 4',
51
+ advanced: true,
52
+ value_type: 'plain',
53
+ resource_type: 'ansible_roles',
54
+ default: '',
55
+ hidden_value: false,
56
+ };
57
+ expect(shallow(formatter(props, {}, jest.fn()))).toMatchSnapshot();
58
+ });
59
+ it('render search input', () => {
60
+ const props = {
61
+ name: 'search adv',
62
+ required: false,
63
+ options: '',
64
+ advanced: true,
65
+ value_type: 'search',
66
+ resource_type: 'foreman_tasks/tasks',
67
+ default: '',
68
+ hidden_value: false,
69
+ };
70
+ expect(
71
+ mount(
72
+ <Provider store={store}>{formatter(props, {}, jest.fn())}</Provider>
73
+ )
74
+ ).toMatchSnapshot();
75
+ });
76
+ });
@@ -1,2 +1,19 @@
1
- const SearchBar = () => jest.fn();
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ const SearchBar = ({ onChange }) => (
5
+ <input
6
+ className="foreman-search"
7
+ onChange={onChange}
8
+ placeholder="Filter..."
9
+ />
10
+ );
2
11
  export default SearchBar;
12
+
13
+ SearchBar.propTypes = {
14
+ onChange: PropTypes.func,
15
+ };
16
+
17
+ SearchBar.defaultProps = {
18
+ onChange: () => null,
19
+ };
@@ -1,2 +1,21 @@
1
- export const selectAPIStatus = () => 'RESOLVED';
2
- export const selectAPIResponse = state => state;
1
+ export const selectAPI = state => state;
2
+ export const selectAPIByKey = (state, key) => selectAPI(state)[key] || {};
3
+
4
+ export const selectAPIStatus = (state, key) =>
5
+ selectAPIByKey(state, key).status;
6
+
7
+ export const selectAPIPayload = (state, key) =>
8
+ selectAPIByKey(state, key).payload || {};
9
+
10
+ export const selectAPIResponse = (state, key) =>
11
+ selectAPIByKey(state, key).response || {};
12
+
13
+ export const selectAPIError = (state, key) =>
14
+ selectAPIStatus(state, key) === 'ERROR'
15
+ ? selectAPIResponse(state, key)
16
+ : null;
17
+
18
+ export const selectAPIErrorMessage = (state, key) => {
19
+ const error = selectAPIError(state, key);
20
+ return error && error.message;
21
+ };
@@ -1,8 +1,10 @@
1
1
  import { registerRoutes } from 'foremanReact/routes/RoutingService';
2
2
  import routes from './Routes/routes';
3
+ import fillregistrationAdvanced from './react_app/extend/fillregistrationAdvanced';
4
+ import fillRecentJobsCard from './react_app/extend/fillRecentJobsCard';
3
5
  import registerReducers from './react_app/extend/reducers';
4
- import registerFills from './react_app/extend/fills';
5
6
 
6
- registerRoutes('foreman_remote_execution', routes);
7
7
  registerReducers();
8
- registerFills();
8
+ registerRoutes('foreman_remote_execution', routes);
9
+ fillRecentJobsCard();
10
+ fillregistrationAdvanced();
data/webpack/index.js CHANGED
@@ -1,6 +1,9 @@
1
1
  import componentRegistry from 'foremanReact/components/componentRegistry';
2
2
  import JobInvocationContainer from './react_app/components/jobInvocations';
3
3
  import TargetingHosts from './react_app/components/TargetingHosts';
4
+ import registerReducers from './react_app/extend/reducers';
5
+
6
+ registerReducers();
4
7
 
5
8
  const components = [
6
9
  { name: 'JobInvocationContainer', type: JobInvocationContainer },
@@ -6,15 +6,11 @@ import Skeleton from 'react-loading-skeleton';
6
6
  import ElipsisWithTooltip from 'react-ellipsis-with-tooltip';
7
7
 
8
8
  import { Grid, GridItem } from '@patternfly/react-core';
9
- import {
10
- OkIcon,
11
- ErrorCircleOIcon,
12
- } from '@patternfly/react-icons/dist/js/icons';
13
9
  import {
14
10
  PropertiesSidePanel,
15
11
  PropertyItem,
16
12
  } from '@patternfly/react-catalog-view-extension';
17
- import { ArrowIcon } from '@patternfly/react-icons';
13
+ import { ArrowIcon, ErrorCircleOIcon, OkIcon } from '@patternfly/react-icons';
18
14
 
19
15
  import { useAPI } from 'foremanReact/common/hooks/API/APIHooks';
20
16
  import CardItem from 'foremanReact/components/HostDetails/Templates/CardItem/CardTemplate';
@@ -9,9 +9,14 @@ import {
9
9
  } from '../TargetingHostsSelectors';
10
10
 
11
11
  const state = {
12
- hosts: [],
13
- autoRefresh: 'true',
14
- total_hosts: 0,
12
+ TARGETING_HOSTS: {
13
+ status: 'RESOLVED',
14
+ response: {
15
+ hosts: [1, 2],
16
+ total_hosts: 2,
17
+ autoRefresh: 'true',
18
+ },
19
+ },
15
20
  };
16
21
 
17
22
  const fixtures = {
@@ -27,6 +27,7 @@ exports[`TargetingHostsPage renders 1`] = `
27
27
  "controller": "hosts",
28
28
  }
29
29
  }
30
+ onChange={[Function]}
30
31
  onSearch={[Function]}
31
32
  />
32
33
  </Col>
@@ -4,8 +4,13 @@ exports[`TargetingHostsSelectors should return apiStatus 1`] = `"RESOLVED"`;
4
4
 
5
5
  exports[`TargetingHostsSelectors should return autoRefresh 1`] = `"true"`;
6
6
 
7
- exports[`TargetingHostsSelectors should return hosts 1`] = `Array []`;
7
+ exports[`TargetingHostsSelectors should return hosts 1`] = `
8
+ Array [
9
+ 1,
10
+ 2,
11
+ ]
12
+ `;
8
13
 
9
14
  exports[`TargetingHostsSelectors should return intervalExists 1`] = `false`;
10
15
 
11
- exports[`TargetingHostsSelectors should return totalHosts 1`] = `0`;
16
+ exports[`TargetingHostsSelectors should return totalHosts 1`] = `2`;
@@ -2,9 +2,10 @@ import React from 'react';
2
2
  import { addGlobalFill } from 'foremanReact/components/common/Fill/GlobalFill';
3
3
  import RecentJobsCard from '../components/RecentJobsCard';
4
4
 
5
- export default addGlobalFill(
6
- 'details-cards',
7
- 'rex-host-details-latest-jobs',
8
- <RecentJobsCard />,
9
- 1000
10
- );
5
+ export default () =>
6
+ addGlobalFill(
7
+ 'details-cards',
8
+ 'rex-host-details-latest-jobs',
9
+ <RecentJobsCard />,
10
+ 1000
11
+ );
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { addGlobalFill } from 'foremanReact/components/common/Fill/GlobalFill';
3
+ import RexInterface from '../components/RegistrationExtension/RexInterface';
4
+
5
+ export default () =>
6
+ addGlobalFill(
7
+ 'registrationAdvanced',
8
+ 'foreman-remote-exectuion-rex-interface',
9
+ <RexInterface key="registration-rex-interface" />,
10
+ 100
11
+ );
@@ -1,4 +1,5 @@
1
1
  import { registerReducer } from 'foremanReact/common/MountingService';
2
2
  import rootReducer from '../redux/reducers';
3
3
 
4
- export default registerReducer('foremanRemoteExecutionReducers', rootReducer);
4
+ export default () =>
5
+ registerReducer('foremanRemoteExecutionReducers', rootReducer);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_remote_execution
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.0
4
+ version: 4.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Foreman Remote Execution team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-10 00:00:00.000000000 Z
11
+ date: 2021-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deface
@@ -171,7 +171,6 @@ files:
171
171
  - app/models/concerns/foreman_remote_execution/foreman_tasks_triggering_extensions.rb
172
172
  - app/models/concerns/foreman_remote_execution/host_extensions.rb
173
173
  - app/models/concerns/foreman_remote_execution/nic_extensions.rb
174
- - app/models/concerns/foreman_remote_execution/orchestration/ssh.rb
175
174
  - app/models/concerns/foreman_remote_execution/smart_proxy_extensions.rb
176
175
  - app/models/concerns/foreman_remote_execution/subnet_extensions.rb
177
176
  - app/models/concerns/foreman_remote_execution/taxonomy_extensions.rb
@@ -180,6 +179,7 @@ files:
180
179
  - app/models/concerns/foreman_remote_execution/template_overrides.rb
181
180
  - app/models/concerns/foreman_remote_execution/user_extensions.rb
182
181
  - app/models/foreign_input_set.rb
182
+ - app/models/host_proxy_invocation.rb
183
183
  - app/models/host_status/execution_status.rb
184
184
  - app/models/input_template_renderer.rb
185
185
  - app/models/invocation_provider_input_value.rb
@@ -324,6 +324,7 @@ files:
324
324
  - db/migrate/20200623073022_rename_sudo_password_to_effective_user_password.rb
325
325
  - db/migrate/20200820122057_add_proxy_selector_override_to_remote_execution_feature.rb
326
326
  - db/migrate/20210312074713_add_provider_inputs.rb
327
+ - db/migrate/2021051713291621250977_add_host_proxy_invocations.rb
327
328
  - db/seeds.d/100-assign_features_with_templates.rb
328
329
  - db/seeds.d/20-permissions.rb
329
330
  - db/seeds.d/50-notification_blueprints.rb
@@ -380,7 +381,6 @@ files:
380
381
  - test/functional/job_templates_controller_test.rb
381
382
  - test/functional/ui_job_wizard_controller_test.rb
382
383
  - test/helpers/remote_execution_helper_test.rb
383
- - test/models/orchestration/ssh_test.rb
384
384
  - test/support/remote_execution_helper.rb
385
385
  - test/test_plugin_helper.rb
386
386
  - test/unit/actions/run_host_job_test.rb
@@ -404,19 +404,30 @@ files:
404
404
  - webpack/JobWizard/JobWizard.scss
405
405
  - webpack/JobWizard/JobWizardConstants.js
406
406
  - webpack/JobWizard/JobWizardSelectors.js
407
- - webpack/JobWizard/__tests__/JobWizard.test.js
408
- - webpack/JobWizard/__tests__/__snapshots__/JobWizard.test.js.snap
407
+ - webpack/JobWizard/__tests__/__snapshots__/integration.test.js.snap
408
+ - webpack/JobWizard/__tests__/fixtures.js
409
+ - webpack/JobWizard/__tests__/integration.test.js
409
410
  - webpack/JobWizard/index.js
411
+ - webpack/JobWizard/steps/AdvancedFields/AdvancedFields.js
412
+ - webpack/JobWizard/steps/AdvancedFields/DescriptionField.js
413
+ - webpack/JobWizard/steps/AdvancedFields/Fields.js
414
+ - webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js
415
+ - webpack/JobWizard/steps/AdvancedFields/__tests__/DescriptionField.test.js
410
416
  - webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js
411
417
  - webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.test.js
412
- - webpack/JobWizard/steps/CategoryAndTemplate/__snapshots__/CategoryAndTemplate.test.js.snap
413
418
  - webpack/JobWizard/steps/CategoryAndTemplate/index.js
419
+ - webpack/JobWizard/steps/Schedule/QueryType.js
420
+ - webpack/JobWizard/steps/Schedule/RepeatOn.js
421
+ - webpack/JobWizard/steps/Schedule/ScheduleType.js
422
+ - webpack/JobWizard/steps/Schedule/StartEndDates.js
423
+ - webpack/JobWizard/steps/Schedule/__tests__/StartEndDates.test.js
424
+ - webpack/JobWizard/steps/Schedule/index.js
425
+ - webpack/JobWizard/steps/form/FormHelpers.js
426
+ - webpack/JobWizard/steps/form/Formatter.js
414
427
  - webpack/JobWizard/steps/form/GroupedSelectField.js
428
+ - webpack/JobWizard/steps/form/NumberInput.js
415
429
  - webpack/JobWizard/steps/form/SelectField.js
416
- - webpack/JobWizard/steps/form/__tests__/GroupedSelectField.test.js
417
- - webpack/JobWizard/steps/form/__tests__/SelectField.test.js
418
- - webpack/JobWizard/steps/form/__tests__/__snapshots__/GroupedSelectField.test.js.snap
419
- - webpack/JobWizard/steps/form/__tests__/__snapshots__/SelectField.test.js.snap
430
+ - webpack/JobWizard/steps/form/__tests__/Formatter.test.js.example
420
431
  - webpack/Routes/routes.js
421
432
  - webpack/__mocks__/foremanReact/common/I18n.js
422
433
  - webpack/__mocks__/foremanReact/common/helpers.js
@@ -429,7 +440,6 @@ files:
429
440
  - webpack/__mocks__/foremanReact/redux/API/index.js
430
441
  - webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware/IntervalSelectors.js
431
442
  - webpack/__mocks__/foremanReact/routes/common/PageLayout/PageLayout.js
432
- - webpack/fills_index.js
433
443
  - webpack/global_index.js
434
444
  - webpack/index.js
435
445
  - webpack/react_app/components/RecentJobsCard/RecentJobsCard.js
@@ -462,7 +472,8 @@ files:
462
472
  - webpack/react_app/components/jobInvocations/AggregateStatus/index.js
463
473
  - webpack/react_app/components/jobInvocations/AggregateStatus/index.test.js
464
474
  - webpack/react_app/components/jobInvocations/index.js
465
- - webpack/react_app/extend/fills.js
475
+ - webpack/react_app/extend/fillRecentJobsCard.js
476
+ - webpack/react_app/extend/fillregistrationAdvanced.js
466
477
  - webpack/react_app/extend/reducers.js
467
478
  - webpack/react_app/redux/actions/jobInvocations/index.js
468
479
  - webpack/react_app/redux/consts.js
@@ -510,7 +521,6 @@ test_files:
510
521
  - test/functional/job_templates_controller_test.rb
511
522
  - test/functional/ui_job_wizard_controller_test.rb
512
523
  - test/helpers/remote_execution_helper_test.rb
513
- - test/models/orchestration/ssh_test.rb
514
524
  - test/support/remote_execution_helper.rb
515
525
  - test/test_plugin_helper.rb
516
526
  - test/unit/actions/run_host_job_test.rb