import { describe, expect, it } from 'vitest' import { composeMessage } from '../src/notify.js' /** * Der Worker baut den Satz aus dem, was die Web-App freigegeben hat. Hier wird * geprüft, dass er nichts hinzuerfindet — vor allem keinen Titel, wo keiner * mitgeschickt wurde. */ describe('Text der Benachrichtigung', () => { const url = 'https://afis.example.de/' it('nennt Aktenzeichen und Link, den Titel nur wenn er mitkam', () => { const ohne = composeMessage( 'entry.new', { caseNumber: 'AfiS-2026-0042', actorName: 'Insp. Vogel', title: null }, url, ) expect(ohne).toBe( 'Neuer Eintrag in **AfiS-2026-0042** · Insp. Vogel · https://afis.example.de/faelle/AfiS-2026-0042', ) expect(ohne).not.toContain('undefined') const mit = composeMessage( 'entry.new', { caseNumber: 'AfiS-2026-0042', actorName: 'Insp. Vogel', title: 'Korruptionsverdacht' }, url, ) expect(mit).toContain('Korruptionsverdacht') }) it('meldet eine Erwähnung in einer Personalakte ohne den Namen der Person', () => { const text = composeMessage( 'chat.mention', { personnelFileId: '0192abc', actorName: 'Vogel' }, url, ) // Dass es zu jemandem eine Personalakte gibt, ist selbst eine Auskunft. // Deshalb steht in der Meldung nur der Link, kein Name. expect(text).toBe( 'Vogel hat dich im Chat einer Personalakte erwähnt · https://afis.example.de/personalakten/0192abc', ) }) it('schweigt, wenn nichts Verwertbares mitkam', () => { // Lieber gar nichts als ein Satz mit Lücken. expect(composeMessage('entry.new', {}, url)).toBeNull() expect(composeMessage('unbekannt', { caseNumber: 'AfiS-2026-0001' }, url)).toBeNull() }) })