test(router): tighten routing and telemetry assertions

This commit is contained in:
root 2026-03-14 14:53:43 +00:00
parent 3cc35e2b51
commit b7c8e4fbef
3 changed files with 30 additions and 13 deletions

View File

@ -2,7 +2,7 @@
* Tests for GET /api/health (tracker dashboard) * Tests for GET /api/health (tracker dashboard)
*/ */
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; import { describe, it, expect, afterEach } from 'vitest';
import { GET } from '@/app/api/health/route'; import { GET } from '@/app/api/health/route';
@ -23,8 +23,14 @@ describe('GET /api/health', () => {
const data = await res.json(); const data = await res.json();
expect(data.status).toBe('ok'); expect(data.status).toBe('ok');
expect(data.service).toBe('tracker-dashboard'); expect(data.service).toBe('tracker-dashboard');
expect(data.timestamp).toBeDefined(); expect(data.timestamp).toMatch(/^\d{4}-\d{2}-\d{2}T/);
expect(data.checks).toBeInstanceOf(Array); expect(data.checks).toEqual([
{
name: 'env',
status: 'pass',
message: '3 required vars set',
},
]);
}); });
it('returns degraded when env vars are missing', async () => { it('returns degraded when env vars are missing', async () => {
@ -36,6 +42,7 @@ describe('GET /api/health', () => {
expect(res.status).toBe(503); expect(res.status).toBe(503);
const data = await res.json(); const data = await res.json();
expect(data.status).toBe('degraded'); expect(data.status).toBe('degraded');
expect(data.service).toBe('tracker-dashboard');
expect(data.checks[0].status).toBe('fail'); expect(data.checks[0].status).toBe('fail');
expect(data.checks[0].message).toContain('Missing'); expect(data.checks[0].message).toContain('Missing');
}); });

View File

@ -69,10 +69,10 @@ describe('trackEvent', () => {
expect(event.eventType).toBe('info'); expect(event.eventType).toBe('info');
expect(event.module).toBe('tracker'); expect(event.module).toBe('tracker');
expect(event.eventName).toBe('item_created'); expect(event.eventName).toBe('item_created');
expect(event.id).toBeDefined(); expect(event.id).toBe('550e8400-e29b-41d4-a716-446655440000');
expect(event.sessionId).toBeDefined(); expect(typeof event.sessionId).toBe('string');
expect(event.anonymousInstallId).toBeDefined(); expect(event.anonymousInstallId).toBe('550e8400-e29b-41d4-a716-446655440000');
expect(event.occurredAt).toBeDefined(); expect(event.occurredAt).toMatch(/^\d{4}-\d{2}-\d{2}T/);
}); });
it('includes optional fields when provided', () => { it('includes optional fields when provided', () => {
@ -171,7 +171,12 @@ describe('initTelemetry', () => {
const sessionEvent = payload.events.find( const sessionEvent = payload.events.find(
(e: Record<string, string>) => e.eventName === 'session_started' (e: Record<string, string>) => e.eventName === 'session_started'
); );
expect(sessionEvent).toBeDefined(); expect(sessionEvent).toEqual(
expect(sessionEvent.module).toBe('app_lifecycle'); expect.objectContaining({
module: 'app_lifecycle',
eventType: 'info',
eventName: 'session_started',
})
);
}); });
}); });

View File

@ -92,8 +92,8 @@ describe('LlmRouter', () => {
expect(result.response.choices[0]!.message.content).toBe('Hello!'); expect(result.response.choices[0]!.message.content).toBe('Hello!');
expect(result.attempts).toBe(1); expect(result.attempts).toBe(1);
expect(result.provider).toBeDefined(); expect(result.provider).toBe('test-fast');
expect(result.model).toBeDefined(); expect(result.model).toBe('fast-model');
}); });
it('retries on 429 with fallback provider', async () => { it('retries on 429 with fallback provider', async () => {
@ -233,8 +233,13 @@ describe('LlmRouter', () => {
await router.chat({ messages: [{ role: 'user', content: 'Hello' }] }); await router.chat({ messages: [{ role: 'user', content: 'Hello' }] });
const health = router.getHealth(); const health = router.getHealth();
expect(health.length).toBeGreaterThan(0); expect(health).toContainEqual(
expect(health[0]!.successes).toBe(1); expect.objectContaining({
provider: 'test-fast',
model: 'fast-model',
successes: 1,
})
);
}); });
it('lists available providers', () => { it('lists available providers', () => {