import { render, waitFor } from '@testing-library/react'; import { Port } from '..'; import { paperRenderElementWrapper, simpleRenderElementWrapper, } from '../../../utils/test-wrappers'; import { dia } from '@joint/core'; import { ReactElement } from '../../../models/react-element'; describe('port', () => { it('should render port - check if react element is properly rendered to the dom via portals', async () => { render( , { wrapper: simpleRenderElementWrapper } ); await waitFor(() => { const port = document.querySelector('rect#myRect'); expect(port).toBeInTheDocument(); expect(port?.getAttribute('width')).toBe('10'); expect(port?.getAttribute('height')).toBe('10'); expect(port?.getAttribute('fill')).toBe('red'); }); }); it('should check if the port is created on the graph instance properly', async () => { const graph = new dia.Graph({}, { cellNamespace: { ReactElement } }); const wrapper = paperRenderElementWrapper({ graphProps: { graph, initialElements: [ { id: 'element-1', }, ], }, }); render( , { wrapper } ); await waitFor(() => { const element = graph.getCell('element-1'); expect(element).toBeInstanceOf(dia.Element); if (!element.isElement()) { throw new Error('Element is not an instance of dia.Element'); } const port = element.getPort('port-one'); expect(port).toBeDefined(); expect(port.id).toBe('port-one'); expect(port.args).toEqual({ x: 10, y: 11, dx: 1, dy: 1, }); }); }); it('should render group with port - check if react element is properly rendered to the dom via portals', async () => { render( , { wrapper: simpleRenderElementWrapper } ); await waitFor(() => { const port1 = document.querySelector('rect#myRect1'); const port2 = document.querySelector('rect#myRect2'); expect(port1).toBeInTheDocument(); expect(port2).toBeInTheDocument(); expect(port1?.getAttribute('width')).toBe('10'); expect(port1?.getAttribute('height')).toBe('10'); expect(port1?.getAttribute('fill')).toBe('red'); expect(port2?.getAttribute('width')).toBe('10'); expect(port2?.getAttribute('height')).toBe('10'); expect(port2?.getAttribute('fill')).toBe('red'); }); }); it('should check if the group with port is created on the graph instance properly', async () => { const graph = new dia.Graph({}, { cellNamespace: { ReactElement } }); const wrapper = paperRenderElementWrapper({ graphProps: { graph, initialElements: [ { id: 'element-1', }, ], }, }); render( , { wrapper } ); await waitFor(() => { const element = graph.getCell('element-1'); expect(element).toBeInstanceOf(dia.Element); if (!element.isElement()) { throw new Error('Element is not an instance of dia.Element'); } const ports = element.getGroupPorts('group-one'); expect(ports).toHaveLength(1); const [port] = ports; expect(port.id).toBe('port-one'); expect(port.args).toEqual({ x: 0, y: 1, dx: 2, dy: 3, }); }); }); });