WebhooksModule (WebhookSubscription: URL, Events, Secret, aktiv) mit Event-Dispatcher, angehaengt an 10 Ereignisse in 8 bestehenden Services (colony.created, inspection.created, queen.created, queen.replaced, harvest.created, batch.created, batch.updated, product.stock_changed, task.created, task.completed). Auslieferung ist best-effort und blockiert die ausloesende Anfrage nicht bei Fehlern.
69 lines
2.1 KiB
TypeScript
69 lines
2.1 KiB
TypeScript
import { NotFoundException } from '@nestjs/common';
|
|
import { HarvestsService } from './harvests.service';
|
|
import { PrismaService } from '../prisma/prisma.service';
|
|
import { AuditLogService } from '../audit/audit-log.service';
|
|
import { WebhooksService } from '../webhooks/webhooks.service';
|
|
|
|
describe('HarvestsService', () => {
|
|
let service: HarvestsService;
|
|
let prisma: {
|
|
harvest: { findUnique: jest.Mock };
|
|
$transaction: jest.Mock;
|
|
};
|
|
let auditLog: { record: jest.Mock };
|
|
let tx: {
|
|
harvest: { create: jest.Mock };
|
|
harvestColony: { createMany: jest.Mock };
|
|
};
|
|
|
|
const harvest = { id: 'harvest-1', apiaryId: 'apiary-1', date: new Date() };
|
|
|
|
beforeEach(() => {
|
|
tx = {
|
|
harvest: { create: jest.fn().mockResolvedValue(harvest) },
|
|
harvestColony: { createMany: jest.fn() },
|
|
};
|
|
prisma = {
|
|
harvest: { findUnique: jest.fn() },
|
|
$transaction: jest.fn((callback: (txArg: typeof tx) => unknown) =>
|
|
callback(tx),
|
|
),
|
|
};
|
|
auditLog = { record: jest.fn() };
|
|
const webhooks = { dispatch: jest.fn().mockResolvedValue(undefined) };
|
|
service = new HarvestsService(
|
|
prisma as unknown as PrismaService,
|
|
auditLog as unknown as AuditLogService,
|
|
webhooks as unknown as WebhooksService,
|
|
);
|
|
});
|
|
|
|
it('findById throws NotFoundException when missing', async () => {
|
|
prisma.harvest.findUnique.mockResolvedValue(null);
|
|
await expect(service.findById('missing')).rejects.toBeInstanceOf(
|
|
NotFoundException,
|
|
);
|
|
});
|
|
|
|
it('create links every colony to the harvest inside a transaction', async () => {
|
|
prisma.harvest.findUnique.mockResolvedValue(harvest);
|
|
|
|
await service.create(
|
|
{
|
|
apiaryId: 'apiary-1',
|
|
date: '2026-07-01',
|
|
colonyIds: ['colony-1', 'colony-2'],
|
|
},
|
|
'user-1',
|
|
);
|
|
|
|
const [[createArg]] = tx.harvestColony.createMany.mock.calls as [
|
|
[{ data: { harvestId: string; colonyId: string }[] }],
|
|
];
|
|
expect(createArg.data).toEqual([
|
|
{ harvestId: harvest.id, colonyId: 'colony-1' },
|
|
{ harvestId: harvest.id, colonyId: 'colony-2' },
|
|
]);
|
|
});
|
|
});
|