This commit is contained in:
55
packages/waggle-dance/tests/protocol.test.ts
Normal file
55
packages/waggle-dance/tests/protocol.test.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import type { MessageType, MessageSubtype } from '@waggle/shared';
|
||||
import { validateMessageTypeCombo, isRoutedMessage } from '../src/protocol.js';
|
||||
|
||||
describe('Waggle Dance protocol', () => {
|
||||
describe('validateMessageTypeCombo', () => {
|
||||
it('validates correct request subtypes', () => {
|
||||
expect(validateMessageTypeCombo('request', 'knowledge_check')).toBe(true);
|
||||
expect(validateMessageTypeCombo('request', 'task_delegation')).toBe(true);
|
||||
expect(validateMessageTypeCombo('request', 'skill_request')).toBe(true);
|
||||
expect(validateMessageTypeCombo('request', 'model_recommendation')).toBe(true);
|
||||
});
|
||||
|
||||
it('validates correct response subtypes', () => {
|
||||
expect(validateMessageTypeCombo('response', 'knowledge_match')).toBe(true);
|
||||
expect(validateMessageTypeCombo('response', 'task_claim')).toBe(true);
|
||||
});
|
||||
|
||||
it('validates correct broadcast subtypes', () => {
|
||||
expect(validateMessageTypeCombo('broadcast', 'discovery')).toBe(true);
|
||||
expect(validateMessageTypeCombo('broadcast', 'routed_share')).toBe(true);
|
||||
expect(validateMessageTypeCombo('broadcast', 'skill_share')).toBe(true);
|
||||
expect(validateMessageTypeCombo('broadcast', 'model_recipe')).toBe(true);
|
||||
});
|
||||
|
||||
it('rejects invalid type-subtype combinations', () => {
|
||||
expect(validateMessageTypeCombo('request', 'discovery')).toBe(false);
|
||||
expect(validateMessageTypeCombo('broadcast', 'knowledge_check')).toBe(false);
|
||||
expect(validateMessageTypeCombo('response', 'skill_share')).toBe(false);
|
||||
expect(validateMessageTypeCombo('request', 'task_claim')).toBe(false);
|
||||
});
|
||||
|
||||
it('rejects completely invalid types', () => {
|
||||
expect(validateMessageTypeCombo('invalid' as MessageType, 'discovery')).toBe(false);
|
||||
});
|
||||
|
||||
it('rejects completely invalid subtypes', () => {
|
||||
expect(validateMessageTypeCombo('request', 'invalid' as MessageSubtype)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('isRoutedMessage', () => {
|
||||
it('identifies routed_share as routed', () => {
|
||||
expect(isRoutedMessage('routed_share')).toBe(true);
|
||||
});
|
||||
|
||||
it('identifies non-routed subtypes', () => {
|
||||
expect(isRoutedMessage('discovery')).toBe(false);
|
||||
expect(isRoutedMessage('knowledge_check')).toBe(false);
|
||||
expect(isRoutedMessage('task_claim')).toBe(false);
|
||||
expect(isRoutedMessage('skill_share')).toBe(false);
|
||||
expect(isRoutedMessage('model_recipe')).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user