Test register user method with user lookup, encode and websocket

Viewed 27

I'm testing my application using jest for unit testing in my service. I'm having trouble understanding how I would test a method of creating a new user, methods within it have others that validate if this user already exists (find : username), I get the password and use a hash to encrypt, in addition to using websocket for the created to identify a new user and reflect to all logged in users that a new user was. However, I'm getting an error in my test unit in my new user method.

My service:

 async registerUser(user: createUser): Promise<createUser> {
    
    const userFound = await this.userModel.findOne({ username: user.username });
    if (userFound) {
      throw new BadRequestException('Usuario ja existe.');
    }

    user.password = await Criptography.encodePwd(user.password);

    const userCreate = await this.userModel.create(user);

    this.socketGateway.emitnewUser(userCreate);

    return  userCreate;
  }  

My test using jest:

const userModelTest: User[] = [

  new User({ _id: '89d58w5',username: 'testUser50',password: '123456',name: 'teste1',role: 'operador', WebSocket: 'mywebsocket1',
  }),
];


describe('userservice', () => {
  let userService: Userservice;
  let userRepository: Model<User>;

  beforeEach(async () => {
    const userMockRepository = {
      find: jest.fn().mockResolvedValue(userModelTest),
      findAll: jest.fn().mockResolvedValue(userModelTest),
      findById: jest.fn(),
      findOne: jest.fn().mockResolvedValue(userModelTest[0]),
      registerUser: jest.fn().mockReturnValue(userModelTest[0]),
      exec: jest.fn().mockImplementation(),
      findByIdAndUpdat: jest.fn(),
      findOneAndDelete: jest.fn(),
      listUsers: jest.fn().mockImplementation(),
      create: jest.fn().mockResolvedValue( {
        username: 'testUser1',
        password: '123456',
        name: 'teste1',
        role: 'operador',
      })
    };
   
 const module: TestingModule = await Test.createTestingModule({

      providers: [
        Userservice,
        AppGateway,
        {
          provide: getModelToken('User'),
          useValue: userMockRepository,
        },
      ],
    }).compile();

    userService = module.get<Userservice>(Userservice);
    userRepository = module.get<Model<User>>(getModelToken('User'));
  });

DESCRIBE TEST:

describe('Create', ()=>{
    it('Create New User', async ()=>{
      const data : createUser = {
        username: 'testUser1',
        password: '123456',
        name: 'teste1',
        role: 'operar',
      }
      const userAlreadyExists = await userService.findOne(data.username)
      expect(userAlreadyExists).toBe(true)
      const result = await userService.registerUser(data)
      expect(result).toEqual( data)
      const encode = await userService
      console.log(result)
      
    })
  });

ERROR:

BadRequestException: User already exist.

  46 |     const userFound = await this.userModel.findOne({ username: user.username });
  47 |     if (userFound) {
> 48 |       throw new BadRequestException('Usuario ja existe.');
     |             ^
  49 |     }
  50 |
  51 |     user.password = await Criptography.encodePwd(user.password);

  at Userservice.registerUser (users/shared/user.service.ts:48:13)
  at Object.<anonymous> (users/shared/user.service.spec.ts:120:22)
0 Answers
Related