import { NotFoundException } from '@nestjs/common'; import { TreatmentsService } from './treatments.service'; import { PrismaService } from '../prisma/prisma.service'; import { AuditLogService } from '../audit/audit-log.service'; describe('TreatmentsService', () => { let service: TreatmentsService; let prisma: { treatment: { findMany: jest.Mock; findUnique: jest.Mock; create: jest.Mock; }; }; let auditLog: { record: jest.Mock }; const treatment = { id: 'treatment-1', colonyId: 'colony-1', date: new Date(), }; beforeEach(() => { prisma = { treatment: { findMany: jest.fn(), findUnique: jest.fn(), create: jest.fn(), }, }; auditLog = { record: jest.fn() }; service = new TreatmentsService( prisma as unknown as PrismaService, auditLog as unknown as AuditLogService, ); }); it('findById throws NotFoundException when missing', async () => { prisma.treatment.findUnique.mockResolvedValue(null); await expect(service.findById('missing')).rejects.toBeInstanceOf( NotFoundException, ); }); it('create stores the acting user and product', async () => { prisma.treatment.create.mockResolvedValue(treatment); await service.create( { colonyId: 'colony-1', date: '2026-01-01', product: 'Ameisensäure' }, 'user-1', ); const [[createArg]] = prisma.treatment.create.mock.calls as [ [{ data: { colonyId: string; userId: string; product: string } }], ]; expect(createArg.data.colonyId).toBe('colony-1'); expect(createArg.data.userId).toBe('user-1'); expect(createArg.data.product).toBe('Ameisensäure'); }); it('findByColony orders results chronologically', async () => { prisma.treatment.findMany.mockResolvedValue([treatment]); await service.findByColony('colony-1'); const [[queryArg]] = prisma.treatment.findMany.mock.calls as [ [{ where: { colonyId: string }; orderBy: { date: string } }], ]; expect(queryArg.where.colonyId).toBe('colony-1'); expect(queryArg.orderBy.date).toBe('asc'); }); });