test: add missing tests for cluster edges, handles, colors, and none check method

- backend: cluster edge creation with source/target handles, handle persistence through PATCH
- frontend: cluster color in edgeColors, onConnect preserves sourceHandle/targetHandle
This commit is contained in:
Pouzor
2026-03-08 11:41:09 +01:00
parent 8de4f9b32d
commit e306cd7b49
3 changed files with 50 additions and 1 deletions
+37
View File
@@ -100,3 +100,40 @@ async def test_create_edge_requires_auth(client: AsyncClient, two_nodes):
src, tgt = two_nodes
res = await client.post("/api/v1/edges", json={"source": src, "target": tgt, "type": "ethernet"})
assert res.status_code == 401
async def test_create_cluster_edge_with_handles(client: AsyncClient, headers: dict, two_nodes):
src, tgt = two_nodes
res = await client.post(
"/api/v1/edges",
json={
"source": src,
"target": tgt,
"type": "cluster",
"source_handle": "cluster-right",
"target_handle": "cluster-left",
},
headers=headers,
)
assert res.status_code == 201
data = res.json()
assert data["type"] == "cluster"
assert data["source_handle"] == "cluster-right"
assert data["target_handle"] == "cluster-left"
async def test_source_and_target_handle_persist_through_update(client: AsyncClient, headers: dict, two_nodes):
src, tgt = two_nodes
edge_id = (
await client.post(
"/api/v1/edges",
json={"source": src, "target": tgt, "type": "cluster", "source_handle": "cluster-right", "target_handle": "cluster-left"},
headers=headers,
)
).json()["id"]
res = await client.patch(f"/api/v1/edges/{edge_id}", json={"label": "corosync"}, headers=headers)
assert res.status_code == 200
data = res.json()
assert data["source_handle"] == "cluster-right"
assert data["target_handle"] == "cluster-left"
assert data["label"] == "corosync"
@@ -117,6 +117,14 @@ describe('canvasStore', () => {
expect(hasUnsavedChanges).toBe(true)
})
it('onConnect preserves sourceHandle and targetHandle for cluster edges', () => {
useCanvasStore.getState().onConnect({ source: 'n1', target: 'n2', sourceHandle: 'cluster-right', targetHandle: 'cluster-left' })
const { edges } = useCanvasStore.getState()
expect(edges).toHaveLength(1)
expect(edges[0].sourceHandle).toBe('cluster-right')
expect(edges[0].targetHandle).toBe('cluster-left')
})
it('addNode with parent_id sets parentId and extent', () => {
useCanvasStore.getState().addNode(makeNode('parent'))
useCanvasStore.getState().addNode(makeNode('child', { parent_id: 'parent' }))
@@ -2,7 +2,7 @@ import { describe, it, expect } from 'vitest'
import { EDGE_DEFAULT_COLORS } from '../edgeColors'
import type { EdgeType } from '@/types'
const EDGE_TYPES: EdgeType[] = ['ethernet', 'wifi', 'iot', 'vlan', 'virtual']
const EDGE_TYPES: EdgeType[] = ['ethernet', 'wifi', 'iot', 'vlan', 'virtual', 'cluster']
describe('EDGE_DEFAULT_COLORS', () => {
it('has an entry for every EdgeType', () => {
@@ -32,4 +32,8 @@ describe('EDGE_DEFAULT_COLORS', () => {
it('virtual default is muted gray', () => {
expect(EDGE_DEFAULT_COLORS.virtual).toBe('#8b949e')
})
it('cluster default is proxmox orange', () => {
expect(EDGE_DEFAULT_COLORS.cluster).toBe('#ff6e00')
})
})