Files
EJClaw/src/router.test.ts
2026-04-05 00:00:09 +09:00

95 lines
2.6 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import {
findChannelForDeliveryRole,
resolveChannelForDeliveryRole,
} from './router.js';
import { type Channel } from './types.js';
function createChannel(name: string, ownedJids: string[]): Channel {
return {
name,
connect: async () => {},
sendMessage: async () => {},
isConnected: () => true,
ownsJid: (jid) => ownedJids.includes(jid),
disconnect: async () => {},
};
}
describe('findChannelForDeliveryRole', () => {
const jid = 'dc:123';
it('prefers the reviewer channel for reviewer IPC messages', () => {
const ownerChannel = createChannel('discord-main', [jid]);
const reviewerChannel = createChannel('discord-review', [jid]);
expect(
findChannelForDeliveryRole(
[ownerChannel, reviewerChannel],
jid,
'reviewer',
),
).toBe(reviewerChannel);
});
it('prefers the arbiter channel for arbiter IPC messages', () => {
const ownerChannel = createChannel('discord-main', [jid]);
const reviewerChannel = createChannel('discord-review', [jid]);
const arbiterChannel = createChannel('discord-arbiter', [jid]);
expect(
findChannelForDeliveryRole(
[ownerChannel, reviewerChannel, arbiterChannel],
jid,
'arbiter',
),
).toBe(arbiterChannel);
});
it('falls back to the first JID-owning channel when no role channel exists', () => {
const ownerChannel = createChannel('discord-main', [jid]);
expect(findChannelForDeliveryRole([ownerChannel], jid, 'reviewer')).toBe(
ownerChannel,
);
});
it('reports fallback metadata when a role-specific channel is unavailable', () => {
const ownerChannel = createChannel('discord-main', [jid]);
expect(
resolveChannelForDeliveryRole([ownerChannel], jid, 'reviewer'),
).toEqual(
expect.objectContaining({
channel: ownerChannel,
requestedRoleChannelName: 'discord-review',
selectedChannelName: 'discord-main',
usedRoleChannel: false,
fallbackUsed: true,
}),
);
});
it('reports direct role routing metadata when the role channel exists', () => {
const ownerChannel = createChannel('discord-main', [jid]);
const reviewerChannel = createChannel('discord-review', [jid]);
expect(
resolveChannelForDeliveryRole(
[ownerChannel, reviewerChannel],
jid,
'reviewer',
),
).toEqual(
expect.objectContaining({
channel: reviewerChannel,
requestedRoleChannelName: 'discord-review',
selectedChannelName: 'discord-review',
usedRoleChannel: true,
fallbackUsed: false,
}),
);
});
});