netlify-cms-widget-inline-select
Version:
Widget for radios and inline multi-checkboxes in Netlify CMS.
202 lines (175 loc) • 6.31 kB
JavaScript
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