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