const { test } = require('node:test') const assert = require('node:assert/strict') const fs = require('node:fs') const vm = require('node:vm') const vue = require('vue') const ts = require('../../backend/node_modules/typescript') const deferred = () => { let resolve const promise = new Promise(done => { resolve = done }) return { promise, resolve } } const settle = () => new Promise(setImmediate) function setup(api, apiBase = 'https://fedeo.example/backend') { const auth = vue.reactive({ activeTenant: '1', user: { is_admin: true } }) const timers = new Map() let timerId = 0 let mount let unmount let countRefreshes = 0 const context = vm.createContext({ require, exports: {}, URL, AbortController, ref: vue.ref, computed: vue.computed, watch: vue.watch, useAuthStore: () => auth, useDocumentInboxCount: () => ({ refresh: async () => { countRefreshes++ } }), useRuntimeConfig: () => ({ public: { apiBase } }), useFiles: () => ({}), useToast: () => ({ add() {} }), useNuxtApp: () => ({ $api: (url, options) => /\/assignments$/.test(url) ? Promise.resolve([]) : api(url, options) }), window: { location: { origin: 'https://fedeo.example' } }, onMounted: handler => { mount = handler }, onBeforeUnmount: handler => { unmount = handler }, setTimeout: handler => { timers.set(++timerId, handler); return timerId }, clearTimeout: id => timers.delete(id), }) const source = fs.readFileSync(`${__dirname}/../pages/organisation/dokumentenablage.vue`, 'utf8').match(/