// strip-reorder.mjs's drop rule: where a dragged slide lands, as the // `after` a move_slide wants, and when a drop changes nothing. import test from 'node:test' import assert from 'node:assert/strict' import { dropTarget, dropOp } from './strip-reorder.mjs' const ids = ['a', 'b', 'c', 'd'] test('dropTarget: before puts it ahead of the item, after behind it, null means first', () => { assert.equal(dropTarget(ids, 'c', 'a', 'before'), null) assert.equal(dropTarget(ids, 'c', 'a', 'after'), 'a') assert.equal(dropTarget(ids, 'a', 'd', 'after'), 'd') assert.equal(dropTarget(ids, 'a', 'd', 'before'), 'c') assert.equal(dropTarget(ids, 'd', 'b', 'before'), 'a') }) test('a drop that leaves the order as it is is no move', () => { assert.equal(dropTarget(ids, 'a', 'a', 'before'), undefined) assert.equal(dropTarget(ids, 'b', 'a', 'after'), undefined) assert.equal(dropTarget(ids, 'b', 'c', 'before'), undefined) assert.equal(dropTarget(ids, 'a', 'b', 'before'), undefined) assert.equal(dropTarget(ids, 'a', 'zz', 'before'), undefined) assert.equal(dropOp(ids, 'b', 'a', 'after'), null) }) test('dropOp is the move_slide', () => { assert.deepEqual(dropOp(ids, 'c', 'a', 'before'), { op: 'move_slide', id: 'c' }) assert.deepEqual(dropOp(ids, 'a', 'c', 'after'), { op: 'move_slide', id: 'a', after: 'c' }) })