diff --git a/packages/db/tests/regeln.test.ts b/packages/db/tests/regeln.test.ts index 9dc8ccc..94ae9aa 100644 --- a/packages/db/tests/regeln.test.ts +++ b/packages/db/tests/regeln.test.ts @@ -28,7 +28,7 @@ suite('Datenbankregeln', () => { }) const fall = await db.case.create({ data: { - caseNumber: `AfiS-9999-${String(Date.now()).slice(-4)}`, + caseNumber: `AfiS-9999-${Date.now().toString(36)}`, title: 'Prüffall', templateId: template.id, templateKey: template.key, @@ -131,27 +131,52 @@ suite('Datenbankregeln', () => { ).rejects.toThrow() }) - it('lässt eine Chatnachricht nicht zugleich an Akte und Kanal hängen', async () => { - const kanal = await db.channel.create({ - data: { key: `${marke}-kanal`, name: 'Prüfkanal', createdById: `${marke}-nutzer` }, + it('lässt eine Chatnachricht nur an genau einem Ort hängen', async () => { + const person = await db.personnelFile.create({ + data: { displayName: `${marke}-person`, classification: 1 }, }) + + // Zwei Orte: geht nicht. await expect( db.chatMessage.create({ data: { - id: `${marke}-nachricht`, + id: `${marke}-nachricht-zwei`, caseId, - channelId: kanal.id, + personnelFileId: person.id, + authorId: `${marke}-nutzer`, + body: 'gehört an zwei Stellen', + }, + }), + ).rejects.toThrow() + + // Gar kein Ort: geht auch nicht. Eine Nachricht ohne Akte wäre ein + // Gespräch ohne Vorgang, und genau das soll es nicht mehr geben. + await expect( + db.chatMessage.create({ + data: { + id: `${marke}-nachricht-null`, authorId: `${marke}-nutzer`, body: 'gehört nirgends hin', }, }), ).rejects.toThrow() + + // Einer: geht. + const gut = await db.chatMessage.create({ + data: { + id: `${marke}-nachricht-eins`, + personnelFileId: person.id, + authorId: `${marke}-nutzer`, + body: 'gehört zur Personalakte', + }, + }) + expect(gut.personnelFileId).toBe(person.id) }) it('lässt ein Dokument nicht löschen', async () => { const doc = await db.document.create({ data: { - documentNumber: `PRF-9999-${String(Date.now()).slice(-6)}`, + documentNumber: `PRF-9999-${Date.now().toString(36)}`, title: 'Prüfdokument', templateId: (await db.documentTemplate.findFirstOrThrow({ where: { key: `${marke}-vorlage` }, @@ -177,7 +202,7 @@ suite('Datenbankregeln', () => { await expect( db.document.create({ data: { - documentNumber: `PRF-9998-${String(Date.now()).slice(-6)}`, + documentNumber: `PRF-9998-${Date.now().toString(36)}`, title: 'Zwei Besitzer', templateId: (await db.documentTemplate.findFirstOrThrow({ where: { key: `${marke}-vorlage` }, @@ -195,7 +220,7 @@ suite('Datenbankregeln', () => { it('lässt den Besitzer eines Dokuments nicht nachträglich wechseln', async () => { const doc = await db.document.create({ data: { - documentNumber: `PRF-9997-${String(Date.now()).slice(-6)}`, + documentNumber: `PRF-9997-${Date.now().toString(36)}`, title: 'Unverrückbar', templateId: (await db.documentTemplate.findFirstOrThrow({ where: { key: `${marke}-vorlage` }, diff --git a/worker/tests/nachricht.test.ts b/worker/tests/nachricht.test.ts index 714d1fc..72d7515 100644 --- a/worker/tests/nachricht.test.ts +++ b/worker/tests/nachricht.test.ts @@ -28,10 +28,18 @@ describe('Text der Benachrichtigung', () => { expect(mit).toContain('Korruptionsverdacht') }) - it('kann eine Erwähnung in einem Kanal melden', () => { - expect( - composeMessage('chat.mention', { channelKey: 'leitung', actorName: 'Vogel' }, url), - ).toBe('Vogel hat dich in #leitung erwähnt · https://afis.example.de/kanaele/leitung') + 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', () => {