93 lines
3.1 KiB
TypeScript
93 lines
3.1 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
|
|
|
vi.mock('@/services/database/edges', () => ({
|
|
edgeService: {
|
|
getEdgeById: vi.fn(),
|
|
getNodeConnections: vi.fn(),
|
|
getEdges: vi.fn(),
|
|
},
|
|
}));
|
|
|
|
import { edgeService } from '@/services/database/edges';
|
|
import { queryEdgeTool } from '@/tools/database/queryEdge';
|
|
|
|
// Helper to call tool execute with proper AI SDK signature
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const executeQueryEdge = async (params: any) => {
|
|
const result = await queryEdgeTool.execute!(params, { toolCallId: 'test', messages: [] });
|
|
return result as { success: boolean; data?: { edges: any[]; connections?: any[] } };
|
|
};
|
|
|
|
describe('queryEdgeTool', () => {
|
|
it('returns empty list when no edges for from_node_id', async () => {
|
|
vi.mocked(edgeService.getEdges).mockResolvedValueOnce([]);
|
|
|
|
const result = await executeQueryEdge({ filters: { from_node_id: 1, limit: 10 } });
|
|
|
|
expect(result.success).toBe(true);
|
|
expect(result.data?.edges).toHaveLength(0);
|
|
});
|
|
|
|
it('returns edges when found for from_node_id', async () => {
|
|
vi.mocked(edgeService.getEdges).mockResolvedValueOnce([
|
|
{ id: 1, from_node_id: 1, to_node_id: 2, source: 'user', created_at: '' },
|
|
]);
|
|
|
|
const result = await executeQueryEdge({ filters: { from_node_id: 1, limit: 10 } });
|
|
|
|
expect(result.success).toBe(true);
|
|
expect(result.data?.edges).toHaveLength(1);
|
|
});
|
|
|
|
it('returns edge by ID when edge_id provided', async () => {
|
|
vi.mocked(edgeService.getEdgeById).mockResolvedValueOnce({
|
|
id: 9,
|
|
from_node_id: 1,
|
|
to_node_id: 2,
|
|
source: 'user',
|
|
created_at: '',
|
|
});
|
|
|
|
const result = await executeQueryEdge({ filters: { edge_id: 9, limit: 10 } });
|
|
|
|
expect(result.success).toBe(true);
|
|
expect(result.data?.edges).toHaveLength(1);
|
|
});
|
|
|
|
it('returns compact connection payloads for node traversal', async () => {
|
|
vi.mocked(edgeService.getNodeConnections).mockResolvedValueOnce([
|
|
{
|
|
edge: {
|
|
id: 42,
|
|
from_node_id: 1,
|
|
to_node_id: 2,
|
|
source: 'user',
|
|
created_at: '',
|
|
context: {
|
|
type: 'related_to',
|
|
explanation: 'A'.repeat(300),
|
|
confidence: 0.8,
|
|
},
|
|
},
|
|
connected_node: {
|
|
id: 2,
|
|
title: 'Connected node',
|
|
description: 'B'.repeat(250),
|
|
notes: 'Hidden notes should not be returned',
|
|
chunk: 'Hidden chunk should not be returned',
|
|
},
|
|
},
|
|
] as any);
|
|
|
|
const result = await executeQueryEdge({ filters: { node_id: 1, limit: 20 } });
|
|
|
|
expect(result.success).toBe(true);
|
|
expect(result.data?.edges).toHaveLength(1);
|
|
expect(result.data?.connections).toHaveLength(1);
|
|
expect(result.data?.connections?.[0].connected_node.notes).toBeUndefined();
|
|
expect(result.data?.connections?.[0].connected_node.chunk).toBeUndefined();
|
|
expect(result.data?.connections?.[0].connected_node.description.length).toBeLessThanOrEqual(140);
|
|
expect(result.data?.edges?.[0].context.explanation.length).toBeLessThanOrEqual(180);
|
|
});
|
|
});
|