UNPKG

@wix/design-system

Version:

@wix/design-system

342 lines (341 loc) 15.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireDefault(require("react")); var _index = require("./index"); var _react2 = require("../../utils/test-utils/react"); var _jsxFileName = "/home/builduser/work/57e038ea7326c1ec/packages/wix-design-system/dist/cjs/Table/ColumnResize/ColumnResize.spec.tsx"; describe('ColumnResize', () => { var _columnResizeContext = null; var defaultColumns = [{ title: 'col1', render: () => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), resizeProps: { id: 'col1' }, width: '100px' }, { title: 'col2', render: () => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), resizeProps: { id: 'col2' }, width: 150 }, { title: 'col3', render: () => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), resizeProps: { id: 'col3' }, width: '200px' }]; var renderColumnResize = props => { return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_index.ColumnResize, (0, _extends2.default)({}, props, { __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 37, columnNumber: 7 } }), /*#__PURE__*/_react.default.createElement(_index.ColumnResizeConsumer, { __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 38, columnNumber: 9 } }, columnResizeContext => { _columnResizeContext = columnResizeContext; return /*#__PURE__*/_react.default.createElement("div", { __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 41, columnNumber: 20 } }); }))); }; afterEach(() => { _columnResizeContext = null; }); describe('getEffectiveColumnWidth', () => { it('should return original width when table is not resizable', () => { var _columnResizeContext2; renderColumnResize({ columns: defaultColumns, isTableResizable: false }); var result = (_columnResizeContext2 = _columnResizeContext) == null ? void 0 : _columnResizeContext2.getEffectiveColumnWidth(defaultColumns[0]); expect(result).toBe('100px'); }); it('should return resized width when table is resizable and column has been resized', /*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext4; renderColumnResize({ columns: defaultColumns, isTableResizable: true }); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext3; (_columnResizeContext3 = _columnResizeContext) == null || _columnResizeContext3.resizeColumn('col1', 150); })); var result = (_columnResizeContext4 = _columnResizeContext) == null ? void 0 : _columnResizeContext4.getEffectiveColumnWidth(defaultColumns[0]); expect(result).toBe(150); })); it('should return parseFloat of original width for columns without stored width', () => { var _columnResizeContext5; var column = { title: 'new-col', render: () => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), width: '175px', resizeProps: { id: 'new-col' } }; renderColumnResize({ columns: defaultColumns, isTableResizable: true }); var result = (_columnResizeContext5 = _columnResizeContext) == null ? void 0 : _columnResizeContext5.getEffectiveColumnWidth(column); expect(result).toBe(175); }); }); describe('Column Width Clamping', () => { var onColumnResizeMock; beforeEach(() => { onColumnResizeMock = jest.fn(); }); afterEach(() => { jest.clearAllMocks(); }); it('should clamp width to minimum value', /*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext7; renderColumnResize({ columns: defaultColumns, isTableResizable: true, minColumnWidth: 80, onColumnResize: onColumnResizeMock }); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext6; (_columnResizeContext6 = _columnResizeContext) == null || _columnResizeContext6.resizeColumn('col1', 50); })); expect((_columnResizeContext7 = _columnResizeContext) == null || (_columnResizeContext7 = _columnResizeContext7.columnWidths) == null ? void 0 : _columnResizeContext7.col1).toBe(80); expect(onColumnResizeMock).toHaveBeenCalledWith('col1', 80); })); it('should clamp width to maximum value', /*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext9; renderColumnResize({ columns: defaultColumns, isTableResizable: true, maxColumnWidth: 300, onColumnResize: onColumnResizeMock }); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext8; (_columnResizeContext8 = _columnResizeContext) == null || _columnResizeContext8.resizeColumn('col1', 400); })); expect((_columnResizeContext9 = _columnResizeContext) == null || (_columnResizeContext9 = _columnResizeContext9.columnWidths) == null ? void 0 : _columnResizeContext9.col1).toBe(300); expect(onColumnResizeMock).toHaveBeenCalledWith('col1', 300); })); it('should allow width within min-max range', /*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext1; renderColumnResize({ columns: defaultColumns, isTableResizable: true, minColumnWidth: 50, maxColumnWidth: 300, onColumnResize: onColumnResizeMock }); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext0; (_columnResizeContext0 = _columnResizeContext) == null || _columnResizeContext0.resizeColumn('col1', 150); })); expect((_columnResizeContext1 = _columnResizeContext) == null || (_columnResizeContext1 = _columnResizeContext1.columnWidths) == null ? void 0 : _columnResizeContext1.col1).toBe(150); expect(onColumnResizeMock).toHaveBeenCalledWith('col1', 150); })); it('should handle only minimum constraint', /*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext12, _columnResizeContext13; renderColumnResize({ columns: defaultColumns, isTableResizable: true, minColumnWidth: 75, onColumnResize: onColumnResizeMock }); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext10; (_columnResizeContext10 = _columnResizeContext) == null || _columnResizeContext10.resizeColumn('col1', 60); })); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext11; (_columnResizeContext11 = _columnResizeContext) == null || _columnResizeContext11.resizeColumn('col2', 500); })); expect((_columnResizeContext12 = _columnResizeContext) == null || (_columnResizeContext12 = _columnResizeContext12.columnWidths) == null ? void 0 : _columnResizeContext12.col1).toBe(75); expect((_columnResizeContext13 = _columnResizeContext) == null || (_columnResizeContext13 = _columnResizeContext13.columnWidths) == null ? void 0 : _columnResizeContext13.col2).toBe(500); })); }); describe('onColumnResize callback', () => { var onColumnResizeMock; beforeEach(() => { onColumnResizeMock = jest.fn(); }); afterEach(() => { jest.clearAllMocks(); }); it('should call onColumnResize with correct parameters', /*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { renderColumnResize({ columns: defaultColumns, isTableResizable: true, onColumnResize: onColumnResizeMock }); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext14; (_columnResizeContext14 = _columnResizeContext) == null || _columnResizeContext14.resizeColumn('col1', 175); })); expect(onColumnResizeMock).toHaveBeenCalledWith('col1', 175); expect(onColumnResizeMock).toHaveBeenCalledTimes(1); })); it('should not call onColumnResize when table is not resizable', /*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { renderColumnResize({ columns: defaultColumns, isTableResizable: false, onColumnResize: onColumnResizeMock }); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext15; (_columnResizeContext15 = _columnResizeContext) == null || _columnResizeContext15.resizeColumn('col1', 175); })); expect(onColumnResizeMock).not.toHaveBeenCalled(); })); }); describe('onColumnResizeStart callback', () => { var onColumnResizeStartMock; beforeEach(() => { onColumnResizeStartMock = jest.fn(); }); afterEach(() => { jest.clearAllMocks(); }); it('should call onColumnResizeStart with correct parameters', /*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { renderColumnResize({ columns: defaultColumns, isTableResizable: true, onColumnResizeStart: onColumnResizeStartMock }); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext16; (_columnResizeContext16 = _columnResizeContext) == null || _columnResizeContext16.resizeColumn('col1', 150); })); var mockEvent = new MouseEvent('mousedown'); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext17; (_columnResizeContext17 = _columnResizeContext) == null || _columnResizeContext17.startColumnResize('col1', mockEvent); })); expect(onColumnResizeStartMock).toHaveBeenCalledWith('col1', 150, mockEvent); expect(onColumnResizeStartMock).toHaveBeenCalledTimes(1); })); it('should not call onColumnResizeStart when no callback provided', /*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { renderColumnResize({ columns: defaultColumns, isTableResizable: true }); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext18; (_columnResizeContext18 = _columnResizeContext) == null || _columnResizeContext18.resizeColumn('col1', 150); })); var mockEvent = new MouseEvent('mousedown'); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext19; (_columnResizeContext19 = _columnResizeContext) == null || _columnResizeContext19.startColumnResize('col1', mockEvent); })); expect(true).toBe(true); })); }); describe('onColumnResizeEnd callback', () => { var onColumnResizeEndMock; beforeEach(() => { onColumnResizeEndMock = jest.fn(); }); afterEach(() => { jest.clearAllMocks(); }); it('should call onColumnResizeEnd with correct parameters', /*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { renderColumnResize({ columns: defaultColumns, isTableResizable: true, onColumnResizeEnd: onColumnResizeEndMock }); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext20; (_columnResizeContext20 = _columnResizeContext) == null || _columnResizeContext20.resizeColumn('col1', 200); })); var mockEvent = new MouseEvent('mouseup'); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext21; (_columnResizeContext21 = _columnResizeContext) == null || _columnResizeContext21.endColumnResize('col1', mockEvent); })); expect(onColumnResizeEndMock).toHaveBeenCalledWith('col1', 200, mockEvent); expect(onColumnResizeEndMock).toHaveBeenCalledTimes(1); })); it('should not call onColumnResizeEnd when no callback provided', /*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { renderColumnResize({ columns: defaultColumns, isTableResizable: true }); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext22; (_columnResizeContext22 = _columnResizeContext) == null || _columnResizeContext22.resizeColumn('col1', 200); })); var mockEvent = new MouseEvent('mouseup'); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext23; (_columnResizeContext23 = _columnResizeContext) == null || _columnResizeContext23.endColumnResize('col1', mockEvent); })); expect(true).toBe(true); })); }); describe('Callback Integration', () => { var onColumnResizeMock; var onColumnResizeStartMock; var onColumnResizeEndMock; beforeEach(() => { onColumnResizeMock = jest.fn(); onColumnResizeStartMock = jest.fn(); onColumnResizeEndMock = jest.fn(); }); afterEach(() => { jest.clearAllMocks(); }); it('should call all resize callbacks in sequence', /*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { renderColumnResize({ columns: defaultColumns, isTableResizable: true, onColumnResize: onColumnResizeMock, onColumnResizeStart: onColumnResizeStartMock, onColumnResizeEnd: onColumnResizeEndMock }); var mockStartEvent = new MouseEvent('mousedown'); var mockEndEvent = new MouseEvent('mouseup'); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext24; (_columnResizeContext24 = _columnResizeContext) == null || _columnResizeContext24.startColumnResize('col1', mockStartEvent); })); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext25; (_columnResizeContext25 = _columnResizeContext) == null || _columnResizeContext25.resizeColumn('col1', 180); })); yield (0, _react2.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () { var _columnResizeContext26; (_columnResizeContext26 = _columnResizeContext) == null || _columnResizeContext26.endColumnResize('col1', mockEndEvent); })); expect(onColumnResizeStartMock).toHaveBeenCalledWith('col1', 100, mockStartEvent); expect(onColumnResizeMock).toHaveBeenCalledWith('col1', 180); expect(onColumnResizeEndMock).toHaveBeenCalledWith('col1', 180, mockEndEvent); expect(onColumnResizeStartMock).toHaveBeenCalledTimes(1); expect(onColumnResizeMock).toHaveBeenCalledTimes(1); expect(onColumnResizeEndMock).toHaveBeenCalledTimes(1); })); }); }); //# sourceMappingURL=ColumnResize.spec.js.map