mirror of
https://github.com/tiennm99/coolify.git
synced 2026-08-25 18:25:58 +00:00
58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import { test } from 'node:test';
|
|
|
|
import { resolveCanvasNodeLayout, resolveCanvasNodePosition } from '../../../../resources/js/v5/lib/canvas-collision.ts';
|
|
|
|
test('moves a dragged canvas node to the closest non-overlapping side with a gap', () => {
|
|
const settledPosition = resolveCanvasNodePosition(
|
|
{ id: 'dragged', x: 110, y: 10, width: 320, height: 136 },
|
|
[{ id: 'existing', x: 0, y: 0, width: 320, height: 136 }],
|
|
16,
|
|
);
|
|
|
|
assert.deepEqual(settledPosition, { x: 110, y: 152 });
|
|
});
|
|
|
|
test('keeps moving until the closest side is clear', () => {
|
|
const settledPosition = resolveCanvasNodePosition(
|
|
{ id: 'dragged', x: 110, y: 10, width: 320, height: 136 },
|
|
[
|
|
{ id: 'left-blocker', x: 0, y: 0, width: 320, height: 136 },
|
|
{ id: 'bottom-blocker', x: 110, y: 152, width: 320, height: 136 },
|
|
{ id: 'top-blocker', x: 110, y: -152, width: 320, height: 136 },
|
|
],
|
|
16,
|
|
);
|
|
|
|
assert.deepEqual(settledPosition, { x: -336, y: 10 });
|
|
});
|
|
|
|
test('ignores the dragged node when comparing canvas collisions', () => {
|
|
const settledPosition = resolveCanvasNodePosition(
|
|
{ id: 'app-1', x: 24, y: 32, width: 320, height: 136 },
|
|
[{ id: 'app-1', x: 24, y: 32, width: 320, height: 136 }],
|
|
16,
|
|
);
|
|
|
|
assert.deepEqual(settledPosition, { x: 24, y: 32 });
|
|
});
|
|
|
|
|
|
test('spreads an overlapping canvas layout in order', () => {
|
|
const settledNodes = resolveCanvasNodeLayout(
|
|
[
|
|
{ id: 'first', x: 0, y: 0, width: 320, height: 136 },
|
|
{ id: 'second', x: 110, y: 10, width: 320, height: 136 },
|
|
],
|
|
16,
|
|
);
|
|
|
|
assert.deepEqual(
|
|
settledNodes.map((node) => ({ id: node.id, x: node.x, y: node.y })),
|
|
[
|
|
{ id: 'first', x: 0, y: 0 },
|
|
{ id: 'second', x: 110, y: 152 },
|
|
],
|
|
);
|
|
});
|