forked from baron/baron-sso
fix(userfront): reduce service worker install cache
This commit is contained in:
@@ -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',
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user