diff --git a/src/personal-offers/personal-offers.controller.spec.ts b/src/personal-offers/personal-offers.controller.spec.ts index 9c7511d5a4479f4585fc825224efe37114a2652d..6e5ce91d59c7c13504f47bf2dc63d1dd63ae2fa4 100644 --- a/src/personal-offers/personal-offers.controller.spec.ts +++ b/src/personal-offers/personal-offers.controller.spec.ts @@ -67,6 +67,17 @@ describe('PersonalOffersController', () => { }); describe('create personal offer', () => { + it('should return 204 if personal offer is empty', async () => { + const req = { user: { _id: '6036721022462b001334c4bb' } }; + try { + await controller.create(req, createPersonalOffersDtoDataMock[3]); + // Fail test if above expression doesn't throw anything. + expect(true).toBe(false); + } catch (e) { + expect(e.message).toBe('Empty personal offer'); + expect(e.status).toBe(204); + } + }); it('should create personal offer for existing user and structure', async () => { const req = { user: { _id: '6036721022462b001334c4bb' } }; expect(await controller.create(req, createPersonalOffersDtoDataMock[0])).toEqual(personalOffersDataMock[0]); diff --git a/src/personal-offers/personal-offers.controller.ts b/src/personal-offers/personal-offers.controller.ts index e1cab46742dcf46deca003f3b0e53f3e1b8eb330..ec75b313d390fdf8e876123827ea04164b5d7b65 100644 --- a/src/personal-offers/personal-offers.controller.ts +++ b/src/personal-offers/personal-offers.controller.ts @@ -1,4 +1,16 @@ -import { Body, Controller, Delete, Get, Param, Post, Put, Request, UseGuards } from '@nestjs/common'; +import { + Body, + Controller, + Delete, + Get, + HttpException, + HttpStatus, + Param, + Post, + Put, + Request, + UseGuards, +} from '@nestjs/common'; import { ApiBody, ApiParam, ApiTags } from '@nestjs/swagger'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; import { StructuresService } from '../structures/services/structures.service'; @@ -43,6 +55,10 @@ export class PersonalOffersController { @Body() createPersonalOfferDto: CreatePersonalOfferDto ): Promise<PersonalOfferDocument> { const user: IUser = req.user; + const isEmpty = Object.values(createPersonalOfferDto.personalOffer.categories).every((value) => value.length === 0); + if (isEmpty) { + throw new HttpException('Empty personal offer', HttpStatus.NO_CONTENT); + } const personalOfferDocument: PersonalOfferDocument = await this.personalOffersService.create( createPersonalOfferDto ); diff --git a/test/mock/data/personalOffers.mock.data.ts b/test/mock/data/personalOffers.mock.data.ts index 04667b21960f0b55c9204069335372192f58a6bd..6af1b99d97b15e777ba14f65ff5c1875b739af9b 100644 --- a/test/mock/data/personalOffers.mock.data.ts +++ b/test/mock/data/personalOffers.mock.data.ts @@ -5,7 +5,7 @@ import { PersonalOffer } from '../../../src/personal-offers/schemas/personal-off export const personalOffersDtoDataMock: PersonalOfferDto[] = [ { categories: { - onlineProcedures: [], + onlineProcedures: ['caf', 'cpam'], baseSkills: [], advancedSkills: [], }, @@ -33,6 +33,13 @@ export const personalOffersDtoDataMock: PersonalOfferDto[] = [ advancedSkills: [], }, }, + { + categories: { + onlineProcedures: [], + baseSkills: [], + advancedSkills: [], + }, + }, ]; export const createPersonalOffersDtoDataMock: CreatePersonalOfferDto[] = [ @@ -48,6 +55,10 @@ export const createPersonalOffersDtoDataMock: CreatePersonalOfferDto[] = [ structureId: '6093ba0e2ab5775cfc01fffe', personalOffer: personalOffersDtoDataMock[0], }, + { + structureId: '6093ba0e2ab5775cfc01ed3e', + personalOffer: personalOffersDtoDataMock[2], + }, ]; export const updatePersonalOffersDtoDataMock: PersonalOfferDto[] = [ @@ -87,7 +98,7 @@ export const personalOffersDataMock: PersonalOffer[] = [ { _id: '1234ba0e2ab5775cfc01ed3e', categories: { - onlineProcedures: [], + onlineProcedures: ['caf', 'cpam'], baseSkills: [], advancedSkills: [], },