Skip to content

Commit 0e0b743

Browse files
authored
1 parent befe1af commit 0e0b743

File tree

7 files changed

+102
-91
lines changed

7 files changed

+102
-91
lines changed

src/builds/builds.controller.spec.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,6 @@ describe('Builds Controller', () => {
5353
project: 'name',
5454
};
5555
const project = TEST_PROJECT;
56-
const newBuild: Build = {
57-
...TEST_BUILD,
58-
number: null,
59-
};
6056
const buildWithNumber: Build = {
6157
...TEST_BUILD,
6258
number: 12,
@@ -70,25 +66,19 @@ describe('Builds Controller', () => {
7066
});
7167

7268
it('should create new build', async () => {
73-
const eventBuildCreatedMock = jest.fn();
7469
const projectFindOneMock = jest.fn().mockResolvedValueOnce(project);
75-
const buildFindOrCreateMock = jest.fn().mockResolvedValueOnce(newBuild);
76-
const buildIncrementBuildNumberMock = jest.fn().mockResolvedValueOnce(buildWithNumber);
70+
const buildFindOrCreateMock = jest.fn().mockResolvedValueOnce(buildWithNumber);
7771
const deleteOldBuilds = jest.fn();
7872
controller = await initController({
7973
projectFindOneMock,
8074
buildFindOrCreateMock,
81-
buildIncrementBuildNumberMock,
82-
eventBuildCreatedMock,
8375
deleteOldBuilds,
8476
});
8577

8678
const result = await controller.create(createBuildDto);
8779

8880
expect(result).toStrictEqual(new BuildDto(buildWithNumber));
8981
expect(deleteOldBuilds).toHaveBeenCalledWith(project.id, project.maxBuildAllowed);
90-
expect(buildIncrementBuildNumberMock).toHaveBeenCalledWith(newBuild.id, project.id);
91-
expect(eventBuildCreatedMock).toHaveBeenCalledWith(new BuildDto(buildWithNumber));
9282
});
9383

9484
it('should reuse build', async () => {

src/builds/builds.controller.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import { MixedGuard } from '../auth/guards/mixed.guard';
2525
import { PaginatedBuildDto } from './dto/build-paginated.dto';
2626
import { ModifyBuildDto } from './dto/build-modify.dto';
2727
import { ProjectsService } from '../projects/projects.service';
28-
import { EventsGateway } from '../shared/events/events.gateway';
2928
import { RoleGuard } from '../auth/guards/role.guard';
3029
import { Roles } from '../shared/roles.decorator';
3130

@@ -34,7 +33,6 @@ import { Roles } from '../shared/roles.decorator';
3433
export class BuildsController {
3534
constructor(
3635
private buildsService: BuildsService,
37-
private eventsGateway: EventsGateway,
3836
@Inject(forwardRef(() => ProjectsService))
3937
private projectService: ProjectsService
4038
) {}
@@ -75,15 +73,11 @@ export class BuildsController {
7573
async create(@Body() createBuildDto: CreateBuildDto): Promise<BuildDto> {
7674
const project = await this.projectService.findOne(createBuildDto.project);
7775
await this.buildsService.deleteOldBuilds(project.id, project.maxBuildAllowed);
78-
let build = await this.buildsService.findOrCreate({
76+
const build = await this.buildsService.findOrCreate({
7977
projectId: project.id,
8078
branchName: createBuildDto.branchName,
8179
ciBuildId: createBuildDto.ciBuildId,
8280
});
83-
if (!build.number) {
84-
build = await this.buildsService.incrementBuildNumber(build.id, project.id);
85-
this.eventsGateway.buildCreated(new BuildDto(build));
86-
}
8781
return new BuildDto(build);
8882
}
8983

src/builds/builds.service.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@ export class BuildsService {
132132
},
133133
}
134134
: { id: projectId };
135-
return this.prismaService.build.upsert({
135+
136+
let build = await this.prismaService.build.upsert({
136137
where,
137138
create: {
138139
ciBuildId,
@@ -148,6 +149,14 @@ export class BuildsService {
148149
isRunning: true,
149150
},
150151
});
152+
153+
// assigne build number
154+
if (!build.number) {
155+
build = await this.incrementBuildNumber(build.id, projectId);
156+
this.eventsGateway.buildCreated(new BuildDto(build));
157+
}
158+
159+
return build;
151160
}
152161

153162
async incrementBuildNumber(buildId: string, projectId: string): Promise<Build> {

src/test-variations/test-variations.controller.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ import { PrismaService } from '../prisma/prisma.service';
77
import { BuildDto } from '../builds/dto/build.dto';
88
import { RoleGuard } from '../auth/guards/role.guard';
99
import { Roles } from '../shared/roles.decorator';
10+
import { MergeParams } from './types';
1011

1112
@ApiTags('test-variations')
1213
@Controller('test-variations')
1314
export class TestVariationsController {
14-
constructor(private testVariations: TestVariationsService, private prismaService: PrismaService) { }
15+
constructor(private testVariations: TestVariationsService, private prismaService: PrismaService) {}
1516

1617
@Get()
1718
@ApiQuery({ name: 'projectId', required: true })
@@ -33,16 +34,15 @@ export class TestVariationsController {
3334

3435
@Get('merge/')
3536
@ApiQuery({ name: 'projectId', required: true })
36-
@ApiQuery({ name: 'branchName', required: true })
37+
@ApiQuery({ name: 'fromBranch', required: true })
38+
@ApiQuery({ name: 'toBranch', required: true })
3739
@ApiOkResponse({ type: BuildDto })
3840
@ApiBearerAuth()
3941
@UseGuards(JwtAuthGuard, RoleGuard)
4042
@Roles(Role.admin, Role.editor)
41-
merge(
42-
@Query('projectId', new ParseUUIDPipe()) projectId: string,
43-
@Query('branchName') branchName: string
44-
): Promise<BuildDto> {
45-
return this.testVariations.merge(projectId, branchName);
43+
merge(@Query() params: MergeParams): Promise<BuildDto> {
44+
const { projectId, fromBranch, toBranch } = params;
45+
return this.testVariations.merge(projectId, fromBranch, toBranch);
4646
}
4747

4848
@Delete(':id')

src/test-variations/test-variations.service.spec.ts

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const initModule = async ({
2525
testRunCreateMock = jest.fn(),
2626
testRunFindMany = jest.fn(),
2727
testRunDeleteMock = jest.fn(),
28+
testRuncalCulateDiffMock = jest.fn(),
2829
$executeRawMock = jest.fn(),
2930
}) => {
3031
const module: TestingModule = await Test.createTestingModule({
@@ -49,6 +50,7 @@ const initModule = async ({
4950
useValue: {
5051
delete: testRunDeleteMock,
5152
create: testRunCreateMock,
53+
calculateDiff: testRuncalCulateDiffMock,
5254
},
5355
},
5456
{
@@ -369,13 +371,14 @@ describe('TestVariationsService', () => {
369371
});
370372

371373
it('merge', async () => {
372-
const mergedBranch = 'develop';
374+
const fromBranch = 'develop';
375+
const targetBranch = 'test';
373376
const project: Project = TEST_PROJECT;
374377
const build: Build = {
375378
id: 'a9385fc1-884d-4f9f-915e-40da0e7773d5',
376379
ciBuildId: 'ciBuildId',
377380
number: null,
378-
branchName: project.mainBranchName,
381+
branchName: targetBranch,
379382
status: null,
380383
projectId: project.id,
381384
updatedAt: new Date(),
@@ -397,7 +400,7 @@ describe('TestVariationsService', () => {
397400
comment: 'some comment',
398401
createdAt: new Date(),
399402
updatedAt: new Date(),
400-
branchName: mergedBranch,
403+
branchName: fromBranch,
401404
};
402405
const testVariationSecond: TestVariation = {
403406
id: '123',
@@ -413,7 +416,7 @@ describe('TestVariationsService', () => {
413416
comment: 'some comment',
414417
createdAt: new Date(),
415418
updatedAt: new Date(),
416-
branchName: mergedBranch,
419+
branchName: fromBranch,
417420
};
418421
const testVariationNoBaseline: TestVariation = {
419422
id: '123',
@@ -429,9 +432,9 @@ describe('TestVariationsService', () => {
429432
comment: 'some comment',
430433
createdAt: new Date(),
431434
updatedAt: new Date(),
432-
branchName: mergedBranch,
435+
branchName: fromBranch,
433436
};
434-
const testVariationMainBranch: TestVariation = {
437+
const testVariationSourceBranch: TestVariation = {
435438
id: '123',
436439
projectId: project.id,
437440
name: 'Test name',
@@ -445,9 +448,12 @@ describe('TestVariationsService', () => {
445448
comment: 'some comment',
446449
createdAt: new Date(),
447450
updatedAt: new Date(),
448-
branchName: project.mainBranchName,
451+
branchName: fromBranch,
452+
};
453+
const testVariationTargetBranch: TestVariation = {
454+
...testVariationSourceBranch,
455+
branchName: targetBranch,
449456
};
450-
const projectFindUniqueMock = jest.fn().mockResolvedValueOnce(project);
451457
const buildFindOrCreateMock = jest.fn().mockResolvedValueOnce(build);
452458
const variationFindManyMock = jest
453459
.fn()
@@ -459,38 +465,38 @@ describe('TestVariationsService', () => {
459465
const getImageMock = jest.fn().mockReturnValueOnce(image).mockReturnValueOnce(image).mockReturnValueOnce(null);
460466
const testRunCreateMock = jest.fn();
461467
const buildUpdateMock = jest.fn();
468+
const testRuncalCulateDiffMock = jest.fn();
462469
const service = await initModule({
463-
projectFindUniqueMock,
464470
buildFindOrCreateMock,
465471
buildUpdateMock,
466472
testRunCreateMock,
473+
testRuncalCulateDiffMock,
467474
variationFindManyMock,
468475
getImageMock,
469476
});
470477
service.find = jest
471478
.fn()
472-
.mockResolvedValueOnce(testVariationMainBranch)
473-
.mockResolvedValueOnce(testVariationMainBranch);
479+
.mockResolvedValueOnce(testVariationSourceBranch)
480+
.mockResolvedValueOnce(testVariationSourceBranch);
481+
service.create = jest
482+
.fn()
483+
.mockResolvedValueOnce(testVariationTargetBranch)
484+
.mockResolvedValueOnce(testVariationTargetBranch);
474485

475-
await service.merge(project.id, mergedBranch);
486+
await service.merge(project.id, fromBranch, targetBranch);
476487

477-
expect(projectFindUniqueMock).toHaveBeenCalledWith({ where: { id: project.id } });
478488
expect(buildFindOrCreateMock).toHaveBeenCalledWith({
479-
branchName: project.mainBranchName,
489+
branchName: targetBranch,
480490
projectId: project.id,
481491
});
482-
expect(variationFindManyMock).toHaveBeenCalledWith({
483-
where: { projectId: project.id, branchName: mergedBranch },
484-
});
485-
expect(getImageMock).toHaveBeenCalledWith(testVariation.baselineName);
486492
expect(service.find).toHaveBeenNthCalledWith(1, {
487493
name: testVariation.name,
488494
os: testVariation.os,
489495
device: testVariation.device,
490496
browser: testVariation.browser,
491497
viewport: testVariation.viewport,
492498
customTags: testVariation.customTags,
493-
branchName: project.mainBranchName,
499+
branchName: targetBranch,
494500
projectId: project.id,
495501
});
496502
expect(service.find).toHaveBeenNthCalledWith(2, {
@@ -500,14 +506,14 @@ describe('TestVariationsService', () => {
500506
browser: testVariationSecond.browser,
501507
viewport: testVariationSecond.viewport,
502508
customTags: testVariationSecond.customTags,
503-
branchName: project.mainBranchName,
509+
branchName: targetBranch,
504510
projectId: project.id,
505511
});
506-
507512
expect(testRunCreateMock).toHaveBeenNthCalledWith(1, {
508-
testVariation: testVariationMainBranch,
513+
testVariation: testVariationTargetBranch,
509514
createTestRequestDto: {
510515
...testVariation,
516+
branchName: targetBranch,
511517
buildId: build.id,
512518
diffTollerancePercent: 0,
513519
merge: true,
@@ -516,9 +522,10 @@ describe('TestVariationsService', () => {
516522
imageBuffer: PNG.sync.write(image),
517523
});
518524
expect(testRunCreateMock).toHaveBeenNthCalledWith(2, {
519-
testVariation: testVariationMainBranch,
525+
testVariation: testVariationTargetBranch,
520526
createTestRequestDto: {
521527
...testVariationSecond,
528+
branchName: targetBranch,
522529
buildId: build.id,
523530
diffTollerancePercent: 0,
524531
merge: true,

0 commit comments

Comments
 (0)