foreman_templates 7.0.1 → 7.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/.babelrc +16 -0
  3. data/lib/foreman_templates/version.rb +1 -1
  4. data/package.json +68 -0
  5. data/webpack/ForemanTemplates.js +29 -0
  6. data/webpack/Routes.js +33 -0
  7. data/webpack/__mocks__/foremanReact/common/helpers.js +27 -0
  8. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +2 -0
  9. data/webpack/__mocks__/foremanReact/components/common/forms/CommonForm.js +2 -0
  10. data/webpack/__mocks__/foremanReact/components/common/forms/Form.js +2 -0
  11. data/webpack/__mocks__/foremanReact/components/common/forms/TextField.js +2 -0
  12. data/webpack/__mocks__/foremanReact/redux/actions/common/forms.js +1 -0
  13. data/webpack/__mocks__/foremanReact/routes/common/PageLayout/PageLayout.js +2 -0
  14. data/webpack/__tests__/__snapshots__/helpers.test.js.snap +5 -0
  15. data/webpack/__tests__/helpers.test.js +17 -0
  16. data/webpack/components/NewTemplateSync/NewTemplateSync.js +60 -0
  17. data/webpack/components/NewTemplateSync/NewTemplateSync.scss +19 -0
  18. data/webpack/components/NewTemplateSync/NewTemplateSyncActions.js +39 -0
  19. data/webpack/components/NewTemplateSync/NewTemplateSyncReducer.js +34 -0
  20. data/webpack/components/NewTemplateSync/NewTemplateSyncSelectors.js +7 -0
  21. data/webpack/components/NewTemplateSync/__fixtures__/templateSyncSettings.fixtures.js +71 -0
  22. data/webpack/components/NewTemplateSync/__tests__/NewTemplateSync.test.js +31 -0
  23. data/webpack/components/NewTemplateSync/__tests__/NewTemplateSyncReducer.test.js +55 -0
  24. data/webpack/components/NewTemplateSync/__tests__/NewTemplateSyncSelectors.test.js +28 -0
  25. data/webpack/components/NewTemplateSync/__tests__/__snapshots__/NewTemplateSync.test.js.snap +53 -0
  26. data/webpack/components/NewTemplateSync/__tests__/__snapshots__/NewTemplateSyncReducer.test.js.snap +74 -0
  27. data/webpack/components/NewTemplateSync/__tests__/__snapshots__/NewTemplateSyncSelectors.test.js.snap +59 -0
  28. data/webpack/components/NewTemplateSync/components/ButtonTooltip.js +23 -0
  29. data/webpack/components/NewTemplateSync/components/NewTemplateSyncForm/NewTemplateSyncForm.js +145 -0
  30. data/webpack/components/NewTemplateSync/components/NewTemplateSyncForm/NewTemplateSyncFormConstants.js +1 -0
  31. data/webpack/components/NewTemplateSync/components/NewTemplateSyncForm/NewTemplateSyncFormSelectors.js +24 -0
  32. data/webpack/components/NewTemplateSync/components/NewTemplateSyncForm/__tests__/NewTemplateSyncForm.test.js +42 -0
  33. data/webpack/components/NewTemplateSync/components/NewTemplateSyncForm/__tests__/NewTemplateSyncFormSelectors.test.js +37 -0
  34. data/webpack/components/NewTemplateSync/components/NewTemplateSyncForm/__tests__/__snapshots__/NewTemplateSyncForm.test.js.snap +176 -0
  35. data/webpack/components/NewTemplateSync/components/NewTemplateSyncForm/__tests__/__snapshots__/NewTemplateSyncFormSelectors.test.js.snap +42 -0
  36. data/webpack/components/NewTemplateSync/components/NewTemplateSyncForm/index.js +44 -0
  37. data/webpack/components/NewTemplateSync/components/SyncSettingField.js +54 -0
  38. data/webpack/components/NewTemplateSync/components/SyncSettingFields.js +69 -0
  39. data/webpack/components/NewTemplateSync/components/SyncTypeRadios.js +52 -0
  40. data/webpack/components/NewTemplateSync/components/TextButtonField/BlankOption.js +19 -0
  41. data/webpack/components/NewTemplateSync/components/TextButtonField/CheckboxField.js +15 -0
  42. data/webpack/components/NewTemplateSync/components/TextButtonField/FieldType.js +46 -0
  43. data/webpack/components/NewTemplateSync/components/TextButtonField/InputField.js +14 -0
  44. data/webpack/components/NewTemplateSync/components/TextButtonField/RenderField.js +74 -0
  45. data/webpack/components/NewTemplateSync/components/TextButtonField/SelectField.js +24 -0
  46. data/webpack/components/NewTemplateSync/components/TextButtonField/index.js +69 -0
  47. data/webpack/components/NewTemplateSync/components/__tests__/SyncSettingField.test.js +34 -0
  48. data/webpack/components/NewTemplateSync/components/__tests__/SyncSettingFields.test.js +33 -0
  49. data/webpack/components/NewTemplateSync/components/__tests__/SyncTypeRadios.test.js +20 -0
  50. data/webpack/components/NewTemplateSync/components/__tests__/TextButtonField.test.js +65 -0
  51. data/webpack/components/NewTemplateSync/components/__tests__/__snapshots__/SyncSettingField.test.js.snap +131 -0
  52. data/webpack/components/NewTemplateSync/components/__tests__/__snapshots__/SyncSettingFields.test.js.snap +94 -0
  53. data/webpack/components/NewTemplateSync/components/__tests__/__snapshots__/SyncTypeRadios.test.js.snap +46 -0
  54. data/webpack/components/NewTemplateSync/components/__tests__/__snapshots__/TextButtonField.test.js.snap +112 -0
  55. data/webpack/components/NewTemplateSync/index.js +32 -0
  56. data/webpack/components/PageNotFound.js +13 -0
  57. data/webpack/components/PermissionDenied.js +33 -0
  58. data/webpack/components/TemplateSyncResult/TemplateSyncResult.js +61 -0
  59. data/webpack/components/TemplateSyncResult/TemplateSyncResult.scss +39 -0
  60. data/webpack/components/TemplateSyncResult/TemplateSyncResultActions.js +4 -0
  61. data/webpack/components/TemplateSyncResult/TemplateSyncResultHelpers.js +6 -0
  62. data/webpack/components/TemplateSyncResult/TemplateSyncResultReducer.js +33 -0
  63. data/webpack/components/TemplateSyncResult/TemplateSyncResultSelectors.js +1 -0
  64. data/webpack/components/TemplateSyncResult/__fixtures__/templateSyncResult.fixtures.js +86 -0
  65. data/webpack/components/TemplateSyncResult/__tests__/TemplateSyncResult.test.js +37 -0
  66. data/webpack/components/TemplateSyncResult/__tests__/TemplateSyncResultReducer.test.js +48 -0
  67. data/webpack/components/TemplateSyncResult/__tests__/__snapshots__/TemplateSyncResult.test.js.snap +112 -0
  68. data/webpack/components/TemplateSyncResult/__tests__/__snapshots__/TemplateSyncResultReducer.test.js.snap +88 -0
  69. data/webpack/components/TemplateSyncResult/components/EmptySyncResult.js +25 -0
  70. data/webpack/components/TemplateSyncResult/components/FinishedSyncResult.js +77 -0
  71. data/webpack/components/TemplateSyncResult/components/ListViewHeader.js +38 -0
  72. data/webpack/components/TemplateSyncResult/components/SyncResultList.js +41 -0
  73. data/webpack/components/TemplateSyncResult/components/SyncedTemplate/EmptyInfoItem.js +16 -0
  74. data/webpack/components/TemplateSyncResult/components/SyncedTemplate/IconInfoItem.js +21 -0
  75. data/webpack/components/TemplateSyncResult/components/SyncedTemplate/InfoItem.js +34 -0
  76. data/webpack/components/TemplateSyncResult/components/SyncedTemplate/LinkInfoItem.js +37 -0
  77. data/webpack/components/TemplateSyncResult/components/SyncedTemplate/StringInfoItem.js +50 -0
  78. data/webpack/components/TemplateSyncResult/components/SyncedTemplate/helpers.js +128 -0
  79. data/webpack/components/TemplateSyncResult/components/SyncedTemplate/index.js +33 -0
  80. data/webpack/components/TemplateSyncResult/components/__tests__/SyncResultList.test.js +27 -0
  81. data/webpack/components/TemplateSyncResult/components/__tests__/SyncedTemplate.test.js +30 -0
  82. data/webpack/components/TemplateSyncResult/components/__tests__/__snapshots__/SyncResultList.test.js.snap +102 -0
  83. data/webpack/components/TemplateSyncResult/components/__tests__/__snapshots__/SyncedTemplate.test.js.snap +548 -0
  84. data/webpack/components/TemplateSyncResult/index.js +13 -0
  85. data/webpack/consts.js +6 -0
  86. data/webpack/index.js +11 -0
  87. data/webpack/reducer.js +6 -0
  88. data/webpack/testSetup.js +11 -0
  89. data/webpack/withProtectedView.js +16 -0
  90. metadata +89 -2
@@ -0,0 +1,54 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { FieldLevelHelp } from 'patternfly-react';
4
+
5
+ import TextButtonField from './TextButtonField';
6
+ import ButtonTooltip from './ButtonTooltip';
7
+
8
+ const SyncSettingField = ({ setting, resetField, disabled }) => {
9
+ const label = settingObj => `${settingObj.fullName} `;
10
+
11
+ const fieldSelector = settingObj => {
12
+ if (settingObj.settingsType === 'boolean') {
13
+ return 'checkbox';
14
+ }
15
+
16
+ if (settingObj.selection.length !== 0) {
17
+ return 'select';
18
+ }
19
+
20
+ return 'text';
21
+ };
22
+
23
+ const handleReset = (settingName, settingValue) => {
24
+ resetField(settingName, settingValue);
25
+ };
26
+
27
+ return (
28
+ <TextButtonField
29
+ name={setting.name}
30
+ label={label(setting)}
31
+ blank={{}}
32
+ item={setting}
33
+ buttonAttrs={{
34
+ buttonText: <ButtonTooltip tooltipId={setting.name} />,
35
+ buttonAction: () => handleReset(setting.name, setting.value),
36
+ }}
37
+ fieldSelector={fieldSelector}
38
+ disabled={disabled}
39
+ fieldRequired={setting.required}
40
+ validate={setting.validate}
41
+ tooltipHelp={<FieldLevelHelp content={setting.description} />}
42
+ >
43
+ {setting.value}
44
+ </TextButtonField>
45
+ );
46
+ };
47
+
48
+ SyncSettingField.propTypes = {
49
+ setting: PropTypes.object.isRequired,
50
+ resetField: PropTypes.func.isRequired,
51
+ disabled: PropTypes.bool.isRequired,
52
+ };
53
+
54
+ export default SyncSettingField;
@@ -0,0 +1,69 @@
1
+ import React from 'react';
2
+ import { memoize } from 'lodash';
3
+ import PropTypes from 'prop-types';
4
+
5
+ import SyncSettingField from './SyncSettingField';
6
+
7
+ const repoFormat = memoize(formatAry => value => {
8
+ if (value) {
9
+ const valid = formatAry
10
+ .map(item => value.startsWith(item))
11
+ .reduce((memo, item) => item || memo, false);
12
+
13
+ if (valid) {
14
+ return undefined;
15
+ }
16
+ }
17
+
18
+ return `Invalid repo format, must start with one of: ${formatAry.join(', ')}`;
19
+ });
20
+
21
+ const SyncSettingsFields = ({
22
+ importSettings,
23
+ exportSettings,
24
+ syncType,
25
+ resetField,
26
+ disabled,
27
+ validationData,
28
+ }) => {
29
+ const addValidationToSetting = (setting, validations) =>
30
+ setting.name === 'repo'
31
+ ? setting.merge({
32
+ required: true,
33
+ validate: [repoFormat(validations.repo)],
34
+ })
35
+ : setting;
36
+
37
+ const settingsAry = syncType === 'import' ? importSettings : exportSettings;
38
+
39
+ return (
40
+ <React.Fragment>
41
+ {settingsAry
42
+ .map(setting => addValidationToSetting(setting, validationData))
43
+ .map(setting => (
44
+ <SyncSettingField
45
+ setting={setting}
46
+ key={setting.name}
47
+ disabled={disabled}
48
+ resetField={resetField}
49
+ />
50
+ ))}
51
+ </React.Fragment>
52
+ );
53
+ };
54
+
55
+ SyncSettingsFields.propTypes = {
56
+ importSettings: PropTypes.array.isRequired,
57
+ exportSettings: PropTypes.array.isRequired,
58
+ syncType: PropTypes.string.isRequired,
59
+ resetField: PropTypes.func.isRequired,
60
+ disabled: PropTypes.bool,
61
+ validationData: PropTypes.object,
62
+ };
63
+
64
+ SyncSettingsFields.defaultProps = {
65
+ disabled: false,
66
+ validationData: {},
67
+ };
68
+
69
+ export default SyncSettingsFields;
@@ -0,0 +1,52 @@
1
+ import React from 'react';
2
+
3
+ import { Radio } from 'patternfly-react';
4
+ import PropTypes from 'prop-types';
5
+
6
+ import CommonForm from 'foremanReact/components/common/forms/CommonForm';
7
+
8
+ const SyncTypeRadios = ({
9
+ controlLabel,
10
+ radios,
11
+ name,
12
+ className = '',
13
+ inputClassName = 'col-md-6',
14
+ disabled = false,
15
+ }) => (
16
+ <CommonForm
17
+ label={controlLabel}
18
+ className={className}
19
+ inputClassName={inputClassName}
20
+ >
21
+ {radios.map((item, index) => (
22
+ <Radio
23
+ key={index}
24
+ inline
25
+ title={item.label}
26
+ checked={item.checked}
27
+ disabled={disabled}
28
+ value={item.value}
29
+ onChange={item.onChange}
30
+ >
31
+ {item.label}
32
+ </Radio>
33
+ ))}
34
+ </CommonForm>
35
+ );
36
+
37
+ SyncTypeRadios.propTypes = {
38
+ controlLabel: PropTypes.string.isRequired,
39
+ radios: PropTypes.array.isRequired,
40
+ name: PropTypes.string.isRequired,
41
+ className: PropTypes.string,
42
+ inputClassName: PropTypes.string,
43
+ disabled: PropTypes.bool,
44
+ };
45
+
46
+ SyncTypeRadios.defaultProps = {
47
+ className: undefined,
48
+ inputClassName: undefined,
49
+ disabled: false,
50
+ };
51
+
52
+ export default SyncTypeRadios;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ const BlankOption = ({ blank }) => {
5
+ if (Object.keys(blank).length === 0) {
6
+ return null;
7
+ }
8
+ return (
9
+ <option key={blank.value} value={blank.value}>
10
+ {blank.label}
11
+ </option>
12
+ );
13
+ };
14
+
15
+ BlankOption.propTypes = {
16
+ blank: PropTypes.object.isRequired,
17
+ };
18
+
19
+ export default BlankOption;
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { Checkbox } from 'patternfly-react';
3
+ import PropTypes from 'prop-types';
4
+
5
+ const CheckboxField = ({ input, item, disabled }) => (
6
+ <Checkbox {...input} disabled={disabled} checked={input.value} />
7
+ );
8
+
9
+ CheckboxField.propTypes = {
10
+ input: PropTypes.object.isRequired,
11
+ item: PropTypes.object.isRequired,
12
+ disabled: PropTypes.bool.isRequired,
13
+ };
14
+
15
+ export default CheckboxField;
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ import InputField from './InputField';
5
+ import SelectField from './SelectField';
6
+ import CheckboxField from './CheckboxField';
7
+
8
+ const FieldType = ({ item, fieldSelector, input, disabled, blank }) => {
9
+ if (!fieldSelector) {
10
+ return <InputField input={input} disabled={disabled} />;
11
+ }
12
+
13
+ switch (fieldSelector(item)) {
14
+ case 'text':
15
+ return <InputField input={input} disabled={disabled} />;
16
+ case 'select':
17
+ return (
18
+ <SelectField
19
+ input={input}
20
+ blank={blank}
21
+ item={item}
22
+ disabled={disabled}
23
+ />
24
+ );
25
+ case 'checkbox':
26
+ return <CheckboxField input={input} item={item} disabled={disabled} />;
27
+ default:
28
+ throw new Error(`Unknown field type ${fieldSelector(item)} for ${item}`);
29
+ }
30
+ };
31
+
32
+ FieldType.propTypes = {
33
+ item: PropTypes.object.isRequired,
34
+ fieldSelector: PropTypes.func,
35
+ input: PropTypes.object.isRequired,
36
+ disabled: PropTypes.bool,
37
+ blank: PropTypes.object,
38
+ };
39
+
40
+ FieldType.defaultProps = {
41
+ fieldSelector: null,
42
+ disabled: false,
43
+ blank: {},
44
+ };
45
+
46
+ export default FieldType;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { FormControl } from 'patternfly-react';
3
+ import PropTypes from 'prop-types';
4
+
5
+ const InputField = ({ input, disabled }) => (
6
+ <FormControl {...input} type="text" disabled={disabled} />
7
+ );
8
+
9
+ InputField.propTypes = {
10
+ input: PropTypes.object.isRequired,
11
+ disabled: PropTypes.bool.isRequired,
12
+ };
13
+
14
+ export default InputField;
@@ -0,0 +1,74 @@
1
+ import React from 'react';
2
+ import CommonForm from 'foremanReact/components/common/forms/CommonForm';
3
+ import { InputGroup, Button } from 'patternfly-react';
4
+ import PropTypes from 'prop-types';
5
+
6
+ import FieldType from './FieldType';
7
+
8
+ const RenderField = ({
9
+ input,
10
+ label,
11
+ className,
12
+ inputClassName,
13
+ fieldRequired,
14
+ disabled,
15
+ blank,
16
+ item,
17
+ fieldSelector,
18
+ tooltipHelp,
19
+ meta: { error, touched },
20
+ buttonAttrs: { buttonText, buttonAction },
21
+ }) => (
22
+ <CommonForm
23
+ label={label}
24
+ className={className}
25
+ inputClassName={inputClassName}
26
+ required={fieldRequired}
27
+ error={error}
28
+ touched={touched}
29
+ tooltipHelp={tooltipHelp}
30
+ >
31
+ <InputGroup>
32
+ <FieldType
33
+ item={item}
34
+ fieldSelector={fieldSelector}
35
+ input={input}
36
+ disabled={disabled}
37
+ blank={blank}
38
+ />
39
+ <InputGroup.Button className="left-padded">
40
+ <Button onClick={buttonAction} disabled={disabled}>
41
+ {buttonText}
42
+ </Button>
43
+ </InputGroup.Button>
44
+ </InputGroup>
45
+ </CommonForm>
46
+ );
47
+
48
+ RenderField.propTypes = {
49
+ input: PropTypes.object.isRequired,
50
+ label: PropTypes.string.isRequired,
51
+ className: PropTypes.string,
52
+ inputClassName: PropTypes.string,
53
+ fieldRequired: PropTypes.bool,
54
+ disabled: PropTypes.bool.isRequired,
55
+ blank: PropTypes.object,
56
+ item: PropTypes.object.isRequired,
57
+ fieldSelector: PropTypes.func,
58
+ tooltipHelp: PropTypes.node,
59
+ meta: PropTypes.object,
60
+ buttonAttrs: PropTypes.object,
61
+ };
62
+
63
+ RenderField.defaultProps = {
64
+ className: '',
65
+ inputClassName: 'col-md-4',
66
+ fieldRequired: false,
67
+ blank: {},
68
+ fieldSelector: null,
69
+ tooltipHelp: null,
70
+ meta: {},
71
+ buttonAttrs: {},
72
+ };
73
+
74
+ export default RenderField;
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { FormControl } from 'patternfly-react';
4
+ import BlankOption from './BlankOption';
5
+
6
+ const SelectField = ({ input, blank, item, disabled }) => (
7
+ <FormControl {...input} componentClass="select" disabled={disabled}>
8
+ <BlankOption blank={blank} />
9
+ {item.selection.map(opt => (
10
+ <option key={opt.value} value={opt.value}>
11
+ {opt.label}
12
+ </option>
13
+ ))}
14
+ </FormControl>
15
+ );
16
+
17
+ SelectField.propTypes = {
18
+ input: PropTypes.object.isRequired,
19
+ blank: PropTypes.object.isRequired,
20
+ item: PropTypes.object.isRequired,
21
+ disabled: PropTypes.bool.isRequired,
22
+ };
23
+
24
+ export default SelectField;
@@ -0,0 +1,69 @@
1
+ import React from 'react';
2
+ import { Field } from 'redux-form';
3
+ import PropTypes from 'prop-types';
4
+
5
+ import RenderField from './RenderField';
6
+
7
+ const TextButtonField = ({
8
+ item = {},
9
+ label,
10
+ name,
11
+ className,
12
+ inputClassName,
13
+ blank,
14
+ buttonAttrs,
15
+ fieldSelector,
16
+ validate,
17
+ disabled,
18
+ fieldRequired,
19
+ tooltipHelp,
20
+ }) => (
21
+ <Field
22
+ name={name}
23
+ label={label}
24
+ fieldSelector={fieldSelector}
25
+ tooltipHelp={tooltipHelp}
26
+ component={RenderField}
27
+ buttonAttrs={buttonAttrs}
28
+ blank={blank}
29
+ item={item}
30
+ disabled={disabled}
31
+ validate={item.validate}
32
+ fieldRequired={fieldRequired}
33
+ />
34
+ );
35
+
36
+ TextButtonField.propTypes = {
37
+ item: PropTypes.object,
38
+ label: PropTypes.string.isRequired,
39
+ name: PropTypes.string.isRequired,
40
+ className: PropTypes.string,
41
+ inputClassName: PropTypes.string,
42
+ blank: PropTypes.shape({
43
+ label: PropTypes.string,
44
+ value: PropTypes.string,
45
+ }),
46
+ buttonAttrs: PropTypes.shape({
47
+ buttonText: PropTypes.node,
48
+ buttonAction: PropTypes.func,
49
+ }).isRequired,
50
+ fieldSelector: PropTypes.func,
51
+ validate: PropTypes.array,
52
+ disabled: PropTypes.bool,
53
+ fieldRequired: PropTypes.bool,
54
+ tooltipHelp: PropTypes.node,
55
+ };
56
+
57
+ TextButtonField.defaultProps = {
58
+ blank: { label: 'Choose one...', value: '' },
59
+ className: '',
60
+ inputClassName: 'col-md-6',
61
+ validate: [],
62
+ disabled: false,
63
+ fieldRequired: false,
64
+ tooltipHelp: null,
65
+ fieldSelector: () => 'text',
66
+ item: {},
67
+ };
68
+
69
+ export default TextButtonField;
@@ -0,0 +1,34 @@
1
+ import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
2
+
3
+ import SyncSettingField from '../SyncSettingField';
4
+
5
+ import {
6
+ associateSetting,
7
+ forceSetting,
8
+ filterSetting,
9
+ } from '../../__fixtures__/templateSyncSettings.fixtures';
10
+
11
+ const noop = () => {};
12
+
13
+ const commonFixtures = {
14
+ resetField: noop,
15
+ disabled: false,
16
+ };
17
+
18
+ const fixtures = {
19
+ 'should render setting with select choices': {
20
+ setting: associateSetting,
21
+ ...commonFixtures,
22
+ },
23
+ 'should render setting with input field': {
24
+ setting: filterSetting,
25
+ ...commonFixtures,
26
+ },
27
+ 'should render boolean setting as checkbox': {
28
+ setting: forceSetting,
29
+ ...commonFixtures,
30
+ },
31
+ };
32
+
33
+ describe('SyncSettingField', () =>
34
+ testComponentSnapshotsWithFixtures(SyncSettingField, fixtures));
@@ -0,0 +1,33 @@
1
+ import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
2
+
3
+ import SyncSettingFields from '../SyncSettingFields';
4
+
5
+ import {
6
+ importSettings,
7
+ exportSettings,
8
+ } from '../../__fixtures__/templateSyncSettings.fixtures';
9
+
10
+ const noop = () => {};
11
+
12
+ const commonFixtures = {
13
+ importSettings,
14
+ exportSettings,
15
+ resetField: noop,
16
+ disabled: false,
17
+ };
18
+
19
+ const fixtures = {
20
+ 'should show export settings': {
21
+ syncType: 'export',
22
+ validationData: {},
23
+ ...commonFixtures,
24
+ },
25
+ 'should show import settings': {
26
+ syncType: 'import',
27
+ validationData: { repo: ['http', 'https'] },
28
+ ...commonFixtures,
29
+ },
30
+ };
31
+
32
+ describe('SyncSettingFields', () =>
33
+ testComponentSnapshotsWithFixtures(SyncSettingFields, fixtures));
@@ -0,0 +1,20 @@
1
+ import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
2
+
3
+ import SyncTypeRadios from '../SyncTypeRadios';
4
+
5
+ const noop = () => {};
6
+
7
+ const fixtures = {
8
+ 'should render': {
9
+ controlLabel: 'Test radios',
10
+ name: 'radios',
11
+ radios: [
12
+ { label: 'A', checked: false, value: 'a', onChange: noop },
13
+ { label: 'B', checked: true, value: 'b', onChange: noop },
14
+ { label: 'C', checked: false, value: 'c', onChange: noop },
15
+ ],
16
+ },
17
+ };
18
+
19
+ describe('SyncTypeRadios', () =>
20
+ testComponentSnapshotsWithFixtures(SyncTypeRadios, fixtures));
@@ -0,0 +1,65 @@
1
+ import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
2
+
3
+ import TextButtonField from '../TextButtonField';
4
+
5
+ const textItem = {
6
+ type: 'text',
7
+ };
8
+
9
+ const selectItem = {
10
+ type: 'select',
11
+ selection: [
12
+ { label: 'A', value: 'a' },
13
+ { label: 'B', value: 'b' },
14
+ { label: 'C', value: 'c' },
15
+ ],
16
+ };
17
+
18
+ const checkboxItem = {
19
+ type: 'checkbox',
20
+ };
21
+
22
+ const blank = { label: 'Bare Metal', value: 'bareMetal' };
23
+
24
+ const fieldSelector = item => item.type;
25
+ const buttonAttrs = { buttonText: 'Button', buttonAction: () => {} };
26
+
27
+ const fixtures = {
28
+ 'should render text item': {
29
+ name: 'Text field',
30
+ item: textItem,
31
+ fieldSelector,
32
+ buttonAttrs,
33
+ disabled: false,
34
+ label: 'Text',
35
+ blank: {},
36
+ },
37
+ 'should render checkbox item': {
38
+ name: 'Checkbox field',
39
+ item: checkboxItem,
40
+ fieldSelector,
41
+ buttonAttrs,
42
+ disabled: false,
43
+ label: 'Checkbox',
44
+ blank: {},
45
+ },
46
+ 'should render select item with custom blank opt': {
47
+ name: 'select field',
48
+ item: selectItem,
49
+ fieldSelector,
50
+ buttonAttrs,
51
+ label: 'Select',
52
+ disabled: false,
53
+ blank,
54
+ },
55
+ 'should render text field without field selector': {
56
+ name: 'no selector',
57
+ label: 'Text field',
58
+ buttonAttrs,
59
+ disabled: false,
60
+ blank: {},
61
+ },
62
+ };
63
+
64
+ describe('TextButtonField', () =>
65
+ testComponentSnapshotsWithFixtures(TextButtonField, fixtures));