diff --git a/ApiCore-Backend/src/queens/queens.service.spec.ts b/ApiCore-Backend/src/queens/queens.service.spec.ts index 357f633..62d84a5 100644 --- a/ApiCore-Backend/src/queens/queens.service.spec.ts +++ b/ApiCore-Backend/src/queens/queens.service.spec.ts @@ -1,4 +1,8 @@ -import { BadRequestException, NotFoundException } from '@nestjs/common'; +import { + BadRequestException, + ConflictException, + NotFoundException, +} from '@nestjs/common'; import { QueensService } from './queens.service'; import { PrismaService } from '../prisma/prisma.service'; import { AuditLogService } from '../audit/audit-log.service'; @@ -78,6 +82,17 @@ describe('QueensService', () => { ).rejects.toBeInstanceOf(NotFoundException); }); + it('assignColony rejects a queen who is no longer available', async () => { + prisma.queen.findUnique.mockResolvedValue({ + ...queen, + status: 'DECEASED', + }); + await expect( + service.assignColony('queen-1', { colonyId: 'colony-1' }, 'user-1'), + ).rejects.toBeInstanceOf(ConflictException); + expect(prisma.colony.findUnique).not.toHaveBeenCalled(); + }); + it('assignColony closes the previous queen history, sets currentQueenId, and opens a new history row', async () => { prisma.queen.findUnique.mockResolvedValue(queen); prisma.colony.findUnique.mockResolvedValue({ diff --git a/ApiCore-Backend/src/queens/queens.service.ts b/ApiCore-Backend/src/queens/queens.service.ts index 1fe5c07..fe811d1 100644 --- a/ApiCore-Backend/src/queens/queens.service.ts +++ b/ApiCore-Backend/src/queens/queens.service.ts @@ -1,5 +1,6 @@ import { BadRequestException, + ConflictException, Injectable, NotFoundException, } from '@nestjs/common'; @@ -154,6 +155,11 @@ export class QueensService { actingUserId: string, ): Promise { const queen = await this.findById(id); + if (QUEEN_NO_LONGER_AVAILABLE_STATUSES.includes(queen.status)) { + throw new ConflictException( + `Queen ${id} is not available for assignment (status: ${queen.status}) - correct her status first if this was a mistake`, + ); + } const colony = await this.prisma.colony.findUnique({ where: { id: dto.colonyId }, });