agent-ecosystem/test/renderer/features/agent-graph/drawEdges.test.ts
2026-05-21 01:10:48 +03:00

92 lines
2.4 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest';
import { drawEdges } from '../../../../packages/agent-graph/src/canvas/draw-edges';
import type { GraphEdge, GraphNode } from '@claude-teams/agent-graph';
function createMockContext(): CanvasRenderingContext2D {
let fillStyle: string | CanvasGradient | CanvasPattern = '';
let strokeStyle: string | CanvasGradient | CanvasPattern = '';
let globalAlpha = 1;
return {
save: vi.fn(),
restore: vi.fn(),
beginPath: vi.fn(),
closePath: vi.fn(),
moveTo: vi.fn(),
lineTo: vi.fn(),
bezierCurveTo: vi.fn(),
fill: vi.fn(),
stroke: vi.fn(),
setLineDash: vi.fn(),
shadowColor: '',
shadowBlur: 0,
lineWidth: 1,
get fillStyle() {
return fillStyle;
},
set fillStyle(value: string | CanvasGradient | CanvasPattern) {
fillStyle = value;
},
get strokeStyle() {
return strokeStyle;
},
set strokeStyle(value: string | CanvasGradient | CanvasPattern) {
strokeStyle = value;
},
get globalAlpha() {
return globalAlpha;
},
set globalAlpha(value: number) {
globalAlpha = value;
},
} as unknown as CanvasRenderingContext2D;
}
function createNode(id: string, x: number, y: number): GraphNode {
return {
id,
kind: 'member',
label: id,
state: 'active',
x,
y,
domainRef: { kind: 'member', teamName: 'team', memberName: id },
};
}
const messageEdge: GraphEdge = {
id: 'edge:msg:member:team:alice:member:team:bob',
source: 'member:team:alice',
target: 'member:team:bob',
type: 'message',
};
describe('drawEdges', () => {
it('does not draw idle message edges', () => {
const ctx = createMockContext();
const nodeMap = new Map([
[messageEdge.source, createNode(messageEdge.source, 0, 0)],
[messageEdge.target, createNode(messageEdge.target, 100, 0)],
]);
drawEdges(ctx, [messageEdge], nodeMap, 0, new Set());
expect(ctx.beginPath).not.toHaveBeenCalled();
expect(ctx.fill).not.toHaveBeenCalled();
});
it('draws message edges while a particle is active on them', () => {
const ctx = createMockContext();
const nodeMap = new Map([
[messageEdge.source, createNode(messageEdge.source, 0, 0)],
[messageEdge.target, createNode(messageEdge.target, 100, 0)],
]);
drawEdges(ctx, [messageEdge], nodeMap, 0, new Set([messageEdge.id]));
expect(ctx.beginPath).toHaveBeenCalled();
expect(ctx.fill).toHaveBeenCalled();
});
});