UNPKG

@vimeo/iris

Version:
225 lines (220 loc) 12.2 kB
'use strict'; var tslib_es6 = require('../../../tslib.es6-3ec409b7.js'); var React = require('react'); var react_esm = require('../../../react.esm-d9b3c6bd.js'); var index = require('../../../index-1aed0cf1.js'); var styled = require('styled-components'); var themes_index = require('../../../themes/index.js'); var components_inputs_Slider_Slider = require('./Slider.js'); require('../../../es.typed-array.set-5ee45ede.js'); require('os'); require('tty'); require('react-dom'); require('util'); require('polished'); require('../../../color/colors.js'); require('./Slider.state.js'); require('./Slider.style.js'); require('./SliderInputArrow.js'); require('../../../tokens/core.js'); require('../../../tokens/color/index.js'); require('../../../tokens/color/background/background.js'); require('../../../tokens/util/readToken.js'); require('../../../tokens/util/clamp.js'); require('../../../tokens/color/format/format.js'); require('../../../tokens/color/format/primary.js'); require('../../../tokens/color/format/secondary.js'); require('../../../tokens/color/format/tertiary.js'); require('../../../tokens/color/rainbow/rainbow.js'); require('../../../tokens/color/rainbow/conic/index.js'); require('../../../tokens/color/rainbow/conic/sm.js'); require('../../../tokens/color/rainbow/conic/xl.js'); require('../../../tokens/color/rainbow/linear/index.js'); require('../../../tokens/color/rainbow/linear/sm.js'); require('../../../tokens/color/rainbow/linear/xl.js'); require('../../../tokens/color/livestream/livestream.js'); require('../../../tokens/color/status/status.js'); require('../../../tokens/color/status/caution.js'); require('../../../tokens/color/status/negative.js'); require('../../../tokens/color/status/positive.js'); require('../../../tokens/color/stroke/stroke.js'); require('../../../tokens/color/surface/surface.js'); require('../../../tokens/color/text/text.js'); require('../../../tokens/util/round.js'); require('../../../tokens/color/upsell/upsell.js'); require('../../../tokens/color/upsell/sm.js'); require('../../../tokens/color/upsell/xl.js'); require('../../../tokens/color/upsell/new.js'); require('../../../tokens/edge/edge.js'); require('../../../tokens/space/space.js'); require('../../../tokens/typography/index.js'); require('../../../tokens/typography/size/size.js'); require('./Handle.js'); require('../../../utils/css.js'); require('../../../utils/events/KeyCodes.js'); require('./SliderEditableInput.js'); require('../../../utils/hooks/useOutsideClick.js'); require('../../../utils/DOM/geometry.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); describe('Slider', function () { it('Renders slider', function () { react_esm.render(React__default["default"].createElement(styled.ThemeProvider, { theme: themes_index.themes['light'] }, React__default["default"].createElement(components_inputs_Slider_Slider.Slider, null))); var slider = react_esm.screen.getByLabelText('slider'); expect(slider).toBeInTheDocument(); }); it('Renders slider with 50% value', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var input, handle; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: react_esm.render(React__default["default"].createElement(styled.ThemeProvider, { theme: themes_index.themes['light'] }, React__default["default"].createElement(components_inputs_Slider_Slider.Slider, { initialValues: [0, 100], editableLabel: true }))); input = react_esm.screen.getByRole('start-input'); return [4 /*yield*/, index.userEvent.click(input)]; case 1: _a.sent(); react_esm.fireEvent.change(input, { target: { value: 50 } }); handle = react_esm.screen.getByLabelText('startHandle'); expect(handle).toHaveStyle({ left: '50%' }); return [2 /*return*/]; } }); }); }); it('Renders slider with min and max', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var endInput, endHandle, startInput, startHandle; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: react_esm.render(React__default["default"].createElement(styled.ThemeProvider, { theme: themes_index.themes['light'] }, React__default["default"].createElement(components_inputs_Slider_Slider.Slider, { initialValues: [0, 100], editableLabel: true, min: 0, max: 100, range: true }))); endInput = react_esm.screen.getByRole('end-input'); return [4 /*yield*/, index.userEvent.click(endInput)]; case 1: _a.sent(); react_esm.fireEvent.change(endInput, { target: { value: 120 } }); endHandle = react_esm.screen.getByLabelText('endHandle'); expect(endHandle).toHaveStyle({ left: '100%' }); startInput = react_esm.screen.getByRole('start-input'); return [4 /*yield*/, index.userEvent.click(startInput)]; case 2: _a.sent(); react_esm.fireEvent.change(startInput, { target: { value: -10 } }); startHandle = react_esm.screen.getByLabelText('startHandle'); expect(startHandle).toHaveStyle({ left: '0%' }); return [2 /*return*/]; } }); }); }); it('Renders slider and fire onChange', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var onChange, input; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: onChange = jest.fn(); react_esm.render(React__default["default"].createElement(styled.ThemeProvider, { theme: themes_index.themes['light'] }, React__default["default"].createElement(components_inputs_Slider_Slider.Slider, { onChange: onChange, initialValues: [0, 100], editableLabel: true }))); input = react_esm.screen.getByRole('start-input'); return [4 /*yield*/, index.userEvent.click(input)]; case 1: _a.sent(); react_esm.fireEvent.change(input, { target: { value: 50 } }); expect(onChange).toHaveBeenCalledTimes(1); expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ target: expect.objectContaining({ value: '50', }), })); return [2 /*return*/]; } }); }); }); it('Cannot change value of disabled slider', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var input; return tslib_es6.__generator(this, function (_a) { react_esm.render(React__default["default"].createElement(styled.ThemeProvider, { theme: themes_index.themes['light'] }, React__default["default"].createElement(components_inputs_Slider_Slider.Slider, { initialValues: [0, 100], disabled: true, editableLabel: true }))); input = react_esm.screen.getByRole('start-input'); expect(input).toHaveAttribute('disabled'); return [2 /*return*/]; }); }); }); it('Limit values based on range', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var endInput, startInput, startHandle, endHandle; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: react_esm.render(React__default["default"].createElement(styled.ThemeProvider, { theme: themes_index.themes['light'] }, React__default["default"].createElement(components_inputs_Slider_Slider.Slider, { initialValues: [0, 100], range: true, editableLabel: true }))); endInput = react_esm.screen.getByRole('end-input'); return [4 /*yield*/, index.userEvent.click(endInput)]; case 1: _a.sent(); react_esm.fireEvent.change(endInput, { target: { value: 80 } }); startInput = react_esm.screen.getByRole('start-input'); return [4 /*yield*/, index.userEvent.click(startInput)]; case 2: _a.sent(); react_esm.fireEvent.change(startInput, { target: { value: 90 } }); startHandle = react_esm.screen.getByLabelText('startHandle'); expect(startHandle).toHaveStyle({ left: '79%' }); endHandle = react_esm.screen.getByLabelText('endHandle'); expect(endHandle).toHaveStyle({ left: '80%' }); return [4 /*yield*/, index.userEvent.click(endInput)]; case 3: _a.sent(); react_esm.fireEvent.change(endInput, { target: { value: 20 } }); expect(endHandle).toHaveStyle({ left: '80%' }); return [2 /*return*/]; } }); }); }); it('Does not fire event on inital render', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var onChange, onDragEnd; return tslib_es6.__generator(this, function (_a) { onChange = jest.fn(); onDragEnd = jest.fn(); react_esm.render(React__default["default"].createElement(styled.ThemeProvider, { theme: themes_index.themes['light'] }, React__default["default"].createElement(components_inputs_Slider_Slider.Slider, { initialValues: [0, 100], editableLabel: true }))); expect(onChange).toHaveBeenCalledTimes(0); expect(onDragEnd).toHaveBeenCalledTimes(0); return [2 /*return*/]; }); }); }); it('Change value using arrows', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var onChange, input, arrowUp, arrowDown; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: onChange = jest.fn(); react_esm.render(React__default["default"].createElement(styled.ThemeProvider, { theme: themes_index.themes['light'] }, React__default["default"].createElement(components_inputs_Slider_Slider.Slider, { onChange: onChange, initialValues: [0, 100], editableLabel: true }))); input = react_esm.screen.getByRole('start-input'); return [4 /*yield*/, index.userEvent.hover(input)]; case 1: _a.sent(); arrowUp = react_esm.screen.getByRole('arrow-up'); return [4 /*yield*/, index.userEvent.click(arrowUp)]; case 2: _a.sent(); expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ target: expect.objectContaining({ value: '1', }), })); arrowDown = react_esm.screen.getByRole('arrow-down'); return [4 /*yield*/, index.userEvent.click(arrowDown)]; case 3: _a.sent(); expect(onChange).toHaveBeenCalledTimes(2); expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ target: expect.objectContaining({ value: '0', }), })); return [2 /*return*/]; } }); }); }); });