Files
playkit/selftest/tests/browser.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

60 lines
2.0 KiB
TypeScript

import { test, expect } from '@playwright/test';
import {
BasePage,
assertPublicHost,
waitForUrlHost,
TimingCollector,
interceptNetworkCall,
startNetworkErrorMonitor,
} from '../../src/index.js';
const baseUrl = process.env.PLAYKIT_BASE_URL || 'http://127.0.0.1:4173';
test.describe('playkit selftest — browser helpers', () => {
test('BasePage click/fill + public-host relax for localhost', async ({ page }) => {
// Intentional LAN/selftest: forbidPrivateHosts must be off
assertPublicHost(baseUrl, false);
expect(() => assertPublicHost(baseUrl, true)).toThrow(/private host/i);
const timings = new TimingCollector();
const home = new BasePage(page, baseUrl);
await timings.measure('open_home', () => home.open('/'));
await waitForUrlHost(page, '127.0.0.1');
await expect(page.getByRole('heading', { name: 'Playkit selftest home' })).toBeVisible();
await timings.measure('open_form', () => home.open('/form'));
await home.fill(page.locator('#name'), 'Kolby');
await home.click(page.locator('#submit'));
await expect(page.getByText('Hello, Kolby')).toBeVisible();
expect(timings.getSamples().length).toBeGreaterThanOrEqual(2);
});
test('network intercept + error monitor', async ({ page }) => {
const home = new BasePage(page, baseUrl);
await home.open('/');
const items = interceptNetworkCall({
page,
method: 'GET',
url: '**/api/items',
});
await page.getByRole('button', { name: 'Load items' }).click();
const { status, responseJson } = await items;
expect(status).toBe(200);
expect(responseJson).toMatchObject({ items: expect.any(Array) });
await expect(page.getByText('alpha')).toBeVisible();
const net = startNetworkErrorMonitor(page, {
excludePatterns: [/\/api\/health/],
});
try {
await page.goto(`${baseUrl}/api/boom`);
// stay on JSON page — monitor should have recorded 500
} finally {
expect(() => net.assertNoErrors()).toThrow(/network errors/i);
}
});
});