Skip to content
Snippets Groups Projects
auth.service.spec.ts 4.02 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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);
        });
      });