- Projekte-Seite holt neue/archivierte Repos selbst ab (vorher bis zu 10 Minuten unsichtbar) - Import-Drossel: nach einem Fehler sofort neuer Versuch - Zuordnen-Assistent nennt den Status einer vorhandenen Preview - Ticket "Neues Projekt": ungueltige Subdomain wird abgewiesen Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
35 lines
1.2 KiB
JavaScript
35 lines
1.2 KiB
JavaScript
import test from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import { loadModule } from './load.mjs'
|
|
|
|
const { throttleRuns } = await loadModule('src/lib/throttleRuns.js')
|
|
|
|
test('Repo-Import hoechstens einmal pro Minute, laufender Abgleich wird geteilt', async () => {
|
|
let runs = 0
|
|
let release
|
|
const throttled = throttleRuns(() => { runs += 1; return new Promise((r) => { release = r }) }, 60000)
|
|
const a = throttled()
|
|
const b = throttled()
|
|
assert.equal(a, b)
|
|
await new Promise((r) => setTimeout(r, 0))
|
|
release({ created: 0 })
|
|
await a
|
|
assert.equal(runs, 1)
|
|
assert.equal(await throttled(), null)
|
|
assert.equal(runs, 1)
|
|
const later = throttled({ now: Date.now() + 61000 })
|
|
await new Promise((r) => setTimeout(r, 0))
|
|
release({ created: 1 })
|
|
assert.deepEqual(await later, { created: 1 })
|
|
assert.equal(runs, 2)
|
|
})
|
|
|
|
test('Fehler wird weitergereicht, danach darf sofort neu versucht werden', async () => {
|
|
let runs = 0
|
|
const throttled = throttleRuns(async () => { runs += 1; if (runs === 1) throw new Error('weg'); return { ok: true } }, 60000)
|
|
await assert.rejects(throttled(), /weg/)
|
|
assert.deepEqual(await throttled(), { ok: true })
|
|
assert.equal(runs, 2)
|
|
assert.equal(await throttled(), null)
|
|
})
|