UNPKG

@integec/grid-tools

Version:
317 lines (313 loc) 9.72 kB
"use strict"; var editEngine = _interopRequireWildcard(require("./editEngine")); var _cols = require("./cols"); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } } /* eslint-env jest */ test('initial edit info should not be dirty', function () { expect(editEngine.isDirty(editEngine.generateInitialEditInfo())).toBe(false); }); test('edit info should be dirty after add', function () { var editInfo = editEngine.generateInitialEditInfo(); var addedInfo = editEngine.addRow({ editInfo: editInfo, editedRow: {} }); expect(editEngine.isDirty(addedInfo)).toBe(true); }); test('should add row properly', function () { var editInfo = editEngine.generateInitialEditInfo(); var editedRow = {}; var addedInfo = editEngine.addRow({ editInfo: editInfo, editedRow: editedRow }); expect(addedInfo.added.length).toBe(1); expect(addedInfo.added[0]).toBe(editedRow); expect(addedInfo.history.length).toBe(1); expect(addedInfo.history[0]).toBe(editInfo); }); test('should add row with bulkOp properly', function () { var editInfo = editEngine.generateInitialEditInfo(); var editedRow = {}; var addedInfo = editEngine.batchAddRow({ editInfo: editInfo, rows: [editedRow] }); expect(addedInfo.added.length).toBe(1); expect(addedInfo.added[0]).toBe(editedRow); expect(addedInfo.history.length).toBe(1); expect(addedInfo.history[0]).toBe(editInfo); }); test('should do nothing when currentRow and editedRow are not defined', function () { var initialEdit = editEngine.generateInitialEditInfo(); var updated1 = editEngine.updateRow({ editInfo: initialEdit }); expect(initialEdit).toBe(updated1); }); test('should update and remove row properly', function () { var row1 = { a: 1, b: '2' }; var row1Updated = { a: 2, b: '2' }; var initialEdit = editEngine.generateInitialEditInfo(); var updated1 = editEngine.updateRow({ editInfo: initialEdit, currentRow: row1, editedRow: row1Updated }); expect(updated1.updated).toContain(row1Updated); expect(updated1.dirtyMap.has(row1Updated)).toBe(true); expect(updated1.updatedMap.has(row1)).toBe(true); expect(updated1.history.length).toBe(1); var row2Updated = { a: 2, b: '3' }; var updated2 = editEngine.updateRow({ editInfo: updated1, currentRow: row1Updated, editedRow: row2Updated }); expect(updated2.updated).toContain(row2Updated); expect(updated2.updated.length).toBe(1); expect(updated2.dirtyMap.has(row2Updated)).toBe(true); expect(updated2.updatedMap.has(row1)).toBe(true); expect(updated2.history.length).toBe(2); var rowAdded = { a: 5, b: '4' }; var updated3 = editEngine.updateRow({ editInfo: updated2, currentRow: undefined, editedRow: rowAdded }); expect(updated3.added).toContain(rowAdded); expect(updated3.history.length).toBe(3); var rowAddedUpdate = { a: 6, b: '4' }; var updated4 = editEngine.updateRow({ editInfo: updated3, currentRow: rowAdded, editedRow: rowAddedUpdate }); expect(updated4.added).toContain(rowAddedUpdate); expect(updated4.added).not.toContain(rowAdded); expect(updated4.updated).not.toContain(rowAddedUpdate); expect(updated4.updated).not.toContain(rowAdded); expect(updated4.dirtyMap.has(rowAdded)).toBe(false); expect(updated4.dirtyMap.has(rowAddedUpdate)).toBe(false); expect(updated4.updatedMap.has(rowAdded)).toBe(false); expect(updated4.updatedMap.has(rowAddedUpdate)).toBe(false); var undo1 = editEngine.undo(updated4); expect(undo1).toBe(updated3); var undo2 = editEngine.undo(undo1); expect(undo2).toBe(updated2); var undo3 = editEngine.undo(undo2); expect(undo3).toBe(updated1); var result1 = editEngine.applyEdits({ data: [row1], editInfo: updated4 }); expect(result1).toContain(rowAddedUpdate); expect(result1).toContain(row2Updated); expect(result1.length).toBe(2); var deleted1 = editEngine.removeRow({ editInfo: updated4, currentRow: rowAddedUpdate }); expect(deleted1.removed.length).toBe(0); var result2 = editEngine.applyEdits({ data: [row1], editInfo: deleted1 }); expect(result2).toContain(row2Updated); expect(result2.length).toBe(1); var deleted2 = editEngine.removeRow({ editInfo: updated4, currentRow: row2Updated }); expect(deleted2.updated.length).toBe(0); expect(deleted2.updatedMap.size).toBe(0); expect(deleted2.dirtyMap.size).toBe(0); var result3 = editEngine.applyEdits({ data: [row1], editInfo: deleted2 }); expect(result3).toContain(rowAddedUpdate); expect(result3.length).toBe(1); }); test('should update and remove row with batchOp properly', function () { var row1 = { a: 1, b: '2' }; var row1Updated = { a: 2, b: '2' }; var initialEdit = editEngine.generateInitialEditInfo(); var updated1 = editEngine.batchUpdateRow({ editInfo: initialEdit, updates: [{ currentRow: row1, editedRow: row1Updated }] }); expect(updated1.updated).toContain(row1Updated); expect(updated1.dirtyMap.has(row1Updated)).toBe(true); expect(updated1.updatedMap.has(row1)).toBe(true); expect(updated1.history.length).toBe(1); var row2Updated = { a: 2, b: '3' }; var updated2 = editEngine.batchUpdateRow({ editInfo: updated1, updates: [{ currentRow: row1Updated, editedRow: row2Updated }] }); expect(updated2.updated).toContain(row2Updated); expect(updated2.updated.length).toBe(1); expect(updated2.dirtyMap.has(row2Updated)).toBe(true); expect(updated2.updatedMap.has(row1)).toBe(true); expect(updated2.history.length).toBe(2); var rowAdded = { a: 5, b: '4' }; var updated3 = editEngine.batchUpdateRow({ editInfo: updated2, updates: [{ currentRow: undefined, editedRow: rowAdded }] }); expect(updated3.added).toContain(rowAdded); expect(updated3.history.length).toBe(3); var rowAddedUpdate = { a: 6, b: '4' }; var updated4 = editEngine.batchUpdateRow({ editInfo: updated3, updates: [{ currentRow: rowAdded, editedRow: rowAddedUpdate }] }); expect(updated4.added).toContain(rowAddedUpdate); expect(updated4.added).not.toContain(rowAdded); expect(updated4.updated).not.toContain(rowAddedUpdate); expect(updated4.updated).not.toContain(rowAdded); expect(updated4.dirtyMap.has(rowAdded)).toBe(false); expect(updated4.dirtyMap.has(rowAddedUpdate)).toBe(false); expect(updated4.updatedMap.has(rowAdded)).toBe(false); expect(updated4.updatedMap.has(rowAddedUpdate)).toBe(false); var undo1 = editEngine.undo(updated4); expect(undo1).toBe(updated3); var undo2 = editEngine.undo(undo1); expect(undo2).toBe(updated2); var undo3 = editEngine.undo(undo2); expect(undo3).toBe(updated1); var result1 = editEngine.applyEdits({ data: [row1], editInfo: updated4 }); expect(result1).toContain(rowAddedUpdate); expect(result1).toContain(row2Updated); expect(result1.length).toBe(2); var deleted1 = editEngine.batchRemove({ editInfo: updated4, rows: [rowAddedUpdate] }); expect(deleted1.removed.length).toBe(0); var result2 = editEngine.applyEdits({ data: [row1], editInfo: deleted1 }); expect(result2).toContain(row2Updated); expect(result2.length).toBe(1); var deleted2 = editEngine.batchRemove({ editInfo: updated4, rows: [row2Updated] }); expect(deleted2.updated.length).toBe(0); expect(deleted2.updatedMap.size).toBe(0); expect(deleted2.dirtyMap.size).toBe(0); var result3 = editEngine.applyEdits({ data: [row1], editInfo: deleted2 }); expect(result3).toContain(rowAddedUpdate); expect(result3.length).toBe(1); }); test('should validate data properly', function () { var editInfo = editEngine.generateInitialEditInfo(); var headers = [(0, _cols.numCol)({ ident: 'id', display: 'ID', setInvalidMessage: function setInvalidMessage(props) { return (0, _cols.multiValidator)({ validators: [_cols.numberValidator, function (_ref) { var value = _ref.value; return value > 50 && 'Invalid Data'; }] })(props); } })]; var addedRow1 = { id: 'abcd' }; var addedInfo1 = editEngine.addRow({ editInfo: editInfo, editedRow: addedRow1 }); var errors1 = editEngine.validateData({ originalData: [], editInfo: addedInfo1, headers: headers }); expect(errors1.length).toBe(1); var addedRow2 = { id: 34 }; var addedInfo2 = editEngine.addRow({ editInfo: editInfo, editedRow: addedRow2 }); var errors2 = editEngine.validateData({ originalData: [], editInfo: addedInfo2, headers: headers }); expect(errors2.length).toBe(0); var headers2 = [(0, _cols.numCol)({ ident: 'id', display: 'ID', setInvalidMessage: function setInvalidMessage(props) { return (0, _cols.multiValidator)({ validators: [_cols.numberValidator, function (_ref2) { var value = _ref2.value; return value < 50 && 'Invalid Data'; }] })(props); } })]; var errors3 = editEngine.validateData({ originalData: [], editInfo: addedInfo2, headers: headers2 }); expect(errors3.length).toBe(1); }); //# sourceMappingURL=editEngine.test.js.map