import assert from "node:assert/strict" import test from "node:test" import { prepareIncomingInvoices } from "../src/modules/cron/prepareIncomingInvoices" function server(tenantLookups: { count: number }) { let release: () => void = () => undefined const gate = new Promise((resolve) => { release = resolve }) const db: any = { select: () => ({ from: () => ({ where: () => ({ orderBy: async () => { tenantLookups.count += 1 await gate return [] }, }), }), }), } const log = { error: () => undefined, info: () => undefined, warn: () => undefined } return { server: { db, log } as any, release: () => release() } } test("start runs the preparation in the background and does not start a second run", async () => { const lookups = { count: 0 } const { server: srv, release } = server(lookups) const service = prepareIncomingInvoices(srv) const first = service.start(7) const second = service.start(7) assert.equal(first.running, true) assert.equal(second.startedAt, first.startedAt) assert.equal(service.status(8).running, false) release() await new Promise((resolve) => setImmediate(resolve)) await new Promise((resolve) => setImmediate(resolve)) const status = service.status(7) assert.equal(lookups.count, 1) assert.equal(status.running, false) assert.ok(status.finishedAt) assert.equal(status.result?.error, "Mandant nicht gefunden") })