import { test } from 'node:test'; import assert from 'node:assert/strict'; import { getCallInBrowserUrl, resolveWebAppUrl } from './callInBrowser'; test('resolveWebAppUrl keeps an https origin (+ path) without a trailing slash', () => { assert.equal(resolveWebAppUrl('https://chat.example.org'), 'https://chat.example.org'); assert.equal(resolveWebAppUrl('https://chat.example.org/'), 'https://chat.example.org'); assert.equal(resolveWebAppUrl('https://example.org/chat/'), 'https://example.org/chat'); assert.equal(resolveWebAppUrl('https://chat.example.org/?x=1#y'), 'https://chat.example.org'); }); test('resolveWebAppUrl rejects anything but absolute https', () => { [ undefined, null, 1, '', ' ', '/home', 'http://chat.example.org', 'not a url', ['javascript', 'alert(1)'].join(':'), 'data:text/html,x', ].forEach((v) => assert.equal(resolveWebAppUrl(v), undefined, String(v))); }); test('getCallInBrowserUrl points at the room in the web app (no auto-join)', () => { const url = getCallInBrowserUrl('https://chat.example.org', '!room:example.org'); assert.equal(url, 'https://chat.example.org/home/!room%3Aexample.org'); assert.ok(!/join|call=/i.test(url ?? '')); assert.equal(getCallInBrowserUrl(undefined, '!room:example.org'), undefined); });