Some checks failed
Deploy Web Apps / deploy (push) Has been cancelled
Queue Release Build / prepare (push) Successful in 21s
Queue Release Build / build-linux (push) Successful in 27m44s
Queue Release Build / build-windows (push) Successful in 32m16s
Queue Release Build / finalize (push) Successful in 1m54s
78 lines
2.4 KiB
TypeScript
78 lines
2.4 KiB
TypeScript
import { type BrowserContext, type Page } from '@playwright/test';
|
|
|
|
const SERVER_ENDPOINTS_STORAGE_KEY = 'metoyou_server_endpoints';
|
|
const REMOVED_DEFAULT_KEYS_STORAGE_KEY = 'metoyou_removed_default_server_keys';
|
|
|
|
type SeededEndpointStorageState = {
|
|
key: string;
|
|
removedKey: string;
|
|
endpoints: {
|
|
id: string;
|
|
name: string;
|
|
url: string;
|
|
isActive: boolean;
|
|
isDefault: boolean;
|
|
status: string;
|
|
}[];
|
|
};
|
|
|
|
function buildSeededEndpointStorageState(
|
|
port: number = Number(process.env.TEST_SERVER_PORT) || 3099
|
|
): SeededEndpointStorageState {
|
|
const endpoint = {
|
|
id: 'e2e-test-server',
|
|
name: 'E2E Test Server',
|
|
url: `http://localhost:${port}`,
|
|
isActive: true,
|
|
isDefault: false,
|
|
status: 'unknown'
|
|
};
|
|
|
|
return {
|
|
key: SERVER_ENDPOINTS_STORAGE_KEY,
|
|
removedKey: REMOVED_DEFAULT_KEYS_STORAGE_KEY,
|
|
endpoints: [endpoint]
|
|
};
|
|
}
|
|
|
|
function applySeededEndpointStorageState(storageState: SeededEndpointStorageState): void {
|
|
try {
|
|
const storage = window.localStorage;
|
|
|
|
storage.setItem(storageState.key, JSON.stringify(storageState.endpoints));
|
|
storage.setItem(storageState.removedKey, JSON.stringify(['default', 'toju-primary', 'toju-sweden']));
|
|
} catch {
|
|
// about:blank and some Playwright UI pages deny localStorage access.
|
|
}
|
|
}
|
|
|
|
export async function installTestServerEndpoint(
|
|
context: BrowserContext,
|
|
port: number = Number(process.env.TEST_SERVER_PORT) || 3099
|
|
): Promise<void> {
|
|
const storageState = buildSeededEndpointStorageState(port);
|
|
|
|
await context.addInitScript(applySeededEndpointStorageState, storageState);
|
|
}
|
|
|
|
/**
|
|
* Seed localStorage with a single signal endpoint pointing at the test server.
|
|
* Must be called AFTER navigating to the app origin (localStorage is per-origin)
|
|
* but BEFORE the app reads from storage (i.e. before the Angular bootstrap is
|
|
* relied upon — calling it in the first goto() landing page is fine since the
|
|
* page will re-read on next navigation/reload).
|
|
*
|
|
* Typical usage:
|
|
* await page.goto('/');
|
|
* await seedTestServerEndpoint(page);
|
|
* await page.reload(); // App now picks up the test endpoint
|
|
*/
|
|
export async function seedTestServerEndpoint(
|
|
page: Page,
|
|
port: number = Number(process.env.TEST_SERVER_PORT) || 3099
|
|
): Promise<void> {
|
|
const storageState = buildSeededEndpointStorageState(port);
|
|
|
|
await page.evaluate(applySeededEndpointStorageState, storageState);
|
|
}
|