add e2e with add groups
This commit is contained in:
parent
2f54770720
commit
45a69eea8a
@ -28,17 +28,16 @@ const moduleTypeOrm = TypeOrmModule.forRootAsync({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const envFilePath =
|
||||||
|
process.env.NODE_ENV === 'test' ? '.env.e2e' : '.env';
|
||||||
|
|
||||||
|
// throw new Error("envFilePath:"+envFilePath);
|
||||||
|
const moduleConfig = ConfigModule.forRoot({
|
||||||
|
envFilePath,
|
||||||
|
});
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [moduleConfig, moduleTypeOrm, UserModule, AuthModule],
|
||||||
ConfigModule.forRoot({
|
|
||||||
envFilePath: process.env.DATA_SOURCE_ENV
|
|
||||||
? process.env.DATA_SOURCE_ENV
|
|
||||||
: '.env',
|
|
||||||
}),
|
|
||||||
moduleTypeOrm,
|
|
||||||
UserModule,
|
|
||||||
AuthModule,
|
|
||||||
],
|
|
||||||
controllers: [AppController],
|
controllers: [AppController],
|
||||||
providers: [AppService],
|
providers: [AppService],
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { IsString, IsEmail, MinLength } from 'class-validator';
|
import { IsString, IsEmail, MinLength, IsArray } from 'class-validator';
|
||||||
|
|
||||||
export class CreateUserDto {
|
export class CreateUserDto {
|
||||||
@IsString()
|
@IsString()
|
||||||
@ -11,4 +11,7 @@ export class CreateUserDto {
|
|||||||
@IsString()
|
@IsString()
|
||||||
@MinLength(6)
|
@MinLength(6)
|
||||||
password: string;
|
password: string;
|
||||||
|
|
||||||
|
@IsArray()
|
||||||
|
roles: string[];
|
||||||
}
|
}
|
||||||
|
|||||||
37
src/user/user-group.service.ts
Normal file
37
src/user/user-group.service.ts
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
import { UserGroup } from '../entity/user-group';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class UserGroupService {
|
||||||
|
constructor(
|
||||||
|
@InjectRepository(UserGroup)
|
||||||
|
private userGroupRepository: Repository<UserGroup>,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
findAll(): Promise<UserGroup[]> {
|
||||||
|
return this.userGroupRepository.find();
|
||||||
|
}
|
||||||
|
|
||||||
|
findOne(id: number): Promise<UserGroup | null> {
|
||||||
|
return this.userGroupRepository.findOneBy({ id });
|
||||||
|
}
|
||||||
|
|
||||||
|
async create(userGroup: Partial<UserGroup>): Promise<UserGroup> {
|
||||||
|
const newUserGroup = this.userGroupRepository.create(userGroup);
|
||||||
|
return this.userGroupRepository.save(newUserGroup);
|
||||||
|
}
|
||||||
|
|
||||||
|
async update(
|
||||||
|
id: number,
|
||||||
|
userGroup: Partial<UserGroup>,
|
||||||
|
): Promise<UserGroup | null> {
|
||||||
|
await this.userGroupRepository.update(id, userGroup);
|
||||||
|
return this.userGroupRepository.findOneBy({ id });
|
||||||
|
}
|
||||||
|
|
||||||
|
async remove(id: number): Promise<void> {
|
||||||
|
await this.userGroupRepository.delete(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
37
src/user/user-role.service.ts
Normal file
37
src/user/user-role.service.ts
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
import { UserRole } from '../entity/user-role';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class UserRoleService {
|
||||||
|
constructor(
|
||||||
|
@InjectRepository(UserRole)
|
||||||
|
private userGroupRepository: Repository<UserRole>,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
findAll(): Promise<UserRole[]> {
|
||||||
|
return this.userGroupRepository.find();
|
||||||
|
}
|
||||||
|
|
||||||
|
findOne(id: number): Promise<UserRole | null> {
|
||||||
|
return this.userGroupRepository.findOneBy({ id });
|
||||||
|
}
|
||||||
|
|
||||||
|
async create(userGroup: Partial<UserRole>): Promise<UserRole> {
|
||||||
|
const newUserRole = this.userGroupRepository.create(userGroup);
|
||||||
|
return this.userGroupRepository.save(newUserRole);
|
||||||
|
}
|
||||||
|
|
||||||
|
async update(
|
||||||
|
id: number,
|
||||||
|
userRole: Partial<UserRole>,
|
||||||
|
): Promise<UserRole | null> {
|
||||||
|
await this.userGroupRepository.update(id, userRole);
|
||||||
|
return this.userGroupRepository.findOneBy({ id });
|
||||||
|
}
|
||||||
|
|
||||||
|
async remove(id: number): Promise<void> {
|
||||||
|
await this.userGroupRepository.delete(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -28,7 +28,8 @@ export class UserController {
|
|||||||
create(
|
create(
|
||||||
@Body(new ValidationPipe()) createUserDto: CreateUserDto,
|
@Body(new ValidationPipe()) createUserDto: CreateUserDto,
|
||||||
): Promise<User> {
|
): Promise<User> {
|
||||||
return this.userService.create(createUserDto);
|
const { roles, ...user } = createUserDto;
|
||||||
|
return this.userService.create(user, roles);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get()
|
@Get()
|
||||||
|
|||||||
@ -3,9 +3,11 @@ import { TypeOrmModule } from '@nestjs/typeorm';
|
|||||||
import { UserService } from './user.service';
|
import { UserService } from './user.service';
|
||||||
import { UserController } from './user.controller';
|
import { UserController } from './user.controller';
|
||||||
import { User } from '../entity/user';
|
import { User } from '../entity/user';
|
||||||
|
import { UserGroup } from '../entity/user-group';
|
||||||
|
import { UserRole } from '../entity/user-role';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [TypeOrmModule.forFeature([User])],
|
imports: [TypeOrmModule.forFeature([User, UserGroup, UserRole])],
|
||||||
providers: [UserService],
|
providers: [UserService],
|
||||||
controllers: [UserController],
|
controllers: [UserController],
|
||||||
exports: [UserService],
|
exports: [UserService],
|
||||||
|
|||||||
@ -4,12 +4,14 @@ import { Repository } from 'typeorm';
|
|||||||
import { User } from '../entity/user';
|
import { User } from '../entity/user';
|
||||||
import * as bcrypt from 'bcrypt';
|
import * as bcrypt from 'bcrypt';
|
||||||
import { FindOptionsRelations } from 'typeorm/find-options/FindOptionsRelations';
|
import { FindOptionsRelations } from 'typeorm/find-options/FindOptionsRelations';
|
||||||
|
import { UserGroupService } from './user-group.service';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class UserService {
|
export class UserService {
|
||||||
constructor(
|
constructor(
|
||||||
@InjectRepository(User)
|
@InjectRepository(User)
|
||||||
private usersRepository: Repository<User>,
|
private usersRepository: Repository<User>,
|
||||||
|
private userGroupService: UserGroupService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
findAll(): Promise<User[]> {
|
findAll(): Promise<User[]> {
|
||||||
@ -27,11 +29,14 @@ export class UserService {
|
|||||||
return this.usersRepository.findOne({ where: { username }, relations });
|
return this.usersRepository.findOne({ where: { username }, relations });
|
||||||
}
|
}
|
||||||
|
|
||||||
async create(user: Partial<User>): Promise<User> {
|
async create(user: Partial<User>, groups?: string[]): Promise<User> {
|
||||||
if (user.password) {
|
if (user.password) {
|
||||||
user.password = await bcrypt.hash(user.password, 12);
|
user.password = await bcrypt.hash(user.password, 12);
|
||||||
}
|
}
|
||||||
const newUser = this.usersRepository.create(user);
|
const newUser = this.usersRepository.create(user);
|
||||||
|
if (groups?.length) {
|
||||||
|
|
||||||
|
}
|
||||||
return this.usersRepository.save(newUser);
|
return this.usersRepository.save(newUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -8,8 +8,18 @@ import { UserService } from '../src/user/user.service';
|
|||||||
import { User } from '../src/entity/user';
|
import { User } from '../src/entity/user';
|
||||||
import { UpdateUserDto } from '../src/user/dto/update-user.dto';
|
import { UpdateUserDto } from '../src/user/dto/update-user.dto';
|
||||||
|
|
||||||
|
import dotenv from 'dotenv';
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
|
dotenv.config({ path: path.resolve(process.cwd(), '.env.e2e') });
|
||||||
|
|
||||||
describe('UserController (e2e)', () => {
|
describe('UserController (e2e)', () => {
|
||||||
process.env.DATA_SOURCE_ENV = '.env.e2e';
|
process.env.DATA_SOURCE_ENV = '.env.e2e';
|
||||||
|
process.env.DATABASE_HOST = 'localhost';
|
||||||
|
process.env.DATABASE_PORT = '4401';
|
||||||
|
process.env.DATABASE_USER = 'test';
|
||||||
|
process.env.DATABASE_PASS = 'test';
|
||||||
|
|
||||||
let app: INestApplication;
|
let app: INestApplication;
|
||||||
let jwtToken: string;
|
let jwtToken: string;
|
||||||
let adminUserId: number;
|
let adminUserId: number;
|
||||||
@ -25,13 +35,6 @@ describe('UserController (e2e)', () => {
|
|||||||
await app.init();
|
await app.init();
|
||||||
|
|
||||||
const userService = moduleFixture.get<UserService>(UserService);
|
const userService = moduleFixture.get<UserService>(UserService);
|
||||||
const adminUser = await userService.create({
|
|
||||||
username: 'e2e_admin',
|
|
||||||
password: 'password',
|
|
||||||
email: "admin@dvbooking.hu",
|
|
||||||
roles: [Role.Admin],
|
|
||||||
});
|
|
||||||
adminUserId = adminUser.id;
|
|
||||||
|
|
||||||
const response = await request(app.getHttpServer())
|
const response = await request(app.getHttpServer())
|
||||||
.post('/auth/login')
|
.post('/auth/login')
|
||||||
@ -41,8 +44,6 @@ describe('UserController (e2e)', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
const userService = app.get<UserService>(UserService);
|
|
||||||
await userService.remove(adminUserId);
|
|
||||||
await app.close();
|
await app.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -59,8 +60,8 @@ describe('UserController (e2e)', () => {
|
|||||||
it('(POST) should create a user', async () => {
|
it('(POST) should create a user', async () => {
|
||||||
const createUserDto: CreateUserDto = {
|
const createUserDto: CreateUserDto = {
|
||||||
username: 'e2e_user',
|
username: 'e2e_user',
|
||||||
|
email: 'user@dvbooking.hu',
|
||||||
password: 'password',
|
password: 'password',
|
||||||
roles: [Role.User],
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const response = await request(app.getHttpServer())
|
const response = await request(app.getHttpServer())
|
||||||
@ -84,8 +85,8 @@ describe('UserController (e2e)', () => {
|
|||||||
userService = app.get<UserService>(UserService);
|
userService = app.get<UserService>(UserService);
|
||||||
user = await userService.create({
|
user = await userService.create({
|
||||||
username: 'e2e_test_user',
|
username: 'e2e_test_user',
|
||||||
|
email: 'e2e_test_user@dvbooking.hu',
|
||||||
password: 'password',
|
password: 'password',
|
||||||
roles: [Role.User],
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user