@integec/grid-tools
Version:
Integ Grid Tools
317 lines (313 loc) • 9.72 kB
JavaScript
"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