78 lines
2.1 KiB
TypeScript
78 lines
2.1 KiB
TypeScript
import { beforeEach, describe, expect, it } from 'vitest';
|
|
|
|
import { _initTestDatabase, setRegisteredGroup } from './db.js';
|
|
import {
|
|
activateCodexFailover,
|
|
getActiveCodexFailoverLeases,
|
|
getEffectiveChannelLease,
|
|
refreshChannelOwnerCache,
|
|
restoreDefaultChannelLease,
|
|
} from './service-routing.js';
|
|
|
|
beforeEach(() => {
|
|
_initTestDatabase();
|
|
refreshChannelOwnerCache(true);
|
|
});
|
|
|
|
describe('service-routing failover leases', () => {
|
|
it('uses codex-review as owner and codex-main as reviewer during failover', () => {
|
|
setRegisteredGroup('dc:paired', {
|
|
name: 'Paired Room Claude',
|
|
folder: 'paired-claude',
|
|
trigger: '@Andy',
|
|
added_at: '2024-01-01T00:00:00.000Z',
|
|
agentType: 'claude-code',
|
|
});
|
|
setRegisteredGroup('dc:paired', {
|
|
name: 'Paired Room Codex',
|
|
folder: 'paired-codex',
|
|
trigger: '@Codex',
|
|
added_at: '2024-01-01T00:00:00.000Z',
|
|
agentType: 'codex',
|
|
});
|
|
|
|
activateCodexFailover('dc:paired', 'claude-429');
|
|
|
|
expect(getEffectiveChannelLease('dc:paired')).toMatchObject({
|
|
chat_jid: 'dc:paired',
|
|
owner_service_id: 'codex-review',
|
|
reviewer_service_id: 'codex-main',
|
|
reason: 'claude-429',
|
|
explicit: true,
|
|
});
|
|
expect(getActiveCodexFailoverLeases()).toEqual([
|
|
{
|
|
chatJid: 'dc:paired',
|
|
activatedAt: expect.any(String),
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('restores the default lease after failover is cleared', () => {
|
|
setRegisteredGroup('dc:paired', {
|
|
name: 'Paired Room Claude',
|
|
folder: 'paired-claude',
|
|
trigger: '@Andy',
|
|
added_at: '2024-01-01T00:00:00.000Z',
|
|
agentType: 'claude-code',
|
|
});
|
|
setRegisteredGroup('dc:paired', {
|
|
name: 'Paired Room Codex',
|
|
folder: 'paired-codex',
|
|
trigger: '@Codex',
|
|
added_at: '2024-01-01T00:00:00.000Z',
|
|
agentType: 'codex',
|
|
});
|
|
|
|
activateCodexFailover('dc:paired', 'claude-429');
|
|
restoreDefaultChannelLease('dc:paired');
|
|
|
|
expect(getEffectiveChannelLease('dc:paired')).toMatchObject({
|
|
chat_jid: 'dc:paired',
|
|
owner_service_id: 'codex-main',
|
|
reviewer_service_id: 'claude',
|
|
explicit: false,
|
|
});
|
|
});
|
|
});
|