summaryrefslogtreecommitdiff
path: root/crates/chat-server/tests/progress.ts
diff options
context:
space:
mode:
Diffstat (limited to 'crates/chat-server/tests/progress.ts')
-rw-r--r--crates/chat-server/tests/progress.ts28
1 files changed, 14 insertions, 14 deletions
diff --git a/crates/chat-server/tests/progress.ts b/crates/chat-server/tests/progress.ts
index 59c939d..610488c 100644
--- a/crates/chat-server/tests/progress.ts
+++ b/crates/chat-server/tests/progress.ts
@@ -14,12 +14,12 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>.
import assert from 'node:assert/strict';
-import { createServer, type ServerResponse } from 'node:http';
+import type { ServerResponse } from 'node:http';
import { readFile, writeFile, mkdir, mkdtemp, rm } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join, resolve } from 'node:path';
import { chromium, firefox, type BrowserContext, type Page } from 'playwright';
-import { libreJSAddon, required, serverOrigin } from '../../../tests/browser-support.js';
+import { asyncServer, libreJSAddon, required, serverOrigin } from '../../../tests/browser-support.js';
const libre = process.env['CHAT_LIBREJS'] === '1';
const profile = await mkdtemp(join(tmpdir(),'stack-chat-progress-'));
@@ -31,7 +31,7 @@ let configReady: Promise<void> | undefined;
let signalConfig: (() => void) | undefined;
let origin = '';
const errors: string[] = [];
-const server = createServer(async (request,response) => {
+const server = asyncServer(async (request,response) => {
response.setHeader('Cache-Control','no-store');
if (request.url === '/crypto.wasm') {
if (mode === 'failure') { response.writeHead(503); response.end(); return; }
@@ -43,9 +43,9 @@ const server = createServer(async (request,response) => {
}
if (request.url === '/api') { configuration = response; required(signalConfig, 'Missing configuration signal')(); return; }
const assets: Record<string, string> = { '/':'crates/chat-server/web/index.html','/app.js':'var/build/typescript/crates/chat-server/web/app.js','/style.css':'crates/chat-server/web/style.css' };
- const path = assets[request.url || ''];
- if (!path) { response.writeHead(404); response.end(); return; }
- const mime = request.url === '/' ? 'text/html' : request.url?.endsWith('.js') ? 'text/javascript' : 'text/css';
+ const path = assets[(request.url ?? '')];
+ if (path === undefined || path.length === 0) { response.writeHead(404); response.end(); return; }
+ const mime = request.url === '/' ? 'text/html' : (request.url?.endsWith('.js') === true) ? 'text/javascript' : 'text/css';
response.setHeader('Content-Type',mime);
let source = await readFile(resolve(path),'utf8');
if (request.url === '/') source = source.replaceAll('{{SITE_ORIGIN}}',origin);
@@ -60,12 +60,12 @@ if (libre) {
const addon = await readFile(resolve('.tools/librejs.xpi'));
await writeFile(join(profile,'extensions','jid1-KtlZuoiikVfFew@jetpack.xpi'),addon);
context = await firefox.launchPersistentContext(profile,{headless:true,firefoxUserPrefs:{'extensions.autoDisableScopes':0,'extensions.enabledScopes':15,'extensions.startupScanScopes':15,'extensions.update.enabled':false}});
- browser = {close:() => context.close()};
+ browser = {close:(): Promise<void> => context.close()};
} else {
browser = await chromium.launch({headless:true,channel:'chromium'});
context = await browser.newContext();
}
-async function open(selected: 'known' | 'unknown' | 'failure') {
+async function open(selected: 'known' | 'unknown' | 'failure'): Promise<Page> {
mode = selected;
configuration = undefined;
configReady = new Promise(done => { signalConfig = done; });
@@ -75,11 +75,11 @@ async function open(selected: 'known' | 'unknown' | 'failure') {
await page.goto(origin);
return page;
}
-async function waitStatus(page: Page, part: string) {
- await page.waitForFunction(value => document.getElementById('status')?.textContent?.includes(value),part);
- return await page.locator('#status').textContent() || '';
+async function waitStatus(page: Page, part: string): Promise<string> {
+ await page.waitForFunction(value => document.getElementById('status')?.textContent.includes(value),part);
+ return (await page.locator('#status').textContent() ?? '');
}
-async function complete(page: Page, offset: number) {
+async function complete(page: Page, offset: number): Promise<void> {
required(transfer, 'Missing transfer').end(bytes.subarray(offset));
await waitStatus(page,'Connecting to chat');
await configReady;
@@ -98,7 +98,7 @@ try {
assert.match(await waitStatus(known,'2.0 /'),/39%/);
await known.screenshot({path:resolve('.tools/chat-download-progress.png'),fullPage:true});
await known.clock.fastForward(44000);
- assert.ok(!(await known.locator('#status').textContent() || '').includes('stalled'));
+ assert.ok(!((await known.locator('#status').textContent() ?? '')).includes('stalled'));
await complete(known,2097152);
const unknown = await open('unknown');
assert.equal(await waitStatus(unknown,'1.0 MiB received'),'Downloading cryptographic module... 1.0 MiB received');
@@ -111,7 +111,7 @@ try {
await waitStatus(stalled,'1.0 /');
await stalled.clock.fastForward(45001);
await waitStatus(stalled,'stalled for 45 seconds');
- assert.match(await stalled.locator('#status').textContent() || '',/reload/);
+ assert.match((await stalled.locator('#status').textContent() ?? ''),/reload/);
assert.equal(await stalled.locator('#owner-choice').isVisible(),false);
await stalled.close();
assert.deepEqual(errors,[]);