add validation tests

This commit is contained in:
Gsk54 2022-12-16 16:58:32 +01:00
parent 03d718036d
commit 9583937622
5 changed files with 61 additions and 9 deletions

View File

@ -10,7 +10,7 @@ import { CreateAuthRequest } from '../../domain/dto/create-auth.request';
import { UpdateAuthRequest } from '../../domain/dto/update-auth.request';
import { ValidateAuthRequest } from '../../domain/dto/validate-auth.request';
import { Auth } from '../../domain/entities/auth';
import { ValidateQuery } from '../../queries/validate.query';
import { ValidateAuthQuery } from '../../queries/validate-auth.query';
import { AuthPresenter } from './auth.presenter';
@Controller()
@ -25,7 +25,7 @@ export class AuthController {
async validate(data: ValidateAuthRequest): Promise<AuthPresenter> {
try {
const auth = await this._queryBus.execute(
new ValidateQuery(data.username, data.password),
new ValidateAuthQuery(data.username, data.password),
);
return this._mapper.map(auth, Auth, AuthPresenter);
} catch (e) {

View File

@ -3,7 +3,7 @@ import { CqrsModule } from '@nestjs/cqrs';
import { DatabaseModule } from '../database/database.module';
import { AuthController } from './adapters/primaries/auth.controller';
import { CreateAuthUseCase } from './domain/usecases/create-auth.usecase';
import { ValidateUseCase } from './domain/usecases/validate-auth.usecase';
import { ValidateAuthUseCase } from './domain/usecases/validate-auth.usecase';
import { AuthProfile } from './mappers/auth.profile';
import { AuthRepository } from './adapters/secondaries/auth.repository';
import { UpdateAuthUseCase } from './domain/usecases/update-auth.usecase';
@ -14,7 +14,7 @@ import { UpdateAuthUseCase } from './domain/usecases/update-auth.usecase';
providers: [
AuthProfile,
AuthRepository,
ValidateUseCase,
ValidateAuthUseCase,
CreateAuthUseCase,
UpdateAuthUseCase,
],

View File

@ -1,15 +1,15 @@
import { QueryHandler } from '@nestjs/cqrs';
import { AuthRepository } from '../../adapters/secondaries/auth.repository';
import { ValidateQuery } from '../../queries/validate.query';
import { ValidateAuthQuery } from '../../queries/validate-auth.query';
import { Auth } from '../entities/auth';
import * as bcrypt from 'bcrypt';
import { NotFoundException, UnauthorizedException } from '@nestjs/common';
@QueryHandler(ValidateQuery)
export class ValidateUseCase {
@QueryHandler(ValidateAuthQuery)
export class ValidateAuthUseCase {
constructor(private readonly _authRepository: AuthRepository) {}
async execute(validate: ValidateQuery): Promise<Auth> {
async execute(validate: ValidateAuthQuery): Promise<Auth> {
const auth = await this._authRepository.findOne({
username: validate.username,
});

View File

@ -1,4 +1,4 @@
export class ValidateQuery {
export class ValidateAuthQuery {
readonly username: string;
readonly password: string;

View File

@ -0,0 +1,52 @@
import { classes } from '@automapper/classes';
import { AutomapperModule } from '@automapper/nestjs';
import { Test, TestingModule } from '@nestjs/testing';
import { AuthRepository } from '../../adapters/secondaries/auth.repository';
import { Auth } from '../../domain/entities/auth';
import * as bcrypt from 'bcrypt';
import { ValidateAuthUseCase } from '../../domain/usecases/validate-auth.usecase';
import { AuthProfile } from '../../mappers/auth.profile';
import { ValidateAuthQuery } from '../../queries/validate-auth.query';
const mockAuthRepository = {
findOne: jest.fn().mockResolvedValue({
uuid: 'bb281075-1b98-4456-89d6-c643d3044a91',
username: 'john.doe@email.com',
password: bcrypt.hashSync('John123', 10),
}),
};
describe('ValidateAuthUseCase', () => {
let validateAuthUseCase: ValidateAuthUseCase;
beforeAll(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [AutomapperModule.forRoot({ strategyInitializer: classes() })],
providers: [
{
provide: AuthRepository,
useValue: mockAuthRepository,
},
ValidateAuthUseCase,
AuthProfile,
],
}).compile();
validateAuthUseCase = module.get<ValidateAuthUseCase>(ValidateAuthUseCase);
});
it('should be defined', () => {
expect(validateAuthUseCase).toBeDefined();
});
describe('execute', () => {
it('should validate an auth and returns entity object', async () => {
const auth: Auth = await validateAuthUseCase.execute(
new ValidateAuthQuery('john.doe@email.com', 'John123'),
);
expect(auth.username).toBe('john.doe@email.com');
expect(bcrypt.compareSync('John123', auth.password)).toBeTruthy();
});
});
});