UNPKG

netlify-cms-widget-inline-select

Version:
202 lines (175 loc) 6.31 kB
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } import React from 'react'; import PropTypes from 'prop-types'; import { fromJS } from 'immutable'; import { render, fireEvent } from '@testing-library/react'; // import 'react-testing-library/cleanup-after-each'; import '@testing-library/jest-dom/extend-expect'; import InlineSelectControl from './InlineSelectControl'; var options = [{ value: 'Foo', label: 'Foo' }, { value: 'Bar', label: 'Bar' }, { value: 'Baz', label: 'Baz' }]; var InlineSelectController = /*#__PURE__*/function (_React$Component) { _inheritsLoose(InlineSelectController, _React$Component); function InlineSelectController(props) { var _this; _this = _React$Component.call(this, props) || this; _this.handleOnChange = jest.fn(function (value) { _this.setState({ value: value }); }); _this.state = { value: props.defaultValue // eslint-disable-line react/prop-types }; return _this; } var _proto = InlineSelectController.prototype; _proto.componentDidUpdate = function componentDidUpdate() { var onStateChange = this.props.onStateChange; onStateChange(this.state); }; _proto.render = function render() { var children = this.props.children; var value = this.state.value; return children({ value: value, handleOnChange: this.handleOnChange }); }; return InlineSelectController; }(React.Component); InlineSelectController.propTypes = { children: PropTypes.func.isRequired, onStateChange: PropTypes.func.isRequired }; function setup(_ref) { var field = _ref.field, defaultValue = _ref.defaultValue; var renderArgs; var stateChangeSpy = jest.fn(); var setActiveSpy = jest.fn(); var setInactiveSpy = jest.fn(); var helpers = render( /*#__PURE__*/React.createElement(InlineSelectController, { defaultValue: defaultValue, onStateChange: stateChangeSpy }, function (_ref2) { var value = _ref2.value, handleOnChange = _ref2.handleOnChange; renderArgs = { value: value, onChangeSpy: handleOnChange }; return /*#__PURE__*/React.createElement(InlineSelectControl, { field: field, value: value, onChange: handleOnChange, forID: "inline-select", classNameWrapper: "", setActiveStyle: setActiveSpy, setInactiveStyle: setInactiveSpy }); })); return _extends({}, helpers, renderArgs, { stateChangeSpy: stateChangeSpy, setActiveSpy: setActiveSpy, setInactiveSpy: setInactiveSpy }); } describe('InlineSelectControl', function () { describe('radios', function () { var expectRadioInput = function expectRadioInput(element, checked) { if (checked === void 0) { checked = false; } expect(element).toBeInTheDocument(); expect(element.type).toEqual('radio'); expect(element.checked).toBe(checked); }; it('should respect value', function () { var field = fromJS({ options: options, name: 'radio_1' }); var _setup = setup({ field: field, defaultValue: options[2].value }), getByLabelText = _setup.getByLabelText; expectRadioInput(getByLabelText('Foo')); expectRadioInput(getByLabelText('Bar')); expectRadioInput(getByLabelText('Baz'), true); }); it('should call onChange with correct selectedItem', function () { var field = fromJS({ options: options, name: 'radio_1' }); var _setup2 = setup({ field: field }), getByLabelText = _setup2.getByLabelText, onChangeSpy = _setup2.onChangeSpy; expectRadioInput(getByLabelText('Foo')); expectRadioInput(getByLabelText('Bar')); expectRadioInput(getByLabelText('Baz')); fireEvent.click(getByLabelText('Foo')); expect(onChangeSpy).toHaveBeenCalledTimes(1); expect(onChangeSpy).toHaveBeenCalledWith(options[0].value); }); }); describe('checkboxes', function () { var expectCheckboxInput = function expectCheckboxInput(element, checked) { if (checked === void 0) { checked = false; } expect(element).toBeInTheDocument(); expect(element.type).toEqual('checkbox'); expect(element.checked).toBe(checked); }; it('should respect value', function () { var field = fromJS({ options: options, name: 'checkbox_1', multiple: true }); var _setup3 = setup({ field: field, defaultValue: fromJS([options[1].value, options[2].value]) }), getByLabelText = _setup3.getByLabelText; expectCheckboxInput(getByLabelText('Foo')); expectCheckboxInput(getByLabelText('Bar'), true); expectCheckboxInput(getByLabelText('Baz'), true); }); it('should call onChange with correct selectedItem', function () { var field = fromJS({ options: options, name: 'checkbox_1', multiple: true }); var _setup4 = setup({ field: field }), getByLabelText = _setup4.getByLabelText, onChangeSpy = _setup4.onChangeSpy; expectCheckboxInput(getByLabelText('Foo')); expectCheckboxInput(getByLabelText('Bar')); expectCheckboxInput(getByLabelText('Baz')); fireEvent.click(getByLabelText('Foo')); fireEvent.click(getByLabelText('Baz')); expect(onChangeSpy).toHaveBeenCalledTimes(2); expect(onChangeSpy).toHaveBeenCalledWith([options[0].value]); expect(onChangeSpy).toHaveBeenCalledWith([options[0].value, options[2].value]); }); }); }); //# sourceMappingURL=InlineSelectControl.test.js.map