fix(quick-260909-laa): dritte Eindeutigkeitsverletzung uebersetzen statt sie zu behaupten
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { ConflictException } from '@nestjs/common';
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import { TenderTriageService } from './tender-triage.service';
|
||||
|
||||
@@ -207,4 +208,49 @@ describe('TenderTriageService', () => {
|
||||
expectBoundCall(prisma, 't1', 'findMany');
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Gegenrichtung der Bindung (Befund F, 260909-laa). Der Eindeutigkeits-
|
||||
* schluessel `@@unique([userId, tenderId])` traegt keine Mandanten-
|
||||
* dimension. Ist die vorhandene Zeile unter dem gebundenen Kontext
|
||||
* unsichtbar, findet das `upsert` sie nicht, versucht anzulegen und
|
||||
* laeuft in die Eindeutigkeitsverletzung — aus stillem Ueberschreiben
|
||||
* wird ein harter Fehler.
|
||||
*
|
||||
* Diese Pruefung fehlte in der ersten Lieferung von 260909-laa: die
|
||||
* Zusammenfassung behauptete die Uebersetzung fuer ALLE DREI
|
||||
* mandantenlosen Eindeutigkeitsschluessel, gebaut war sie nur fuer zwei.
|
||||
* Vom Verifizierer gefunden, hier nachgereicht.
|
||||
*/
|
||||
describe('P2002 auf mandantenlosem Eindeutigkeitsschluessel (Befund F)', () => {
|
||||
it('setTriage() uebersetzt die Eindeutigkeitsverletzung in eine ConflictException statt in einen 500', async () => {
|
||||
const prisma = makeFakePrisma();
|
||||
const verletzung: any = new Error(
|
||||
'Unique constraint failed on the fields: (`userId`,`tenderId`)',
|
||||
);
|
||||
verletzung.code = 'P2002';
|
||||
prisma.tenderTriage.upsert = vi.fn(async () => {
|
||||
throw verletzung;
|
||||
});
|
||||
const service = new TenderTriageService(prisma as any);
|
||||
|
||||
await expect(
|
||||
service.setTriage('u1', 't1', 'tender-x', { isFavorite: true }),
|
||||
).rejects.toBeInstanceOf(ConflictException);
|
||||
});
|
||||
|
||||
it('setTriage() reicht jeden anderen Datenbankfehler unveraendert durch', async () => {
|
||||
const prisma = makeFakePrisma();
|
||||
const anderer: any = new Error('Verbindung verloren');
|
||||
anderer.code = 'P1001';
|
||||
prisma.tenderTriage.upsert = vi.fn(async () => {
|
||||
throw anderer;
|
||||
});
|
||||
const service = new TenderTriageService(prisma as any);
|
||||
|
||||
await expect(
|
||||
service.setTriage('u1', 't1', 'tender-x', { isFavorite: true }),
|
||||
).rejects.toBe(anderer);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user