Skip to content

Commit 1778f10

Browse files
authored
Merge pull request #19 from Visual-Regression-Tracker/71-project-edit
71 project edit
2 parents 4be16ad + a3ca2bf commit 1778f10

File tree

7 files changed

+70
-23
lines changed

7 files changed

+70
-23
lines changed

prisma/seed.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,9 @@ async function createDefaultProject() {
6060
console.log('## CREATING DEFAULT PROJECT ##');
6161
console.log('##############################');
6262
console.log('');
63-
console.log(`Project name ${project.name}`);
6463
console.log(`Project key: ${project.id}`);
64+
console.log(`Project name ${project.name}`);
65+
console.log(`Project name ${project.mainBranchName}`);
6566
});
6667
}
6768
}
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
import { ApiProperty } from '@nestjs/swagger';
2-
import { IsString } from 'class-validator';
1+
import { PickType } from '@nestjs/swagger';
2+
import { ProjectDto } from './project.dto';
33

4-
export class CreateProjectDto {
5-
@ApiProperty()
6-
@IsString()
7-
readonly name: string;
8-
}
4+
export class CreateProjectDto extends PickType(ProjectDto, ['name', 'mainBranchName']) {}

src/projects/dto/project.dto.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { ApiProperty } from '@nestjs/swagger';
2+
import { IsUUID, IsString } from 'class-validator';
3+
import { Project } from '@prisma/client';
4+
5+
export class ProjectDto implements Project {
6+
@ApiProperty()
7+
@IsUUID()
8+
readonly id: string;
9+
10+
@ApiProperty()
11+
@IsString()
12+
readonly name: string;
13+
14+
@ApiProperty()
15+
@IsString()
16+
readonly mainBranchName: string;
17+
18+
@ApiProperty()
19+
readonly createdAt: Date;
20+
21+
@ApiProperty()
22+
readonly updatedAt: Date;
23+
}

src/projects/projects.controller.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,10 @@
1-
import {
2-
Controller,
3-
Get,
4-
UseGuards,
5-
Body,
6-
Post,
7-
Param,
8-
ParseUUIDPipe,
9-
Delete,
10-
} from '@nestjs/common';
1+
import { Controller, Get, UseGuards, Body, Post, Param, ParseUUIDPipe, Delete, Put } from '@nestjs/common';
112
import { ApiTags, ApiBearerAuth, ApiOkResponse, ApiParam } from '@nestjs/swagger';
123
import { JwtAuthGuard } from '../auth/guards/auth.guard';
134
import { ProjectsService } from './projects.service';
145
import { CreateProjectDto } from './dto/create-project.dto';
156
import { Project } from '@prisma/client';
7+
import { ProjectDto } from './dto/project.dto';
168

179
@Controller('projects')
1810
@ApiTags('projects')
@@ -22,22 +14,32 @@ export class ProjectsController {
2214
@Get()
2315
@ApiBearerAuth()
2416
@UseGuards(JwtAuthGuard)
17+
@ApiOkResponse({ type: [ProjectDto] })
2518
getAll(): Promise<Project[]> {
2619
return this.projectsService.findAll();
2720
}
2821

2922
@Post()
3023
@ApiBearerAuth()
3124
@UseGuards(JwtAuthGuard)
25+
@ApiOkResponse({ type: ProjectDto })
3226
create(@Body() createProjectDto: CreateProjectDto): Promise<Project> {
3327
return this.projectsService.create(createProjectDto);
3428
}
3529

30+
@Put()
31+
@ApiBearerAuth()
32+
@UseGuards(JwtAuthGuard)
33+
@ApiOkResponse({ type: ProjectDto })
34+
update(@Body() projectDto: ProjectDto): Promise<Project> {
35+
return this.projectsService.update(projectDto);
36+
}
37+
3638
@Delete(':id')
37-
@ApiParam({ name: 'id', required: true })
3839
@ApiBearerAuth()
3940
@UseGuards(JwtAuthGuard)
40-
@ApiOkResponse({ type: Number })
41+
@ApiOkResponse({ type: ProjectDto })
42+
@ApiParam({ name: 'id', required: true })
4143
remove(@Param('id', new ParseUUIDPipe()) id: string): Promise<Project> {
4244
return this.projectsService.remove(id);
4345
}

src/projects/projects.service.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { BuildsService } from '../builds/builds.service';
44
import { TestVariationsService } from '../test-variations/test-variations.service';
55
import { PrismaService } from '../prisma/prisma.service';
66
import { Project } from '@prisma/client';
7+
import { ProjectDto } from './dto/project.dto';
78

89
@Injectable()
910
export class ProjectsService {
@@ -21,6 +22,17 @@ export class ProjectsService {
2122
return this.prismaService.project.create({
2223
data: {
2324
name: createProjectDto.name,
25+
mainBranchName: createProjectDto.mainBranchName,
26+
},
27+
});
28+
}
29+
30+
async update(projectDto: ProjectDto): Promise<Project> {
31+
return this.prismaService.project.update({
32+
where: { id: projectDto.id },
33+
data: {
34+
name: projectDto.name,
35+
mainBranchName: projectDto.mainBranchName,
2436
},
2537
});
2638
}
@@ -35,9 +47,9 @@ export class ProjectsService {
3547
});
3648

3749
try {
38-
await Promise.all(project.builds.map((build) => this.buildsService.remove(build.id)));
50+
await Promise.all(project.builds.map(build => this.buildsService.remove(build.id)));
3951
await Promise.all(
40-
project.testVariations.map((testVariation) => this.testVariationsService.remove(testVariation.id))
52+
project.testVariations.map(testVariation => this.testVariationsService.remove(testVariation.id))
4153
);
4254
} catch (err) {
4355
console.log(err);

test/builds.e2e-spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ describe('Builds (e2e)', () => {
3232

3333
beforeEach(async () => {
3434
user = await haveUserLogged(usersService);
35-
project = await projecstService.create({ name: 'E2E test' });
35+
project = await projecstService.create({ name: 'E2E test', mainBranchName: 'master' });
3636
});
3737

3838
afterEach(async () => {

test/projects.e2e-spec.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const projectServiceMock = {
1616
findAll: () => ['test'],
1717
create: () => project,
1818
remove: () => project,
19+
update: () => project,
1920
};
2021

2122
describe('Projects (e2e)', () => {
@@ -91,4 +92,16 @@ describe('Projects (e2e)', () => {
9192
await requestWithAuth(app, 'delete', `/projects/${project.id}`, {}, 'asd').expect(401);
9293
});
9394
});
95+
96+
describe('PUT /', () => {
97+
it('can edit', async () => {
98+
const res = await requestWithAuth(app, 'put', `/projects`, project, loggedUser.token).expect(200);
99+
100+
expect(res.body).toStrictEqual(projectServiceMock.update());
101+
});
102+
103+
it('not valid token', async () => {
104+
await requestWithAuth(app, 'put', `/projects`, project, 'asd').expect(401);
105+
});
106+
});
94107
});

0 commit comments

Comments
 (0)