UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

302 lines (301 loc) • 7.94 kB
/** * 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 }]) })) }));