@vimeo/iris
Version:
Vimeo Design System
219 lines (217 loc) • 11 kB
JavaScript
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*/];
}
});
}); });
});