mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-18 07:23:03 +00:00
68346: Review - TypeDocs and Test cases
This commit is contained in:
107
src/app/core/data/array-move-change-analyzer.service.spec.ts
Normal file
107
src/app/core/data/array-move-change-analyzer.service.spec.ts
Normal file
@@ -0,0 +1,107 @@
|
||||
import { ArrayMoveChangeAnalyzer } from './array-move-change-analyzer.service';
|
||||
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
||||
import { Operation } from 'fast-json-patch';
|
||||
|
||||
/**
|
||||
* Helper class for creating move tests
|
||||
* Define a "from" and "to" index to move objects within the array before comparing
|
||||
*/
|
||||
class MoveTest {
|
||||
from: number;
|
||||
to: number;
|
||||
|
||||
constructor(from: number, to: number) {
|
||||
this.from = from;
|
||||
this.to = to;
|
||||
}
|
||||
}
|
||||
|
||||
describe('ArrayMoveChangeAnalyzer', () => {
|
||||
const comparator = new ArrayMoveChangeAnalyzer<string>();
|
||||
|
||||
let originalArray = [];
|
||||
|
||||
describe('when all values are defined', () => {
|
||||
beforeEach(() => {
|
||||
originalArray = [
|
||||
'98700118-d65d-4636-b1d0-dba83fc932e1',
|
||||
'4d7d0798-a8fa-45b8-b4fc-deb2819606c8',
|
||||
'e56eb99e-2f7c-4bee-9b3f-d3dcc83386b1',
|
||||
'0f608168-cdfc-46b0-92ce-889f7d3ac684',
|
||||
'546f9f5c-15dc-4eec-86fe-648007ac9e1c'
|
||||
];
|
||||
});
|
||||
|
||||
testMove([
|
||||
{ op: 'move', from: '/2', path: '/4' },
|
||||
], new MoveTest(2, 4));
|
||||
|
||||
testMove([
|
||||
{ op: 'move', from: '/0', path: '/3' },
|
||||
], new MoveTest(0, 3));
|
||||
|
||||
testMove([
|
||||
{ op: 'move', from: '/0', path: '/3' },
|
||||
{ op: 'move', from: '/2', path: '/1' }
|
||||
], new MoveTest(0, 3), new MoveTest(1, 2));
|
||||
|
||||
testMove([
|
||||
{ op: 'move', from: '/0', path: '/1' },
|
||||
{ op: 'move', from: '/3', path: '/4' }
|
||||
], new MoveTest(0, 1), new MoveTest(3, 4));
|
||||
|
||||
testMove([], new MoveTest(0, 4), new MoveTest(4, 0));
|
||||
|
||||
testMove([
|
||||
{ op: 'move', from: '/0', path: '/3' },
|
||||
{ op: 'move', from: '/2', path: '/1' }
|
||||
], new MoveTest(0, 4), new MoveTest(1, 3), new MoveTest(2, 4));
|
||||
});
|
||||
|
||||
describe('when some values are undefined (index 2 and 3)', () => {
|
||||
beforeEach(() => {
|
||||
originalArray = [
|
||||
'98700118-d65d-4636-b1d0-dba83fc932e1',
|
||||
'4d7d0798-a8fa-45b8-b4fc-deb2819606c8',
|
||||
undefined,
|
||||
undefined,
|
||||
'546f9f5c-15dc-4eec-86fe-648007ac9e1c'
|
||||
];
|
||||
});
|
||||
|
||||
// It can't create a move operation for undefined values, so it should create move operations for the defined values instead
|
||||
testMove([
|
||||
{ op: 'move', from: '/4', path: '/3' },
|
||||
], new MoveTest(2, 4));
|
||||
|
||||
// Moving a defined value should result in the same operations
|
||||
testMove([
|
||||
{ op: 'move', from: '/0', path: '/3' },
|
||||
], new MoveTest(0, 3));
|
||||
});
|
||||
|
||||
/**
|
||||
* Helper function for creating a move test
|
||||
*
|
||||
* @param expectedOperations An array of expected operations after comparing the original array with the array
|
||||
* created using the provided MoveTests
|
||||
* @param moves An array of MoveTest objects telling the test where to move objects before comparing
|
||||
*/
|
||||
function testMove(expectedOperations: Operation[], ...moves: MoveTest[]) {
|
||||
describe(`move ${moves.map((move) => `${move.from} to ${move.to}`).join(' and ')}`, () => {
|
||||
let result;
|
||||
|
||||
beforeEach(() => {
|
||||
const movedArray = [...originalArray];
|
||||
moves.forEach((move) => {
|
||||
moveItemInArray(movedArray, move.from, move.to);
|
||||
});
|
||||
result = comparator.diff(originalArray, movedArray);
|
||||
});
|
||||
|
||||
it('should create the expected move operations', () => {
|
||||
expect(result).toEqual(expectedOperations);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
Reference in New Issue
Block a user