import test from 'node:test' import assert from 'node:assert/strict' import { loadModule } from './load.mjs' // Neuer Tab fuer Einmal-Links (Kundenansicht, Preview): der Tab muss im Klick synchron aufgehen, sonst blockiert // der Browser das Pop-up; die Adresse kommt erst nach der Anfrage ans Portal. const { openInNewTab } = await loadModule('src/lib/openInNewTab.js') function fakeWindow() { const order = [] const tab = { location: {}, opener: 'ticketsystem', close: () => order.push('close') } const win = { open: (...args) => { order.push('open') win.openArgs = args return tab }, } return { win, tab, order } } test('open laeuft vor getUrl, danach wird die Adresse gesetzt', async () => { const { win, tab, order } = fakeWindow() await openInNewTab(async () => { order.push('getUrl') return 'https://project.webklar.com/api/auth/kundenansicht?token=abc' }, { win }) assert.deepEqual(order, ['open', 'getUrl']) assert.deepEqual(win.openArgs, ['', '_blank']) assert.equal(tab.location.href, 'https://project.webklar.com/api/auth/kundenansicht?token=abc') assert.equal(tab.opener, null) }) test('Fehler beim Holen -> Tab wird geschlossen, Fehler weitergereicht', async () => { const { win, tab, order } = fakeWindow() await assert.rejects( () => openInNewTab(async () => { throw new Error('Kein Portal-Zugang') }, { win }), /Kein Portal-Zugang/ ) assert.deepEqual(order, ['open', 'close']) assert.equal(tab.location.href, undefined) }) test('Pop-up blockiert -> Fehlermeldung, getUrl nicht aufgerufen', async () => { let called = false const win = { open: () => null } await assert.rejects( () => openInNewTab(async () => { called = true; return 'x' }, { win }), { message: 'Neuer Tab wurde vom Browser blockiert.' } ) assert.equal(called, false) })