Skip to content

Commit 8af80f5

Browse files
committed
build service tests added
1 parent fe6d85f commit 8af80f5

File tree

2 files changed

+158
-18
lines changed

2 files changed

+158
-18
lines changed

src/builds/builds.service.spec.ts

Lines changed: 157 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,168 @@ import { BuildsService } from './builds.service';
33
import { PrismaService } from '../prisma/prisma.service';
44
import { TestRunsService } from '../test-runs/test-runs.service';
55
import { 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

754
describe('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
});

src/builds/builds.service.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,7 @@ export class BuildsService {
5353
},
5454
});
5555

56-
try {
57-
await Promise.all(build.testRuns.map(testRun => this.testRunsService.delete(testRun.id)));
58-
} catch (err) {
59-
console.log(err);
60-
}
56+
await Promise.all(build.testRuns.map(testRun => this.testRunsService.delete(testRun.id)));
6157

6258
return this.prismaService.build.delete({
6359
where: { id },

0 commit comments

Comments
 (0)