Newer
Older
import { HttpException, HttpStatus } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
import { getModelToken } from '@nestjs/mongoose';
import { PassportModule } from '@nestjs/passport';
import { Test, TestingModule } from '@nestjs/testing';
import { ConfigurationModule } from '../configuration/configuration.module';
import { MailerModule } from '../mailer/mailer.module';
import { User } from '../users/user.schema';
import { UsersService } from '../users/users.service';
import { AuthService } from './auth.service';
import { LoginDto } from './login-dto';
describe('AuthService', () => {
let service: AuthService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [
PassportModule,
MailerModule,
ConfigurationModule,
JwtModule.register({
secret: process.env.JWT_SECRET,
signOptions: { expiresIn: '86400s' }, // 24h validity
}),
],
providers: [
AuthService,
UsersService,
{
provide: getModelToken('User'),
useValue: User,
},
],
}).compile();
service = module.get<AuthService>(AuthService);
});
it('should be defined', () => {
expect(service).toBeDefined();
});
describe('validateUser', () => {
it('should validateUser', async () => {
const result = {
_id: 'tsfsf6296',
validationToken:
'cf1c74c22cedb6b575945098db42d2f493fb759c9142c6aff7980f252886f36ee086574ee99a06bc99119079257116c959c8ec870949cebdef2b293666dbca42',
emailVerified: false,
email: 'jacques.dupont@mii.com',
role: 0,
};
const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
jest.spyOn(service, 'validateUser').mockImplementation(async (): Promise<any> => result);
expect(await service.validateUser(loginDto)).toBe(result);
});
it('should not validateUser', async () => {
const result = null;
const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
jest.spyOn(service, 'validateUser').mockImplementation(async (): Promise<any> => result);
expect(await service.validateUser(loginDto)).toBe(result);
});
});
describe('login', () => {
it('should login user jacques.dupont@mii.com', async () => {
const result = { username: ' jacques.dupont@mii.com', token: 'tok3n!1sfq' };
const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
jest.spyOn(service, 'validateUser').mockImplementation(async (): Promise<{ username; token }> => result);
expect(await service.validateUser(loginDto)).toBe(result);
});
it('should not login jacques.dupont@mii.com, email not verified', async () => {
const result = new HttpException('Invalid credentials', HttpStatus.UNAUTHORIZED);
const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
jest.spyOn(service, 'validateUser').mockImplementation(async (): Promise<any> => result);
expect(await service.validateUser(loginDto)).toBe(result);
});
it('should not login jacques.dupont@mii.com, bad password', async () => {
const result = new HttpException('Invalid credentials', HttpStatus.UNAUTHORIZED);
const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
jest.spyOn(service, 'validateUser').mockImplementation(async (): Promise<any> => result);
expect(await service.validateUser(loginDto)).toBe(result);
});
it('should not login jacques.dupont@mii.com, username does not exist', async () => {
const result = new HttpException('Invalid credentials', HttpStatus.UNAUTHORIZED);
const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
jest.spyOn(service, 'validateUser').mockImplementation(async (): Promise<any> => result);
expect(await service.validateUser(loginDto)).toBe(result);
});
});