Files
vue-flow/tests/cypress/component/2-vue-flow/customConnectionLine.cy.ts
2023-03-08 16:32:11 +01:00

82 lines
2.2 KiB
TypeScript

import { h } from 'vue'
import type { FunctionalComponent } from 'vue'
import type { ConnectionLineProps, GraphNode, HandleElement } from '@vue-flow/core'
import { BaseEdge, getBezierPath } from '@vue-flow/core'
let propTargetNode: GraphNode | null | undefined = null
let propTargetHandle: HandleElement | null | undefined = null
const CustomConnectionLine: FunctionalComponent<ConnectionLineProps> = (props: ConnectionLineProps) => {
const path = getBezierPath(props)
propTargetNode = props.targetNode
propTargetHandle = props.targetHandle
return h(BaseEdge, { path: path[0], class: 'test-custom-connection-line' })
}
describe('Check if custom connection lines are rendered', () => {
beforeEach(() => {
cy.vueFlow(
{
modelValue: [
{
id: '1',
label: 'Node 1',
position: { x: 0, y: 0 },
},
{
id: '2',
type: 'output',
label: 'Node 2',
position: { x: 300, y: 300 },
},
],
},
{},
{ 'connection-line': CustomConnectionLine },
)
})
it('renders custom connection line', () => {
cy.window().then((win) => {
const sourceHandle = cy.get(`[data-nodeid="1"].source`)
const targetHandle = cy.get(`[data-nodeid="2"].target`)
targetHandle.then((handle) => {
const target = handle[0]
const { x, y } = target.getBoundingClientRect()
sourceHandle
.trigger('mousedown', {
button: 0,
force: true,
view: win,
})
.trigger('mousemove', {
clientX: x + 5,
clientY: y + 5,
force: true,
})
cy.get('.test-custom-connection-line')
.should('have.length', 1)
.then(() => {
expect(propTargetNode).to.not.be.null
expect(propTargetNode?.id).to.equal('2')
expect(propTargetHandle).to.not.be.null
expect(propTargetHandle?.id).to.equal('2__handle-top')
sourceHandle.trigger('mouseup', {
clientX: x + 5,
clientY: y + 5,
force: true,
view: win,
})
})
})
})
})
})