foreman_remote_execution 4.4.0 → 4.5.3

Sign up to get free protection for your applications and to get access to all the features.
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