test: Die Tuer der Schnittstelle scharf pruefen

Zehn Faelle, davon sieben, die scheitern muessen: ohne Token, mit
erfundenem Token, mit zu wenig Rechten in beide Richtungen, abgelaufen,
zurueckgezogen, ohne Titel — und einer, der belegt, dass Status und
Bereich aus der Anfrage nicht uebernommen werden.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Florian Wilde
2026-09-12 11:22:48 +02:00
co-authored by Claude Opus 5
parent 9565b9a920
commit 10b49cf8df
2 changed files with 229 additions and 0 deletions
+42
View File
@@ -67,6 +67,7 @@ async function aufraeumen(): Promise<void> {
})
await db.telegramChat.deleteMany({ where: { chatId: testChatId } })
await db.integrationszustand.deleteMany({ where: { quelle: 'TELEGRAM' } })
await db.apiToken.deleteMany({ where: { name: { startsWith: kennung } } })
}
async function main(): Promise<void> {
@@ -395,6 +396,43 @@ async function main(): Promise<void> {
}),
)
// --- API-Tokens ----------------------------------------------------------
const token = await db.apiToken.create({
data: {
benutzerId: benutzer.id,
name: `${kennung}-token`,
praefix: kennung.slice(-8),
hash: `hash-${kennung}`,
rechte: 'lesen',
},
})
pruefe('API-Token anlegen', token.id.length > 0)
pruefe('Ein frischer Token gilt unbegrenzt', token.gueltigBis === null)
pruefe('Ein frischer Token ist nicht widerrufen', token.widerrufenAm === null)
await scheitert('Dasselbe Praefix nur einmal', () =>
db.apiToken.create({
data: {
benutzerId: benutzer.id,
name: `${kennung}-zweiter`,
praefix: kennung.slice(-8),
hash: `anderer-hash-${kennung}`,
rechte: 'lesen',
},
}),
)
await scheitert('Denselben Hash nur einmal', () =>
db.apiToken.create({
data: {
benutzerId: benutzer.id,
name: `${kennung}-dritter`,
praefix: 'anders12',
hash: `hash-${kennung}`,
rechte: 'lesen',
},
}),
)
await db.benutzer.delete({ where: { id: benutzer.id } })
const nachher = await db.auditEintrag.findUnique({ where: { id: audit.id } })
@@ -420,6 +458,10 @@ async function main(): Promise<void> {
'Push-Geräte verschwinden mit dem Benutzer',
(await db.pushGeraet.count({ where: { endpunkt: { contains: kennung } } })) === 0,
)
pruefe(
'API-Tokens verschwinden mit dem Benutzer',
(await db.apiToken.count({ where: { name: { startsWith: kennung } } })) === 0,
)
pruefe(
'Telegram-Chats verschwinden nicht, verlieren aber den Benutzer',
(await db.telegramChat.count({ where: { benutzerId: benutzer.id } })) === 0,