@@ -3,24 +3,168 @@ import { BuildsService } from './builds.service';
33import { PrismaService } from '../prisma/prisma.service' ;
44import { TestRunsService } from '../test-runs/test-runs.service' ;
55import { EventsGateway } from '../events/events.gateway' ;
6+ import { CreateBuildDto } from './dto/build-create.dto' ;
7+ import { Build } from 'prisma/node_modules/.prisma/client' ;
8+ import { TestRun } from 'prisma/node_modules/@prisma/client' ;
9+ import { mocked } from 'ts-jest/utils' ;
10+ import { BuildDto } from './dto/build.dto' ;
11+
12+ jest . mock ( './dto/build.dto' ) ;
13+
14+ const initService = async ( {
15+ buildFindManyMock = jest . fn ( ) ,
16+ buildCreateMock = jest . fn ( ) ,
17+ buildFindOneMock = jest . fn ( ) ,
18+ buildDeleteMock = jest . fn ( ) ,
19+ testRunDeleteMock = jest . fn ( ) ,
20+ eventsBuildCreatedMock = jest . fn ( ) ,
21+ } ) => {
22+ const module : TestingModule = await Test . createTestingModule ( {
23+ providers : [
24+ BuildsService ,
25+ {
26+ provide : PrismaService ,
27+ useValue : {
28+ build : {
29+ findMany : buildFindManyMock ,
30+ create : buildCreateMock ,
31+ findOne : buildFindOneMock ,
32+ delete : buildDeleteMock ,
33+ } ,
34+ } ,
35+ } ,
36+ {
37+ provide : TestRunsService ,
38+ useValue : {
39+ delete : testRunDeleteMock ,
40+ } ,
41+ } ,
42+ {
43+ provide : EventsGateway ,
44+ useValue : {
45+ buildCreated : eventsBuildCreatedMock ,
46+ } ,
47+ } ,
48+ ] ,
49+ } ) . compile ( ) ;
50+
51+ return module . get < BuildsService > ( BuildsService ) ;
52+ } ;
653
754describe ( 'BuildsService' , ( ) => {
855 let service : BuildsService ;
956
10- beforeEach ( async ( ) => {
11- const module : TestingModule = await Test . createTestingModule ( {
12- providers : [
13- BuildsService ,
14- { provide : PrismaService , useValue : { } } ,
15- { provide : TestRunsService , useValue : { } } ,
16- { provide : EventsGateway , useValue : { } } ,
17- ] ,
18- } ) . compile ( ) ;
19-
20- service = module . get < BuildsService > ( BuildsService ) ;
57+ const build : Build & {
58+ testRuns : TestRun [ ] ;
59+ } = {
60+ id : 'a9385fc1-884d-4f9f-915e-40da0e7773d5' ,
61+ number : null ,
62+ branchName : 'develop' ,
63+ status : null ,
64+ projectId : 'e0a37894-6f29-478d-b13e-6182fecc715e' ,
65+ updatedAt : new Date ( ) ,
66+ createdAt : new Date ( ) ,
67+ userId : null ,
68+ testRuns : [
69+ {
70+ id : '10fb5e02-64e0-4cf5-9f17-c00ab3c96658' ,
71+ imageName : '1592423768112.screenshot.png' ,
72+ diffName : null ,
73+ diffPercent : null ,
74+ diffTollerancePercent : 1 ,
75+ pixelMisMatchCount : null ,
76+ status : 'new' ,
77+ buildId : '146e7a8d-89f0-4565-aa2c-e61efabb0afd' ,
78+ testVariationId : '3bc4a5bc-006e-4d43-8e4e-eaa132627fca' ,
79+ updatedAt : new Date ( ) ,
80+ createdAt : new Date ( ) ,
81+ name : 'ss2f77' ,
82+ browser : 'chromium' ,
83+ device : null ,
84+ os : null ,
85+ viewport : '1800x1600' ,
86+ baselineName : null ,
87+ ignoreAreas : '[]' ,
88+ } ,
89+ ] ,
90+ } ;
91+
92+ const buildDto : BuildDto = {
93+ id : 'a9385fc1-884d-4f9f-915e-40da0e7773d5' ,
94+ number : null ,
95+ branchName : 'develop' ,
96+ status : 'new' ,
97+ projectId : 'e0a37894-6f29-478d-b13e-6182fecc715e' ,
98+ updatedAt : new Date ( ) ,
99+ createdAt : new Date ( ) ,
100+ userId : null ,
101+ passedCount : 0 ,
102+ unresolvedCount : 0 ,
103+ failedCount : 0 ,
104+ } ;
105+
106+ it ( 'findMany' , async ( ) => {
107+ const buildFindManyMock = jest . fn ( ) . mockResolvedValueOnce ( [ build ] ) ;
108+ const projectId = 'someId' ;
109+ mocked ( BuildDto ) . mockReturnValueOnce ( buildDto ) ;
110+ service = await initService ( { buildFindManyMock } ) ;
111+
112+ const result = await service . findMany ( projectId ) ;
113+
114+ expect ( buildFindManyMock ) . toHaveBeenCalledWith ( {
115+ include : { testRuns : true } ,
116+ orderBy : { createdAt : 'desc' } ,
117+ where : { projectId } ,
118+ } ) ;
119+ expect ( result ) . toEqual ( [ buildDto ] ) ;
21120 } ) ;
22121
23- it ( 'should be defined' , ( ) => {
24- expect ( service ) . toBeDefined ( ) ;
122+ it ( 'create' , async ( ) => {
123+ const createBuildDto : CreateBuildDto = {
124+ branchName : 'branchName' ,
125+ projectId : 'projectId' ,
126+ } ;
127+ const buildCreateMock = jest . fn ( ) . mockResolvedValueOnce ( build ) ;
128+ const eventsBuildCreatedMock = jest . fn ( ) ;
129+ mocked ( BuildDto ) . mockReturnValueOnce ( buildDto ) ;
130+ service = await initService ( { buildCreateMock, eventsBuildCreatedMock } ) ;
131+
132+ const result = await service . create ( createBuildDto ) ;
133+
134+ expect ( buildCreateMock ) . toHaveBeenCalledWith ( {
135+ data : {
136+ branchName : createBuildDto . branchName ,
137+ project : {
138+ connect : {
139+ id : createBuildDto . projectId ,
140+ } ,
141+ } ,
142+ } ,
143+ include : {
144+ testRuns : true ,
145+ } ,
146+ } ) ;
147+ expect ( eventsBuildCreatedMock ) . toHaveBeenCalledWith ( buildDto ) ;
148+ expect ( result ) . toBe ( buildDto ) ;
149+ } ) ;
150+
151+ it ( 'delete' , async ( ) => {
152+ const buildFindOneMock = jest . fn ( ) . mockResolvedValueOnce ( build ) ;
153+ const buildDeleteMock = jest . fn ( ) ;
154+ const testRunDeleteMock = jest . fn ( ) ;
155+ service = await initService ( { buildFindOneMock, buildDeleteMock, testRunDeleteMock } ) ;
156+
157+ await service . remove ( build . id ) ;
158+
159+ expect ( buildFindOneMock ) . toHaveBeenCalledWith ( {
160+ where : { id : build . id } ,
161+ include : {
162+ testRuns : true ,
163+ } ,
164+ } ) ;
165+ expect ( testRunDeleteMock ) . toHaveBeenCalledWith ( build . testRuns [ 0 ] . id ) ;
166+ expect ( buildDeleteMock ) . toHaveBeenCalledWith ( {
167+ where : { id : build . id } ,
168+ } ) ;
25169 } ) ;
26170} ) ;
0 commit comments