This commit is contained in:
72
packages/waggle-dance/tests/integration.test.ts
Normal file
72
packages/waggle-dance/tests/integration.test.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import { describe, it, expect, vi } from 'vitest';
|
||||
import { WaggleDanceDispatcher } from '../src/dispatcher.js';
|
||||
import type { WaggleMessage } from '@waggle/shared';
|
||||
|
||||
describe('Waggle Dance Integration', () => {
|
||||
it('full workflow: task_delegation → knowledge_check → skill_request', async () => {
|
||||
const deps = {
|
||||
searchMemory: vi.fn(async (q: string) => `Found memories about: ${q}`),
|
||||
resolveCapability: vi.fn(() => [
|
||||
{ source: 'native', name: 'web_search', description: 'Web search', available: true },
|
||||
]),
|
||||
spawnWorker: vi.fn(async (task: string) => `Worker completed: ${task}`),
|
||||
};
|
||||
const dispatcher = new WaggleDanceDispatcher(deps);
|
||||
|
||||
// 1. Delegate a task
|
||||
const taskResult = await dispatcher.dispatch({
|
||||
id: '1', teamId: 't1', senderId: 'a1', type: 'request', subtype: 'task_delegation',
|
||||
content: { task: 'Analyze market data', role: 'analyst' },
|
||||
referenceId: null, routing: null, createdAt: new Date(),
|
||||
});
|
||||
expect(taskResult.handled).toBe(true);
|
||||
expect(deps.spawnWorker).toHaveBeenCalledWith('Analyze market data', 'analyst', undefined);
|
||||
|
||||
// 2. Check knowledge
|
||||
const knowledgeResult = await dispatcher.dispatch({
|
||||
id: '2', teamId: 't1', senderId: 'a1', type: 'request', subtype: 'knowledge_check',
|
||||
content: { query: 'market trends' },
|
||||
referenceId: null, routing: null, createdAt: new Date(),
|
||||
});
|
||||
expect(knowledgeResult.handled).toBe(true);
|
||||
expect(knowledgeResult.response).toContain('market trends');
|
||||
|
||||
// 3. Request a skill
|
||||
const skillResult = await dispatcher.dispatch({
|
||||
id: '3', teamId: 't1', senderId: 'a1', type: 'request', subtype: 'skill_request',
|
||||
content: { skill: 'web_search' },
|
||||
referenceId: null, routing: null, createdAt: new Date(),
|
||||
});
|
||||
expect(skillResult.handled).toBe(true);
|
||||
expect(skillResult.response).toContain('web_search');
|
||||
});
|
||||
|
||||
it('round-trip: task delegation result feeds knowledge check', async () => {
|
||||
let lastWorkerResult = '';
|
||||
const deps = {
|
||||
searchMemory: vi.fn(async () => lastWorkerResult),
|
||||
resolveCapability: vi.fn(() => []),
|
||||
spawnWorker: vi.fn(async (task: string) => {
|
||||
lastWorkerResult = `Analysis complete for: ${task}`;
|
||||
return lastWorkerResult;
|
||||
}),
|
||||
};
|
||||
const dispatcher = new WaggleDanceDispatcher(deps);
|
||||
|
||||
// First: delegate
|
||||
await dispatcher.dispatch({
|
||||
id: '1', teamId: 't1', senderId: 'a1', type: 'request', subtype: 'task_delegation',
|
||||
content: { task: 'Analyze competitors', role: 'analyst' },
|
||||
referenceId: null, routing: null, createdAt: new Date(),
|
||||
});
|
||||
|
||||
// Then: check what was learned
|
||||
const result = await dispatcher.dispatch({
|
||||
id: '2', teamId: 't1', senderId: 'a1', type: 'request', subtype: 'knowledge_check',
|
||||
content: { query: 'competitors' },
|
||||
referenceId: null, routing: null, createdAt: new Date(),
|
||||
});
|
||||
|
||||
expect(result.response).toContain('Analyze competitors');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user