Files
xyflow/examples/react/cypress/components/utils/adopt-user-nodes.cy.ts
2024-09-05 15:39:32 +02:00

120 lines
3.9 KiB
TypeScript

import { adoptUserNodes } from '@xyflow/system';
import type { Node, NodeLookup, ParentLookup } from '@xyflow/react';
describe('adoptUserNodes Testing', () => {
it('builds node lookup', () => {
const nodeLookup: NodeLookup = new Map();
const parentLookup: ParentLookup = new Map();
const userNode: Node = {
id: '1',
data: { label: 'node' },
position: { x: 250, y: 5 },
measured: { width: 100, height: 50 },
};
adoptUserNodes([userNode], nodeLookup, parentLookup);
const internalNode = nodeLookup.get('1');
expect(nodeLookup.size).to.equal(1);
expect(internalNode).to.have.property('internals');
});
it('calculates positionAbsolute with nodeOrigin', () => {
const nodeLookup: NodeLookup = new Map();
const parentLookup: ParentLookup = new Map();
const userNode: Node = {
id: '1',
data: { label: 'node' },
position: { x: 250, y: 5 },
measured: { width: 100, height: 50 },
};
adoptUserNodes([userNode], nodeLookup, parentLookup, {
nodeOrigin: [0.5, 0.5],
});
const internalNode = nodeLookup.get('1');
expect(internalNode.internals.positionAbsolute.x).to.equal(userNode.position.x - userNode.measured.width / 2);
expect(internalNode.internals.positionAbsolute.y).to.equal(userNode.position.y - userNode.measured.height / 2);
});
it('calculates positionAbsolute for sub flow', () => {
const nodeLookup: NodeLookup = new Map();
const parentLookup: ParentLookup = new Map();
const userParentNode: Node = {
id: '1',
data: { label: 'node' },
position: { x: 100, y: 100 },
measured: { width: 100, height: 50 },
};
const userChildNode: Node = {
id: '2',
data: { label: 'child' },
position: { x: 0, y: 0 },
measured: { width: 100, height: 50 },
parentId: '1',
};
adoptUserNodes([userParentNode, userChildNode], nodeLookup, parentLookup);
const internalParentNode = nodeLookup.get('1');
const internalChildNode = nodeLookup.get('2');
expect(nodeLookup.size).to.equal(2);
expect(internalChildNode.internals.positionAbsolute.x).to.equal(
userChildNode.position.x + userParentNode.position.x
);
expect(internalChildNode.internals.positionAbsolute.y).to.equal(
userChildNode.position.y + userParentNode.position.y
);
});
it('calculates positionAbsolute for sub flow with nodeOrigin', () => {
const nodeLookup: NodeLookup = new Map();
const parentLookup: ParentLookup = new Map();
const nodeOrigin = [0.5, 0.5];
const userParentNode: Node = {
id: '1',
data: { label: 'node' },
position: { x: 100, y: 100 },
measured: { width: 100, height: 50 },
};
const userChildNode: Node = {
id: '2',
data: { label: 'child' },
position: { x: 0, y: 0 },
measured: { width: 100, height: 50 },
parentId: '1',
};
adoptUserNodes([userParentNode, userChildNode], nodeLookup, parentLookup, {
nodeOrigin,
});
const internalParentNode = nodeLookup.get('1');
const internalChildNode = nodeLookup.get('2');
const expectedParentX = userParentNode.position.x - userParentNode.measured.width * nodeOrigin[0];
const expectedParentY = userParentNode.position.y - userParentNode.measured.height * nodeOrigin[1];
expect(internalParentNode.internals.positionAbsolute.x).to.equal(expectedParentX);
expect(internalParentNode.internals.positionAbsolute.y).to.equal(expectedParentY);
const expectedChildX = userChildNode.position.x - userChildNode.measured.width * nodeOrigin[0] + expectedParentX;
const expectedChildY = userChildNode.position.y - userChildNode.measured.height * nodeOrigin[1] + expectedParentY;
expect(internalChildNode.internals.positionAbsolute.x).to.equal(expectedChildX);
expect(internalChildNode.internals.positionAbsolute.y).to.equal(expectedChildY);
});
});
export {};