UNPKG

@vimeo/iris

Version:
219 lines (217 loc) 11 kB
import { g as __awaiter, h as __generator } from '../../../tslib.es6-7f0e734f.js'; import React__default from 'react'; import { r as render, s as screen, f as fireEvent } from '../../../react.esm-edf204b5.js'; import { u as userEvent } from '../../../index-cff9b439.js'; import { ThemeProvider } from 'styled-components'; import { themes } from '../../../themes/index.esm.js'; import { Slider } from './Slider.esm.js'; import '../../../es.typed-array.set-c204e812.js'; import 'os'; import 'tty'; import 'react-dom'; import 'util'; import 'polished'; import '../../../color/colors.esm.js'; import './Slider.state.esm.js'; import './Slider.style.esm.js'; import './SliderInputArrow.esm.js'; import '../../../tokens/core.esm.js'; import '../../../tokens/color/index.esm.js'; import '../../../tokens/color/background/background.esm.js'; import '../../../tokens/util/readToken.esm.js'; import '../../../tokens/util/clamp.esm.js'; import '../../../tokens/color/format/format.esm.js'; import '../../../tokens/color/format/primary.esm.js'; import '../../../tokens/color/format/secondary.esm.js'; import '../../../tokens/color/format/tertiary.esm.js'; import '../../../tokens/color/rainbow/rainbow.esm.js'; import '../../../tokens/color/rainbow/conic/index.esm.js'; import '../../../tokens/color/rainbow/conic/sm.esm.js'; import '../../../tokens/color/rainbow/conic/xl.esm.js'; import '../../../tokens/color/rainbow/linear/index.esm.js'; import '../../../tokens/color/rainbow/linear/sm.esm.js'; import '../../../tokens/color/rainbow/linear/xl.esm.js'; import '../../../tokens/color/livestream/livestream.esm.js'; import '../../../tokens/color/status/status.esm.js'; import '../../../tokens/color/status/caution.esm.js'; import '../../../tokens/color/status/negative.esm.js'; import '../../../tokens/color/status/positive.esm.js'; import '../../../tokens/color/stroke/stroke.esm.js'; import '../../../tokens/color/surface/surface.esm.js'; import '../../../tokens/color/text/text.esm.js'; import '../../../tokens/util/round.esm.js'; import '../../../tokens/color/upsell/upsell.esm.js'; import '../../../tokens/color/upsell/sm.esm.js'; import '../../../tokens/color/upsell/xl.esm.js'; import '../../../tokens/color/upsell/new.esm.js'; import '../../../tokens/edge/edge.esm.js'; import '../../../tokens/space/space.esm.js'; import '../../../tokens/typography/index.esm.js'; import '../../../tokens/typography/size/size.esm.js'; import './Handle.esm.js'; import '../../../utils/css.esm.js'; import '../../../utils/events/KeyCodes.esm.js'; import './SliderEditableInput.esm.js'; import '../../../utils/hooks/useOutsideClick.esm.js'; import '../../../utils/DOM/geometry.esm.js'; describe('Slider', function () { it('Renders slider', function () { render(React__default.createElement(ThemeProvider, { theme: themes['light'] }, React__default.createElement(Slider, null))); var slider = screen.getByLabelText('slider'); expect(slider).toBeInTheDocument(); }); it('Renders slider with 50% value', function () { return __awaiter(void 0, void 0, void 0, function () { var input, handle; return __generator(this, function (_a) { switch (_a.label) { case 0: render(React__default.createElement(ThemeProvider, { theme: themes['light'] }, React__default.createElement(Slider, { initialValues: [0, 100], editableLabel: true }))); input = screen.getByRole('start-input'); return [4 /*yield*/, userEvent.click(input)]; case 1: _a.sent(); fireEvent.change(input, { target: { value: 50 } }); handle = screen.getByLabelText('startHandle'); expect(handle).toHaveStyle({ left: '50%' }); return [2 /*return*/]; } }); }); }); it('Renders slider with min and max', function () { return __awaiter(void 0, void 0, void 0, function () { var endInput, endHandle, startInput, startHandle; return __generator(this, function (_a) { switch (_a.label) { case 0: render(React__default.createElement(ThemeProvider, { theme: themes['light'] }, React__default.createElement(Slider, { initialValues: [0, 100], editableLabel: true, min: 0, max: 100, range: true }))); endInput = screen.getByRole('end-input'); return [4 /*yield*/, userEvent.click(endInput)]; case 1: _a.sent(); fireEvent.change(endInput, { target: { value: 120 } }); endHandle = screen.getByLabelText('endHandle'); expect(endHandle).toHaveStyle({ left: '100%' }); startInput = screen.getByRole('start-input'); return [4 /*yield*/, userEvent.click(startInput)]; case 2: _a.sent(); fireEvent.change(startInput, { target: { value: -10 } }); startHandle = screen.getByLabelText('startHandle'); expect(startHandle).toHaveStyle({ left: '0%' }); return [2 /*return*/]; } }); }); }); it('Renders slider and fire onChange', function () { return __awaiter(void 0, void 0, void 0, function () { var onChange, input; return __generator(this, function (_a) { switch (_a.label) { case 0: onChange = jest.fn(); render(React__default.createElement(ThemeProvider, { theme: themes['light'] }, React__default.createElement(Slider, { onChange: onChange, initialValues: [0, 100], editableLabel: true }))); input = screen.getByRole('start-input'); return [4 /*yield*/, userEvent.click(input)]; case 1: _a.sent(); 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 __awaiter(void 0, void 0, void 0, function () { var input; return __generator(this, function (_a) { render(React__default.createElement(ThemeProvider, { theme: themes['light'] }, React__default.createElement(Slider, { initialValues: [0, 100], disabled: true, editableLabel: true }))); input = screen.getByRole('start-input'); expect(input).toHaveAttribute('disabled'); return [2 /*return*/]; }); }); }); it('Limit values based on range', function () { return __awaiter(void 0, void 0, void 0, function () { var endInput, startInput, startHandle, endHandle; return __generator(this, function (_a) { switch (_a.label) { case 0: render(React__default.createElement(ThemeProvider, { theme: themes['light'] }, React__default.createElement(Slider, { initialValues: [0, 100], range: true, editableLabel: true }))); endInput = screen.getByRole('end-input'); return [4 /*yield*/, userEvent.click(endInput)]; case 1: _a.sent(); fireEvent.change(endInput, { target: { value: 80 } }); startInput = screen.getByRole('start-input'); return [4 /*yield*/, userEvent.click(startInput)]; case 2: _a.sent(); fireEvent.change(startInput, { target: { value: 90 } }); startHandle = screen.getByLabelText('startHandle'); expect(startHandle).toHaveStyle({ left: '79%' }); endHandle = screen.getByLabelText('endHandle'); expect(endHandle).toHaveStyle({ left: '80%' }); return [4 /*yield*/, userEvent.click(endInput)]; case 3: _a.sent(); fireEvent.change(endInput, { target: { value: 20 } }); expect(endHandle).toHaveStyle({ left: '80%' }); return [2 /*return*/]; } }); }); }); it('Does not fire event on inital render', function () { return __awaiter(void 0, void 0, void 0, function () { var onChange, onDragEnd; return __generator(this, function (_a) { onChange = jest.fn(); onDragEnd = jest.fn(); render(React__default.createElement(ThemeProvider, { theme: themes['light'] }, React__default.createElement(Slider, { initialValues: [0, 100], editableLabel: true }))); expect(onChange).toHaveBeenCalledTimes(0); expect(onDragEnd).toHaveBeenCalledTimes(0); return [2 /*return*/]; }); }); }); it('Change value using arrows', function () { return __awaiter(void 0, void 0, void 0, function () { var onChange, input, arrowUp, arrowDown; return __generator(this, function (_a) { switch (_a.label) { case 0: onChange = jest.fn(); render(React__default.createElement(ThemeProvider, { theme: themes['light'] }, React__default.createElement(Slider, { onChange: onChange, initialValues: [0, 100], editableLabel: true }))); input = screen.getByRole('start-input'); return [4 /*yield*/, userEvent.hover(input)]; case 1: _a.sent(); arrowUp = screen.getByRole('arrow-up'); return [4 /*yield*/, userEvent.click(arrowUp)]; case 2: _a.sent(); expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ target: expect.objectContaining({ value: '1', }), })); arrowDown = screen.getByRole('arrow-down'); return [4 /*yield*/, userEvent.click(arrowDown)]; case 3: _a.sent(); expect(onChange).toHaveBeenCalledTimes(2); expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ target: expect.objectContaining({ value: '0', }), })); return [2 /*return*/]; } }); }); }); });