Files
playkit/selftest/tests/api.spec.ts
T
ilia afaa987218
CI / release (pull_request) Has been skipped
CI / skip-ci-check (pull_request) Successful in 4s
CI / secret-scan (pull_request) Successful in 4s
CI / build-and-test (pull_request) Successful in 16s
CI / selftest (pull_request) Failing after 39s
Add kit selftest CI, Outline sync script, and close ops soak gaps
Fake-site Playwright suite catches BasePage/ApiClient/network regressions
before consumers pin a broken tag; Outline sync + docs for QA & Dev live page;
Pushgateway deploy soak confirmed separately on observability LXC.
2026-07-14 22:56:07 -04:00

44 lines
1.4 KiB
TypeScript

import { test, expect } from '@playwright/test';
import { z } from 'zod';
import { ApiClient, TimingCollector, assertSchema } from '../../src/index.js';
const baseUrl = process.env.PLAYKIT_BASE_URL || 'http://127.0.0.1:4173';
const HealthSchema = z.object({
status: z.literal('ok'),
service: z.string(),
});
const ItemsSchema = z.object({
items: z.array(z.object({ id: z.number(), name: z.string() })),
});
test.describe('playkit selftest — ApiClient', () => {
test('GET /api/health with Zod schema', async () => {
const timings = new TimingCollector();
const api = new ApiClient({ baseUrl });
const res = await timings.measure('api_health', () =>
api.get<{ status: string; service: string }>('/api/health', {
expectedStatus: 200,
schema: HealthSchema,
}),
);
expect(res.status).toBe(200);
expect(res.data.status).toBe('ok');
// signature: assertSchema(data, schema)
expect(assertSchema(res.data, HealthSchema).service).toBe('playkit-selftest');
});
test('GET /api/items + expectedStatus on boom', async () => {
const api = new ApiClient({ baseUrl });
const items = await api.get('/api/items', { schema: ItemsSchema });
expect(items.data.items[0]?.name).toBe('alpha');
expect(items.data.items).toHaveLength(2);
const boom = await api.get('/api/boom', { expectedStatus: 500 });
expect(boom.status).toBe(500);
});
});