@@ -4,9 +4,10 @@ import { PrismaService } from '../prisma/prisma.service';
44import { TestRunsService } from '../test-runs/test-runs.service' ;
55import { EventsGateway } from '../events/events.gateway' ;
66import { CreateBuildDto } from './dto/build-create.dto' ;
7- import { Build , TestRun } from '@prisma/client' ;
7+ import { Build , TestRun , Project } from '@prisma/client' ;
88import { mocked } from 'ts-jest/utils' ;
99import { BuildDto } from './dto/build.dto' ;
10+ import { HttpException , HttpStatus } from '@nestjs/common' ;
1011
1112jest . mock ( './dto/build.dto' ) ;
1213
@@ -17,13 +18,17 @@ const initService = async ({
1718 buildDeleteMock = jest . fn ( ) ,
1819 testRunDeleteMock = jest . fn ( ) ,
1920 eventsBuildCreatedMock = jest . fn ( ) ,
21+ projectFindManyMock = jest . fn ( ) ,
2022} ) => {
2123 const module : TestingModule = await Test . createTestingModule ( {
2224 providers : [
2325 BuildsService ,
2426 {
2527 provide : PrismaService ,
2628 useValue : {
29+ project : {
30+ findMany : projectFindManyMock ,
31+ } ,
2732 build : {
2833 findMany : buildFindManyMock ,
2934 create : buildCreateMock ,
@@ -119,30 +124,54 @@ describe('BuildsService', () => {
119124 expect ( result ) . toEqual ( [ buildDto ] ) ;
120125 } ) ;
121126
122- it ( 'create' , async ( ) => {
127+ describe ( 'create' , ( ) => {
123128 const createBuildDto : CreateBuildDto = {
124129 branchName : 'branchName' ,
125- projectId : 'projectId ' ,
130+ project : 'project id or name ' ,
126131 } ;
127- const buildCreateMock = jest . fn ( ) . mockResolvedValueOnce ( build ) ;
128- const eventsBuildCreatedMock = jest . fn ( ) ;
129- mocked ( BuildDto ) . mockReturnValueOnce ( buildDto ) ;
130- service = await initService ( { buildCreateMock, eventsBuildCreatedMock } ) ;
131132
132- const result = await service . create ( createBuildDto ) ;
133+ it ( 'should create' , async ( ) => {
134+ const project : Project = {
135+ id : 'project id' ,
136+ name : 'name' ,
137+ updatedAt : new Date ( ) ,
138+ createdAt : new Date ( ) ,
139+ } ;
140+ const buildCreateMock = jest . fn ( ) . mockResolvedValueOnce ( build ) ;
141+ const projectFindManyMock = jest . fn ( ) . mockResolvedValueOnce ( [ project ] ) ;
142+ const eventsBuildCreatedMock = jest . fn ( ) ;
143+ mocked ( BuildDto ) . mockReturnValueOnce ( buildDto ) ;
144+ service = await initService ( { buildCreateMock, eventsBuildCreatedMock, projectFindManyMock } ) ;
145+
146+ const result = await service . create ( createBuildDto ) ;
133147
134- expect ( buildCreateMock ) . toHaveBeenCalledWith ( {
135- data : {
136- branchName : createBuildDto . branchName ,
137- project : {
138- connect : {
139- id : createBuildDto . projectId ,
148+ expect ( projectFindManyMock ) . toHaveBeenCalledWith ( {
149+ where : {
150+ OR : [ { id : createBuildDto . project } , { name : createBuildDto . project } ] ,
151+ } ,
152+ } ) ;
153+ expect ( buildCreateMock ) . toHaveBeenCalledWith ( {
154+ data : {
155+ branchName : createBuildDto . branchName ,
156+ project : {
157+ connect : {
158+ id : project . id ,
159+ } ,
140160 } ,
141161 } ,
142- } ,
162+ } ) ;
163+ expect ( eventsBuildCreatedMock ) . toHaveBeenCalledWith ( buildDto ) ;
164+ expect ( result ) . toBe ( buildDto ) ;
165+ } ) ;
166+
167+ it ( 'should throw exception if not found' , async ( ) => {
168+ const projectFindManyMock = jest . fn ( ) . mockResolvedValueOnce ( [ ] ) ;
169+ service = await initService ( { projectFindManyMock } ) ;
170+
171+ await expect ( service . create ( createBuildDto ) ) . rejects . toThrowError (
172+ new HttpException ( 'Project not found' , HttpStatus . NOT_FOUND )
173+ ) ;
143174 } ) ;
144- expect ( eventsBuildCreatedMock ) . toHaveBeenCalledWith ( buildDto ) ;
145- expect ( result ) . toBe ( buildDto ) ;
146175 } ) ;
147176
148177 it ( 'delete' , async ( ) => {
0 commit comments