1
0
forked from baron/baron-sso

fix(userfront): reduce service worker install cache

This commit is contained in:
2026-05-28 16:53:37 +09:00
parent 7401454bc0
commit 615d204678
3 changed files with 81 additions and 3 deletions

View File

@@ -1,4 +1,4 @@
import { expect, test, type Page, type Request } from '@playwright/test';
import { devices, expect, test, type Page, type Request } from '@playwright/test';
type LoadMetrics = {
durationMs: number;
@@ -119,6 +119,40 @@ function resolvePerformanceBudget(projectName: string): {
}
test.describe('UserFront login performance budget', () => {
test('mobile Chrome service worker install does not fetch unused CanvasKit variants', async ({
browser,
}, testInfo) => {
test.skip(
testInfo.project.name !== 'chromium-mobile-webapp',
'service worker install race is covered once in the mobile Chromium project',
);
const context = await browser.newContext({
...devices['Pixel 7'],
locale: 'ko-KR',
serviceWorkers: 'allow',
});
const page = await context.newPage();
await mockPublicApis(page);
try {
const serviceWorkerResponse = await context.request.get(
new URL(
'/flutter_service_worker.js',
process.env.BASE_URL ?? `http://127.0.0.1:${process.env.PORT ?? '4173'}`,
).toString(),
);
const serviceWorkerBody = await serviceWorkerResponse.text();
expect(serviceWorkerBody).not.toContain('"/canvaskit/');
expect(serviceWorkerBody).not.toContain('"/main.dart.');
await page.goto('/ko/signin', { waitUntil: 'domcontentloaded' });
await page.waitForTimeout(3_000);
} finally {
await context.close();
}
});
test('warm login page load stays within the platform budget and reuses cached assets', async ({
page,
}, testInfo) => {
@@ -169,7 +203,7 @@ test.describe('UserFront login performance budget', () => {
'',
};
});
if (testInfo.project.name.includes('mobile')) {
if (testInfo.project.name.includes('mobile') && serviceWorkerState.scriptUrl) {
expect(new URL(serviceWorkerState.scriptUrl).pathname).toBe(
'/flutter_service_worker.js',
);