UNPKG

@enact/ui

Version:

A collection of simplified unstyled cross-platform UI components for Enact

278 lines (276 loc) 11.1 kB
"use strict"; require("@testing-library/jest-dom"); var _react = require("@testing-library/react"); var _Changeable = _interopRequireDefault(require("../Changeable")); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } describe('Changeable', function () { var data; var testValue = 3; var DivComponent = function DivComponent(props) { var _props$value; data = props; return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { "data-testid": "changeable", children: (_props$value = props.value) === null || _props$value === void 0 ? void 0 : _props$value.toString() }); }; describe('#config', function () { test('should pass \'value\' to the wrapped component', function () { var Component = (0, _Changeable["default"])(DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, {})); var expected = ''; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); }); test('should pass configured \'prop\' as the value\'s key to the wrapped component', function () { var prop = 'id'; var Component = (0, _Changeable["default"])({ prop: prop }, DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultId: testValue })); expect(data).toHaveProperty(prop, testValue); }); test('should pass \'onChange\' handler to the wrapped component', function () { var Component = (0, _Changeable["default"])(DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, {})); expect(data).toHaveProperty('onChange'); var expected = 'function'; var actual = typeof data.onChange; expect(actual).toBe(expected); }); test('should pass configured handler to the wrapped component', function () { var handle = 'onClick'; var Component = (0, _Changeable["default"])({ change: handle }, DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, {})); expect(data).toHaveProperty(handle); var expected = 'function'; var actual = typeof data.onClick; expect(actual).toBe(expected); }); }); describe('#prop', function () { test('should use defaultValue prop when value prop is omitted', function () { var Component = (0, _Changeable["default"])(DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 1 })); var expected = '1'; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); }); test('should warn when \'defaultValue\' and \'value\' props are provided', function () { var spy = jest.spyOn(console, 'error').mockImplementation(function () {}); var Component = (0, _Changeable["default"])(DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 10, value: 5 })); var expected = 1; var actual = spy.mock.calls.length; expect(actual).toBe(expected); }); test('should use defaultValue prop when value prop is null', function () { var spy = jest.spyOn(console, 'error').mockImplementation(function () {}); var Component = (0, _Changeable["default"])(DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 1, value: null })); var expected = '1'; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); expect(spy).toHaveBeenCalled(); }); test('should use value prop when value changed from truthy to null', function () { var spy = jest.spyOn(console, 'error').mockImplementation(function () {}); var Component = (0, _Changeable["default"])(DivComponent); var _render = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 1, value: 2 })), rerender = _render.rerender; rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 1, value: null })); var expected = ''; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); expect(spy).toHaveBeenCalled(); }); test('should use defaultValue prop when value prop is undefined', function () { var spy = jest.spyOn(console, 'error').mockImplementation(function () {}); var Component = (0, _Changeable["default"])(DivComponent); // eslint-disable-next-line no-undefined (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 1, value: undefined })); var expected = '1'; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); expect(spy).toHaveBeenCalled(); }); test('should use value prop when value changed from truthy to undefined', function () { var spy = jest.spyOn(console, 'error').mockImplementation(function () {}); var Component = (0, _Changeable["default"])(DivComponent); var _render2 = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 1, value: 2 })), rerender = _render2.rerender; // eslint-disable-next-line no-undefined rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 1, value: undefined })); var expected = ''; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); expect(spy).toHaveBeenCalled(); }); test('should use value prop when defined but falsy', function () { var spy = jest.spyOn(console, 'error').mockImplementation(function () {}); var Component = (0, _Changeable["default"])(DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 1, value: 0 })); var expected = '0'; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); expect(spy).toHaveBeenCalled(); }); test('should use value prop when both value and defaultValue are defined', function () { var spy = jest.spyOn(console, 'error').mockImplementation(function () {}); var Component = (0, _Changeable["default"])(DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 1, value: 2 })); var expected = '2'; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); expect(spy).toHaveBeenCalled(); }); }); test('should invoke passed \'onChange\' handler', function () { var handleChange = jest.fn(); var Component = (0, _Changeable["default"])(DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { onChange: handleChange })); (0, _react.act)(function () { return data.onChange({}); }); var expected = 1; var actual = handleChange.mock.calls.length; expect(actual).toBe(expected); }); test('should not invoke passed \'onChange\' handler when \'disabled\'', function () { var handleChange = jest.fn(); var Component = (0, _Changeable["default"])(DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { onChange: handleChange, disabled: true })); (0, _react.act)(function () { return data.onChange({ value: '1' }); }); expect(handleChange).not.toHaveBeenCalled(); }); test('should update \'value\' when \'onChange\' invoked and is not controlled', function () { var handleChange = jest.fn(); var Component = (0, _Changeable["default"])(DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 0, onChange: handleChange })); (0, _react.act)(function () { return data.onChange({ value: '1' }); }); var expected = '1'; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); }); test('should not update \'value\' when \'onChange\' invoked and is not controlled but disabled', function () { var Component = (0, _Changeable["default"])(DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 0, disabled: true })); (0, _react.act)(function () { return data.onChange({ value: '1' }); }); var expected = '0'; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); }); test('should not update \'value\' when \'onChange\' invoked and is controlled', function () { var Component = (0, _Changeable["default"])(DivComponent); (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { value: 0 })); (0, _react.act)(function () { return data.onChange({ value: '1' }); }); var expected = '0'; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); }); test('should update \'value\' with new props when is controlled', function () { var Component = (0, _Changeable["default"])(DivComponent); var _render3 = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { value: 0 })), rerender = _render3.rerender; rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { value: 1 })); var expected = '1'; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); }); test('should not update \'value\' with new props when is not controlled', function () { // eslint-disable-next-line console.error = function () {}; var Component = (0, _Changeable["default"])(DivComponent); var _render4 = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 0 })), rerender = _render4.rerender; rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 0, value: 1 })); var expected = '0'; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); }); test('should not update the value with new defaultProp when is not controlled', function () { var Component = (0, _Changeable["default"])(DivComponent); var _render5 = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 0 })), rerender = _render5.rerender; rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { defaultValue: 1 })); var expected = '0'; var actual = _react.screen.getByTestId('changeable'); expect(actual).toHaveTextContent(expected); }); });