UNPKG

@wix/design-system

Version:

@wix/design-system

495 lines (494 loc) 22 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _react = _interopRequireDefault(require("react")); var _react2 = require("../../utils/test-utils/react"); var _CalendarPanel = _interopRequireDefault(require("../CalendarPanel")); var _CalendarPanelPrivateUni = require("./CalendarPanel.private.uni.driver"); var _isSameDay = _interopRequireDefault(require("date-fns/isSameDay")); var _jsxFileName = "/home/builduser/work/57e038ea7326c1ec/packages/wix-design-system/dist/cjs/CalendarPanel/test/CalendarPanel.spec.jsx"; function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); } function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); } var A_DAY = new Date(2019, 4, 29); var A_DAY_NOT_IN_PRESETS = new Date(2019, 4, 10); var A_DAY_BEFORE = function () { var date = new Date(A_DAY); date.setDate(date.getDate() - 1); return date; }(); var A_WEEK_BEFORE = function () { var date = new Date(A_DAY); date.setDate(date.getDate() - 7); return date; }(); var A_WEEK_AFTER = function () { var date = new Date(A_DAY); date.setDate(date.getDate() + 7); return date; }(); var TWO_MONTHS_BEFORE = function () { var date = new Date(A_DAY); date.setMonth(date.getDate() - 60); return date; }(); var ONE_MONTH_BEFORE = function () { var date = new Date(A_DAY); date.setMonth(date.getDate() - 30); return date; }(); var presets = [{ id: 1, value: 'a day', selectedDays: { from: A_DAY, to: A_DAY } }, { id: 2, value: 'a day before', selectedDays: { from: A_DAY_BEFORE, to: A_DAY_BEFORE } }, { id: 3, value: 'a week before', selectedDays: { from: A_WEEK_BEFORE, to: A_DAY } }, { id: 4, value: 'a week after', selectedDays: { from: A_DAY, to: A_WEEK_AFTER } }, { id: 5, value: 'one month - two months before', selectedDays: { from: TWO_MONTHS_BEFORE, to: ONE_MONTH_BEFORE } }]; describe('CalendarPanel', function () { describe('[async]', function () { runTests((0, _react2.createRendererWithUniDriver)(_CalendarPanelPrivateUni.calendarPanelPrivateUniDriverFactory)); }); function runTests(render) { var _this = this; afterEach(function () { return (0, _react2.cleanup)(); }); it('should show the calendar in two month view by default', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee() { var _render, driver, _t; return _regenerator().w(function (_context) { while (1) switch (_context.n) { case 0: _render = render(/*#__PURE__*/_react["default"].createElement(_CalendarPanel["default"], { onChange: function onChange() { return null; }, presets: presets, __self: _this, __source: { fileName: _jsxFileName, lineNumber: 75, columnNumber: 9 } })), driver = _render.driver; _t = expect; _context.n = 1; return driver.calendarDriver(); case 1: _context.n = 2; return _context.v.getNumOfVisibleMonths(); case 2: _t(_context.v).toBe(2); case 3: return _context.a(2); } }, _callee); }))); it('should show the presets dropdown layout', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee2() { var _render2, driver, _t2, _t3; return _regenerator().w(function (_context2) { while (1) switch (_context2.n) { case 0: _render2 = render(/*#__PURE__*/_react["default"].createElement(_CalendarPanel["default"], { onChange: function onChange() { return null; }, presets: presets, __self: _this, __source: { fileName: _jsxFileName, lineNumber: 84, columnNumber: 9 } })), driver = _render2.driver; _t2 = expect; _context2.n = 1; return driver.presetsDropdownLayoutDriver(); case 1: _context2.n = 2; return _context2.v.exists(); case 2: _t2(_context2.v).toBe(true); _t3 = expect; _context2.n = 3; return driver.presetsDropdownLayoutDriver(); case 3: _context2.n = 4; return _context2.v.isShown(); case 4: _t3(_context2.v).toBe(true); case 5: return _context2.a(2); } }, _callee2); }))); it('should show the correct presets', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee3() { var _render3, driver, optionsContent, _t4; return _regenerator().w(function (_context3) { while (1) switch (_context3.n) { case 0: _render3 = render(/*#__PURE__*/_react["default"].createElement(_CalendarPanel["default"], { onChange: function onChange() { return null; }, presets: presets, __self: _this, __source: { fileName: _jsxFileName, lineNumber: 96, columnNumber: 9 } })), driver = _render3.driver; _t4 = expect; _context3.n = 1; return driver.presetsDropdownLayoutDriver(); case 1: _context3.n = 2; return _context3.v.optionsLength(); case 2: _t4(_context3.v).toBe(presets.length); _context3.n = 3; return driver.presetsDropdownLayoutDriver(); case 3: _context3.n = 4; return _context3.v.optionsContent(); case 4: optionsContent = _context3.v; presets.map(function (preset) { return preset.value; }).forEach(function (presetValue) { expect(optionsContent).toContain(presetValue); }); case 5: return _context3.a(2); } }, _callee3); }))); describe('driver.getNumOfVisibleMonths()', function () { it('should return 2 also when showMonthDropdown=true', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee4() { var _render4, driver, _t5; return _regenerator().w(function (_context4) { while (1) switch (_context4.n) { case 0: _render4 = render(/*#__PURE__*/_react["default"].createElement(_CalendarPanel["default"], { showMonthDropdown: true, onChange: function onChange() { return null; }, presets: presets, __self: _this, __source: { fileName: _jsxFileName, lineNumber: 114, columnNumber: 11 } })), driver = _render4.driver; _t5 = expect; _context4.n = 1; return driver.calendarDriver(); case 1: _context4.n = 2; return _context4.v.getNumOfVisibleMonths(); case 2: _t5(_context4.v).toBe(2); case 3: return _context4.a(2); } }, _callee4); }))); }); it('should call onChange with the selected preset dates', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee5() { var selectedPreset, onChange, _render5, driver; return _regenerator().w(function (_context5) { while (1) switch (_context5.n) { case 0: selectedPreset = presets[2]; onChange = vi.fn(); _render5 = render(/*#__PURE__*/_react["default"].createElement(_CalendarPanel["default"], { onChange: onChange, presets: presets, __self: _this, __source: { fileName: _jsxFileName, lineNumber: 130, columnNumber: 9 } })), driver = _render5.driver; _context5.n = 1; return driver.presetsDropdownLayoutDriver(); case 1: _context5.n = 2; return _context5.v.clickAtOptionWithValue(selectedPreset.value); case 2: expect(onChange).toHaveBeenCalledTimes(1); expect((0, _isSameDay["default"])(onChange.mock.calls[0][0].from, selectedPreset.selectedDays.from)).toBe(true); expect((0, _isSameDay["default"])(onChange.mock.calls[0][0].to, selectedPreset.selectedDays.to)).toBe(true); case 3: return _context5.a(2); } }, _callee5); }))); describe('no presets', function () { it('should not display the dropdown layout when the presets props is empty array', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee6() { var _render6, driver, _t6; return _regenerator().w(function (_context6) { while (1) switch (_context6.n) { case 0: _render6 = render(/*#__PURE__*/_react["default"].createElement(_CalendarPanel["default"], { onChange: vi.fn(), value: A_DAY_NOT_IN_PRESETS, selectionMode: "range", presets: [], __self: _this, __source: { fileName: _jsxFileName, lineNumber: 151, columnNumber: 11 } })), driver = _render6.driver; _t6 = expect; _context6.n = 1; return driver.isDropdownExists(); case 1: _t6(_context6.v).toBe(false); case 2: return _context6.a(2); } }, _callee6); }))); it('should not display the dropdown layout when the is no presets prop', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee7() { var _render7, driver, _t7; return _regenerator().w(function (_context7) { while (1) switch (_context7.n) { case 0: _render7 = render(/*#__PURE__*/_react["default"].createElement(_CalendarPanel["default"], { onChange: vi.fn(), value: A_DAY_NOT_IN_PRESETS, selectionMode: "range", __self: _this, __source: { fileName: _jsxFileName, lineNumber: 163, columnNumber: 11 } })), driver = _render7.driver; _t7 = expect; _context7.n = 1; return driver.isDropdownExists(); case 1: _t7(_context7.v).toBe(false); case 2: return _context7.a(2); } }, _callee7); }))); }); describe('footer', function () { it('should render a given footer content', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee8() { var compDataHook, renderProp, _render8, driver, _t8; return _regenerator().w(function (_context8) { while (1) switch (_context8.n) { case 0: compDataHook = 'given-comp'; renderProp = function renderProp() { return /*#__PURE__*/_react["default"].createElement("div", { "data-hook": compDataHook, __self: _this, __source: { fileName: _jsxFileName, lineNumber: 176, columnNumber: 34 } }); }; _render8 = render(/*#__PURE__*/_react["default"].createElement(_CalendarPanel["default"], { onChange: vi.fn(), footer: renderProp, __self: _this, __source: { fileName: _jsxFileName, lineNumber: 178, columnNumber: 11 } })), driver = _render8.driver; _t8 = expect; _context8.n = 1; return driver.findByDataHook(compDataHook); case 1: _t8(_context8.v).toBeTruthy(); case 2: return _context8.a(2); } }, _callee8); }))); describe('renderProp arguments', function () { describe('selectedDays', function () { it('should have selectedDays prop', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee9() { var renderProp, renderPropFirstArgument; return _regenerator().w(function (_context9) { while (1) switch (_context9.n) { case 0: renderProp = vi.fn(); render(/*#__PURE__*/_react["default"].createElement(_CalendarPanel["default"], { value: A_DAY, onChange: vi.fn(), footer: renderProp, __self: _this, __source: { fileName: _jsxFileName, lineNumber: 188, columnNumber: 15 } })); renderPropFirstArgument = renderProp.mock.calls[0][0]; expect(renderProp).toHaveBeenCalledTimes(1); expect(Object.keys(renderPropFirstArgument)).toContain('selectedDays'); expect(renderPropFirstArgument.selectedDays).toBe(A_DAY); case 1: return _context9.a(2); } }, _callee9); }))); }); describe('submitDisabled', function () { var noop = function noop() {}; function testCase(_ref0) { var props = _ref0.props, expectedValue = _ref0.expectedValue; var renderProp = vi.fn(); render(/*#__PURE__*/_react["default"].createElement(_CalendarPanel["default"], (0, _extends2["default"])({ onChange: noop, footer: renderProp }, props, { __self: this, __source: { fileName: _jsxFileName, lineNumber: 210, columnNumber: 15 } }))); var renderPropFirstArgument = renderProp.mock.calls[0][0]; expect(renderPropFirstArgument.submitDisabled).toBe(expectedValue); } describe('selectionMode=day', function () { it('should be false', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee0() { return _regenerator().w(function (_context0) { while (1) switch (_context0.n) { case 0: testCase({ props: { value: A_DAY, selectionMode: 'day' }, expectedValue: false }); case 1: return _context0.a(2); } }, _callee0); }))); it('should be true', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee1() { return _regenerator().w(function (_context1) { while (1) switch (_context1.n) { case 0: testCase({ props: { value: undefined, selectionMode: 'day' }, expectedValue: true }); case 1: return _context1.a(2); } }, _callee1); }))); }); describe('selectionMode=range', function () { it('should be enabled when a range is selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee10() { return _regenerator().w(function (_context10) { while (1) switch (_context10.n) { case 0: testCase({ props: { value: { from: A_DAY_BEFORE, to: A_DAY }, selectionMode: 'range' }, expectedValue: false }); case 1: return _context10.a(2); } }, _callee10); }))); it('should be disabled given no selection', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee11() { return _regenerator().w(function (_context11) { while (1) switch (_context11.n) { case 0: testCase({ props: { value: undefined, selectionMode: 'range' }, expectedValue: true }); case 1: return _context11.a(2); } }, _callee11); }))); it("should be disabled given only a 'from' date", /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee12() { return _regenerator().w(function (_context12) { while (1) switch (_context12.n) { case 0: testCase({ props: { value: { from: new Date(2018, 1, 1) }, selectionMode: 'range' }, expectedValue: true }); case 1: return _context12.a(2); } }, _callee12); }))); }); }); }); }); } });