devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
302 lines (301 loc) • 7.94 kB
JavaScript
/**
* DevExtreme (cjs/__internal/scheduler/appointments/utils/get_arrays_diff.test.js)
* Version: 25.2.3
* Build date: Fri Dec 12 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
"use strict";
var _globals = require("@jest/globals");
var _get_arrays_diff = require("./get_arrays_diff");
const compare = (a, b) => a.id === b.id && a.name === b.name;
const getOperations = items => items.map((item => {
if ((0, _get_arrays_diff.isNeedToAdd)(item)) {
return "+"
}
return (0, _get_arrays_diff.isNeedToRemove)(item) ? "-" : "="
})).join("");
(0, _globals.describe)("getArraysDiff", (() => {
(0, _globals.it)("should process both empty arrays", (() => {
const diff = (0, _get_arrays_diff.getArraysDiff)([], [], compare);
(0, _globals.expect)(diff).toEqual([])
}));
(0, _globals.it)("should no mark for no changes", (() => {
const a = [{
id: 1,
name: "A"
}, {
id: 2,
name: "B"
}, {
id: 3,
name: "C"
}];
const diff = (0, _get_arrays_diff.getArraysDiff)(a, [{
id: 1,
name: "A"
}, {
id: 2,
name: "B"
}, {
id: 3,
name: "C"
}], compare);
(0, _globals.expect)(getOperations(diff)).toBe("===");
(0, _globals.expect)(diff).toEqual([{
item: a[0]
}, {
item: a[1]
}, {
item: a[2]
}])
}));
(0, _globals.it)("should mark insertion from empty to something", (() => {
const b = [{
id: 10,
name: "X"
}, {
id: 11,
name: "Y"
}];
const diff = (0, _get_arrays_diff.getArraysDiff)([], b, compare);
(0, _globals.expect)(getOperations(diff)).toBe("++");
(0, _globals.expect)(diff).toEqual([{
item: b[0],
needToAdd: true
}, {
item: b[1],
needToAdd: true
}])
}));
(0, _globals.it)("should removal from something to empty", (() => {
const a = [{
id: 5,
name: "A"
}, {
id: 6,
name: "B"
}];
const diff = (0, _get_arrays_diff.getArraysDiff)(a, [], compare);
(0, _globals.expect)(getOperations(diff)).toBe("--");
(0, _globals.expect)(diff).toEqual([{
item: a[0],
needToRemove: true
}, {
item: a[1],
needToRemove: true
}])
}));
(0, _globals.it)("should mark remove and add for one object replacement", (() => {
const a = [{
id: 1,
name: "A"
}, {
id: 2,
name: "B"
}, {
id: 4,
name: "D"
}];
const b = [{
id: 1,
name: "A"
}, {
id: 3,
name: "C"
}, {
id: 4,
name: "D"
}];
const diff = (0, _get_arrays_diff.getArraysDiff)(a, b, compare);
(0, _globals.expect)(getOperations(diff)).toBe("=+-=");
(0, _globals.expect)(diff).toEqual([{
item: a[0]
}, {
item: b[1],
needToAdd: true
}, {
item: a[1],
needToRemove: true
}, {
item: a[2]
}])
}));
(0, _globals.it)("should mark remove and add for changes inside object", (() => {
const a = [{
id: 1,
name: "A"
}, {
id: 2,
name: "B"
}, {
id: 4,
name: "D"
}];
const b = [{
id: 1,
name: "A"
}, {
id: 2,
name: "C"
}, {
id: 4,
name: "D"
}];
const diff = (0, _get_arrays_diff.getArraysDiff)(a, b, compare);
(0, _globals.expect)(getOperations(diff)).toBe("=+-=");
(0, _globals.expect)(diff).toEqual([{
item: a[0]
}, {
item: b[1],
needToAdd: true
}, {
item: a[1],
needToRemove: true
}, {
item: a[2]
}])
}));
(0, _globals.it)("should choose optimum operations for reordering", (() => {
const a = [{
id: 1,
name: "A"
}, {
id: 2,
name: "B"
}, {
id: 3,
name: "C"
}, {
id: 4,
name: "D"
}];
const b = [{
id: 4,
name: "D"
}, {
id: 1,
name: "A"
}, {
id: 2,
name: "B"
}, {
id: 3,
name: "C"
}];
const diff = (0, _get_arrays_diff.getArraysDiff)(a, b, compare);
(0, _globals.expect)(getOperations(diff)).toBe("+===-");
(0, _globals.expect)(diff).toEqual([{
item: b[0],
needToAdd: true
}, {
item: a[0]
}, {
item: a[1]
}, {
item: a[2]
}, {
item: a[3],
needToRemove: true
}])
}));
(0, _globals.it)("should choose optimum operations for reordering, insertion and removal", (() => {
const a = [{
id: 1,
name: "A"
}, {
id: 2,
name: "B"
}, {
id: 3,
name: "C"
}, {
id: 4,
name: "D"
}];
const b = [{
id: 4,
name: "D"
}, {
id: 1,
name: "A"
}, {
id: 5,
name: "E"
}, {
id: 3,
name: "C"
}];
const diff = (0, _get_arrays_diff.getArraysDiff)(a, b, compare);
(0, _globals.expect)(getOperations(diff)).toBe("+=+-=-");
(0, _globals.expect)(diff).toEqual([{
item: b[0],
needToAdd: true
}, {
item: a[0]
}, {
item: b[2],
needToAdd: true
}, {
item: a[1],
needToRemove: true
}, {
item: a[2]
}, {
item: a[3],
needToRemove: true
}])
}));
(0, _globals.it)("should save additional props in second object", (() => {
const a = [{
id: 1,
name: "A"
}, {
id: 2,
name: "B"
}, {
id: 3,
name: "C"
}, {
id: 4,
name: "D"
}];
const b = [{
id: 4,
name: "D",
extra: 10
}, {
id: 1,
name: "A",
extra: 20
}, {
id: 5,
name: "E",
extra: 30
}, {
id: 3,
name: "C",
extra: 40
}];
const diff = (0, _get_arrays_diff.getArraysDiff)(a, b, compare);
(0, _globals.expect)(getOperations(diff)).toBe("+=+-=-");
(0, _globals.expect)(diff).toEqual([{
item: b[0],
needToAdd: true
}, {
item: b[1]
}, {
item: b[2],
needToAdd: true
}, {
item: a[1],
needToRemove: true
}, {
item: b[3]
}, {
item: a[3],
needToRemove: true
}])
}))
}));