Cleanup and fixes
All checks were successful
Anatid Blog CI Workflow / test (./backend) (push) Successful in 29s
Anatid Blog CI Workflow / test (./frontend) (push) Successful in 30s
Anatid Blog CI Workflow / build-and-push-images (./backend/Dockerfile, git.anatid.net/tabris/anatid-blog-backend, ./backend) (push) Successful in 51s
Anatid Blog CI Workflow / build-and-push-images (./frontend/Dockerfile, git.anatid.net/tabris/anatid-blog-frontend, ./frontend) (push) Successful in 44s
Anatid Blog CI Workflow / deploy (push) Successful in 13s
All checks were successful
Anatid Blog CI Workflow / test (./backend) (push) Successful in 29s
Anatid Blog CI Workflow / test (./frontend) (push) Successful in 30s
Anatid Blog CI Workflow / build-and-push-images (./backend/Dockerfile, git.anatid.net/tabris/anatid-blog-backend, ./backend) (push) Successful in 51s
Anatid Blog CI Workflow / build-and-push-images (./frontend/Dockerfile, git.anatid.net/tabris/anatid-blog-frontend, ./frontend) (push) Successful in 44s
Anatid Blog CI Workflow / deploy (push) Successful in 13s
This commit is contained in:
parent
c95a28bab2
commit
861cec3a3a
@ -4,7 +4,7 @@ import configuration from './config/configuration';
|
|||||||
import { AppController } from './app.controller';
|
import { AppController } from './app.controller';
|
||||||
import { AppService } from './app.service';
|
import { AppService } from './app.service';
|
||||||
import { DatabaseModule } from './database/database.module';
|
import { DatabaseModule } from './database/database.module';
|
||||||
import { PostsModule } from './posts/posts.module';
|
import { BlogPostsModule } from './blogposts/blogposts.module';
|
||||||
import { UsersModule } from './users/users.module';
|
import { UsersModule } from './users/users.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
@ -13,7 +13,7 @@ import { UsersModule } from './users/users.module';
|
|||||||
load: [configuration]
|
load: [configuration]
|
||||||
}),
|
}),
|
||||||
DatabaseModule,
|
DatabaseModule,
|
||||||
PostsModule,
|
BlogPostsModule,
|
||||||
UsersModule
|
UsersModule
|
||||||
],
|
],
|
||||||
controllers: [AppController],
|
controllers: [AppController],
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
|
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class Post {
|
export class BlogPost {
|
||||||
@PrimaryGeneratedColumn()
|
@PrimaryGeneratedColumn()
|
||||||
id: number
|
id: number
|
||||||
|
|
34
backend/src/blogposts/blogposts.controller.spec.ts
Normal file
34
backend/src/blogposts/blogposts.controller.spec.ts
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { getRepositoryToken } from '@nestjs/typeorm';
|
||||||
|
import { BlogPostsController } from './blogposts.controller';
|
||||||
|
import { BlogPostsService } from './blogposts.service';
|
||||||
|
import { BlogPost } from './blogpost.entity';
|
||||||
|
|
||||||
|
const mockBlogPost = new BlogPost();
|
||||||
|
|
||||||
|
describe('BlogPostsController', () => {
|
||||||
|
let controller: BlogPostsController;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
controllers: [BlogPostsController],
|
||||||
|
providers: [
|
||||||
|
BlogPostsService,
|
||||||
|
{
|
||||||
|
provide: getRepositoryToken(BlogPost),
|
||||||
|
useValue: {
|
||||||
|
findAll: jest.fn().mockResolvedValue([mockBlogPost]),
|
||||||
|
findOne: jest.fn().mockResolvedValue(mockBlogPost),
|
||||||
|
create: jest.fn().mockResolvedValue(1),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
controller = module.get<BlogPostsController>(BlogPostsController);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(controller).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
25
backend/src/blogposts/blogposts.controller.ts
Normal file
25
backend/src/blogposts/blogposts.controller.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import { Body, Controller, Get, Param, Post } from '@nestjs/common';
|
||||||
|
import { BlogPostsService } from './blogposts.service';
|
||||||
|
import { CreateBlogPostDto } from './dto/create-blog-post.dto';
|
||||||
|
import { BlogPost } from './blogpost.entity';
|
||||||
|
|
||||||
|
@Controller('blogposts')
|
||||||
|
export class BlogPostsController {
|
||||||
|
|
||||||
|
constructor(private readonly blogPostsService: BlogPostsService) {}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
findAll(): Promise<BlogPost[]> {
|
||||||
|
return this.blogPostsService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get(':id')
|
||||||
|
findOne(@Param('id') id: number): Promise<BlogPost | null> {
|
||||||
|
return this.blogPostsService.findOne(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post()
|
||||||
|
create(@Body() createBlogPostDto: CreateBlogPostDto): Promise<number> {
|
||||||
|
return this.blogPostsService.create(createBlogPostDto);
|
||||||
|
}
|
||||||
|
}
|
13
backend/src/blogposts/blogposts.module.ts
Normal file
13
backend/src/blogposts/blogposts.module.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
import { BlogPost } from './blogpost.entity';
|
||||||
|
import { BlogPostsService } from './blogposts.service';
|
||||||
|
import { BlogPostsController } from './blogposts.controller';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [TypeOrmModule.forFeature([BlogPost])],
|
||||||
|
controllers: [BlogPostsController],
|
||||||
|
providers: [BlogPostsService],
|
||||||
|
exports: [TypeOrmModule]
|
||||||
|
})
|
||||||
|
export class BlogPostsModule {}
|
@ -0,0 +1,4 @@
|
|||||||
|
// @ts-ignore
|
||||||
|
export const repositoryMockFactory: () => MockType<Repository<any>> = jest.fn(() => ({
|
||||||
|
findOne: jest.fn(entity => entity),
|
||||||
|
}));
|
32
backend/src/blogposts/blogposts.service.spec.ts
Normal file
32
backend/src/blogposts/blogposts.service.spec.ts
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { getRepositoryToken } from '@nestjs/typeorm';
|
||||||
|
import { BlogPostsService } from './blogposts.service';
|
||||||
|
import { BlogPost } from './blogpost.entity';
|
||||||
|
|
||||||
|
const mockBlogPost = new BlogPost();
|
||||||
|
|
||||||
|
describe('BlogPostsService', () => {
|
||||||
|
let service: BlogPostsService;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
providers: [
|
||||||
|
BlogPostsService,
|
||||||
|
{
|
||||||
|
provide: getRepositoryToken(BlogPost),
|
||||||
|
useValue: {
|
||||||
|
findAll: jest.fn().mockResolvedValue([mockBlogPost]),
|
||||||
|
findOne: jest.fn().mockResolvedValue(mockBlogPost),
|
||||||
|
create: jest.fn().mockResolvedValue(1),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
service = module.get<BlogPostsService>(BlogPostsService);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(service).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
34
backend/src/blogposts/blogposts.service.ts
Normal file
34
backend/src/blogposts/blogposts.service.ts
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { DataSource, Repository } from 'typeorm';
|
||||||
|
import { BlogPost } from './blogpost.entity';
|
||||||
|
import { CreateBlogPostDto } from './dto/create-blog-post.dto';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class BlogPostsService {
|
||||||
|
constructor(
|
||||||
|
@InjectRepository(BlogPost)
|
||||||
|
private blogPostsRepository: Repository<BlogPost>
|
||||||
|
) {}
|
||||||
|
|
||||||
|
findAll(): Promise<BlogPost[]> {
|
||||||
|
return this.blogPostsRepository.find();
|
||||||
|
}
|
||||||
|
|
||||||
|
findOne(id: number): Promise<BlogPost | null> {
|
||||||
|
return this.blogPostsRepository.findOneBy({ id });
|
||||||
|
}
|
||||||
|
|
||||||
|
async create(createBlogPostDto: CreateBlogPostDto): Promise<number> {
|
||||||
|
const newBlogPost = this.blogPostsRepository.create({
|
||||||
|
title: createBlogPostDto.title,
|
||||||
|
body: createBlogPostDto.body
|
||||||
|
});
|
||||||
|
const blogPost = await this.blogPostsRepository.save(newBlogPost);
|
||||||
|
return blogPost.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
async remove(id: number): Promise<void> {
|
||||||
|
await this.blogPostsRepository.delete(id);
|
||||||
|
}
|
||||||
|
}
|
4
backend/src/blogposts/dto/create-blog-post.dto.ts
Normal file
4
backend/src/blogposts/dto/create-blog-post.dto.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export class CreateBlogPostDto {
|
||||||
|
title: string;
|
||||||
|
body: string;
|
||||||
|
}
|
3
backend/src/mocktype.ts
Normal file
3
backend/src/mocktype.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export type MockType<T> = {
|
||||||
|
[P in keyof T]?: jest.Mock<{}>;
|
||||||
|
};
|
@ -1,4 +0,0 @@
|
|||||||
export CreatePostDto {
|
|
||||||
title: string;
|
|
||||||
body: string;
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
import { Test, TestingModule } from '@nestjs/testing';
|
|
||||||
import { PostsController } from './posts.controller';
|
|
||||||
|
|
||||||
describe('PostsController', () => {
|
|
||||||
let controller: PostsController;
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
const module: TestingModule = await Test.createTestingModule({
|
|
||||||
controllers: [PostsController],
|
|
||||||
}).compile();
|
|
||||||
|
|
||||||
controller = module.get<PostsController>(PostsController);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should be defined', () => {
|
|
||||||
expect(controller).toBeDefined();
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,24 +0,0 @@
|
|||||||
import { Controller, Get } from '@nestjs/common';
|
|
||||||
import { PostsService } from './posts.service';
|
|
||||||
import { CreatePostDto } from './dto';
|
|
||||||
|
|
||||||
@Controller('posts')
|
|
||||||
export class PostsController {
|
|
||||||
|
|
||||||
constructor(private readonly postsService: PostService) {}
|
|
||||||
|
|
||||||
@Get()
|
|
||||||
findAll(): string {
|
|
||||||
return this.postsService.findAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Get(':id')
|
|
||||||
findOne(@Param('id') id: string): string {
|
|
||||||
return this.postsService.findOne(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Post()
|
|
||||||
create(@Body() createPostDto: CreatePostDto): string {
|
|
||||||
return this.postsService;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
import { Module } from '@nestjs/common';
|
|
||||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
||||||
import { Post } from './Post.entity';
|
|
||||||
|
|
||||||
@Module({
|
|
||||||
imports: [TypeOrmModule.forFeature([Post])],
|
|
||||||
exports: [TypeOrmModule]
|
|
||||||
})
|
|
||||||
export class PostsModule {}
|
|
@ -1,18 +0,0 @@
|
|||||||
import { Test, TestingModule } from '@nestjs/testing';
|
|
||||||
import { PostsService } from './posts.service';
|
|
||||||
|
|
||||||
describe('PostsService', () => {
|
|
||||||
let service: PostsService;
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
const module: TestingModule = await Test.createTestingModule({
|
|
||||||
providers: [PostsService],
|
|
||||||
}).compile();
|
|
||||||
|
|
||||||
service = module.get<PostsService>(PostsService);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should be defined', () => {
|
|
||||||
expect(service).toBeDefined();
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,33 +0,0 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
|
||||||
import { InjectRepository } from '@nestjs/typeorm';
|
|
||||||
import { Repository } from 'typeorm';
|
|
||||||
import { Post } from './Post.entity';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class PostsService {
|
|
||||||
constructor(
|
|
||||||
@InjectRepository(Post)
|
|
||||||
private PostsRepository: Repository<Post>,
|
|
||||||
) {}
|
|
||||||
|
|
||||||
findAll(): Promise<Post[]> {
|
|
||||||
return this.PostsRepository.find();
|
|
||||||
}
|
|
||||||
|
|
||||||
findOne(id: number): Promise<Post | null> {
|
|
||||||
return this.PostsRepository.findOneBy({ id });
|
|
||||||
}
|
|
||||||
|
|
||||||
async create(title: string, body: string) Promise<void> {
|
|
||||||
const newPost = this.PostsRepository.create({
|
|
||||||
title: title,
|
|
||||||
body: body
|
|
||||||
});
|
|
||||||
const post = await this.PostsRepository.save(newPost);
|
|
||||||
return post.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
async remove(id: number): Promise<void> {
|
|
||||||
await this.PostsRepository.delete(id);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,12 +1,25 @@
|
|||||||
import { Test, TestingModule } from '@nestjs/testing';
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { getRepositoryToken } from '@nestjs/typeorm';
|
||||||
import { UsersService } from './users.service';
|
import { UsersService } from './users.service';
|
||||||
|
import { User } from './user.entity';
|
||||||
|
|
||||||
|
const mockUser = new User();
|
||||||
|
|
||||||
describe('UsersService', () => {
|
describe('UsersService', () => {
|
||||||
let service: UsersService;
|
let service: UsersService;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
const module: TestingModule = await Test.createTestingModule({
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
providers: [UsersService],
|
providers: [
|
||||||
|
UsersService ,
|
||||||
|
{
|
||||||
|
provide: getRepositoryToken(User),
|
||||||
|
useValue: {
|
||||||
|
save: jest.fn().mockResolvedValue(mockUser),
|
||||||
|
find: jest.fn().mockResolvedValue([mockUser]),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
}).compile();
|
}).compile();
|
||||||
|
|
||||||
service = module.get<UsersService>(UsersService);
|
service = module.get<UsersService>(UsersService);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user