mirror of
https://github.com/jcreek/LivingDexTracker.git
synced 2026-07-12 18:43:45 +00:00
40 lines
1.7 KiB
TypeScript
40 lines
1.7 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
// @ts-ignore
|
|
|
|
test('Test offline and trailing slashes', async ({ browser }) => {
|
|
// test offline + trailing slashes routes
|
|
const context = await browser.newContext();
|
|
const offlinePage = await context.newPage();
|
|
await offlinePage.goto('/');
|
|
const offlineSwURL = await offlinePage.evaluate(async () => {
|
|
const registration = await Promise.race([
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
// @ts-ignore
|
|
navigator.serviceWorker.ready,
|
|
new Promise((_, reject) =>
|
|
setTimeout(() => reject(new Error('Service worker registration failed: time out')), 10000)
|
|
)
|
|
]);
|
|
// @ts-expect-error registration is of type unknown
|
|
return registration.active?.scriptURL;
|
|
});
|
|
const offlineSwName = 'sw.js';
|
|
expect(offlineSwURL).toBe(`http://localhost:4173/${offlineSwName}`);
|
|
await context.setOffline(true);
|
|
const aboutAnchor = offlinePage.getByRole('link', { name: 'About' });
|
|
expect(await aboutAnchor.getAttribute('href')).toBe('/about');
|
|
await aboutAnchor.click({ noWaitAfter: false });
|
|
const url = await offlinePage.evaluate(async () => {
|
|
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
return location.href;
|
|
});
|
|
expect(url).toBe('http://localhost:4173/about');
|
|
expect(offlinePage.locator('li[aria-current="page"] a').getByText('About')).toBeTruthy();
|
|
await offlinePage.reload({ waitUntil: 'load' });
|
|
expect(offlinePage.url()).toBe('http://localhost:4173/about');
|
|
expect(offlinePage.locator('li[aria-current="page"] a').getByText('About')).toBeTruthy();
|
|
// Dispose context once it's no longer needed.
|
|
await context.close();
|
|
});
|