Files
waggle-os/packages/waggle-dance/tests/protocol.test.ts
Oleg Maslov 0c3e2ead3b
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled
moving
2026-09-02 10:10:29 +02:00

56 lines
2.4 KiB
TypeScript

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);
});
});
});