test(router): tighten routing and telemetry assertions
This commit is contained in:
parent
3cc35e2b51
commit
b7c8e4fbef
@ -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');
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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',
|
||||||
|
})
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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', () => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user