53 lines
1.8 KiB
JavaScript
53 lines
1.8 KiB
JavaScript
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)
|
|
})
|