mirror of
https://github.com/jkingsman/Remote-Terminal-for-MeshCore.git
synced 2026-03-28 17:43:05 +01:00
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import type { Locator, Page } from '@playwright/test';
|
|
import http from 'http';
|
|
|
|
export function createCaptureServer(urlFactory: (port: number) => string) {
|
|
const requests: { body: string; headers: http.IncomingHttpHeaders }[] = [];
|
|
const server = http.createServer((req, res) => {
|
|
let body = '';
|
|
req.on('data', (chunk) => (body += chunk));
|
|
req.on('end', () => {
|
|
requests.push({ body, headers: req.headers });
|
|
res.writeHead(200);
|
|
res.end('ok');
|
|
});
|
|
});
|
|
|
|
return {
|
|
requests,
|
|
server,
|
|
async listen(): Promise<string> {
|
|
return await new Promise((resolve) => {
|
|
server.listen(0, '127.0.0.1', () => {
|
|
const addr = server.address();
|
|
if (typeof addr === 'object' && addr) {
|
|
resolve(urlFactory(addr.port));
|
|
}
|
|
});
|
|
});
|
|
},
|
|
close(): void {
|
|
server.close();
|
|
},
|
|
};
|
|
}
|
|
|
|
export async function openFanoutSettings(page: Page): Promise<void> {
|
|
await page.goto('/');
|
|
await page.getByText('Settings').click();
|
|
await page.getByRole('button', { name: /MQTT.*Automation/ }).click();
|
|
}
|
|
|
|
export function fanoutHeader(page: Page, name: string): Locator {
|
|
const nameButton = page.getByRole('button', { name, exact: true });
|
|
return page
|
|
.locator('div')
|
|
.filter({ has: nameButton })
|
|
.filter({ has: page.getByRole('button', { name: 'Edit' }) })
|
|
.last();
|
|
}
|