import type { ComponentProps } from 'react' import { render } from '@testing-library/react' import { getBezierPath, Position } from 'reactflow' import CustomConnectionLine from '../custom-connection-line' const createConnectionLineProps = ( overrides: Partial> = {}, ): ComponentProps => ({ fromX: 10, fromY: 20, toX: 70, toY: 80, fromPosition: Position.Right, toPosition: Position.Left, connectionLineType: undefined, connectionStatus: null, ...overrides, } as ComponentProps) describe('CustomConnectionLine', () => { it('should render the bezier path and target marker', () => { const [expectedPath] = getBezierPath({ sourceX: 10, sourceY: 20, sourcePosition: Position.Right, targetX: 70, targetY: 80, targetPosition: Position.Left, curvature: 0.16, }) const { container } = render( , ) const path = container.querySelector('path') const marker = container.querySelector('rect') expect(path).toHaveAttribute('fill', 'none') expect(path).toHaveAttribute('stroke', '#D0D5DD') expect(path).toHaveAttribute('stroke-width', '2') expect(path).toHaveAttribute('d', expectedPath) expect(marker).toHaveAttribute('x', '70') expect(marker).toHaveAttribute('y', '76') expect(marker).toHaveAttribute('width', '2') expect(marker).toHaveAttribute('height', '8') expect(marker).toHaveAttribute('fill', '#2970FF') }) it('should update the path when the endpoints change', () => { const [expectedPath] = getBezierPath({ sourceX: 30, sourceY: 40, sourcePosition: Position.Right, targetX: 160, targetY: 200, targetPosition: Position.Left, curvature: 0.16, }) const { container } = render( , ) expect(container.querySelector('path')).toHaveAttribute('d', expectedPath) expect(container.querySelector('rect')).toHaveAttribute('x', '160') expect(container.querySelector('rect')).toHaveAttribute('y', '196') }) })