import { Test, TestingModule } from '@nestjs/testing'; import { AuthService } from '../../../api/src/modules/auth/auth.service'; import { UsersService } from '../../../api/src/modules/users/users.service'; import { JwtService } from '@nestjs/jwt'; import * as bcrypt from 'bcryptjs'; describe('AuthService', () => { let service: AuthService; let usersService: UsersService; const mockUser = { id: '1', email: 'test@test.com', passwordHash: 'hash', role: 'buyer', isActive: true }; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [ AuthService, { provide: UsersService, useValue: { findByEmail: jest.fn(), create: jest.fn(), findById: jest.fn(), set2FASecret: jest.fn() } }, { provide: JwtService, useValue: { sign: jest.fn(() => 'token'), verify: jest.fn(() => ({ userId: '1' })) } }, ], }).compile(); service = module.get<AuthService>(AuthService); usersService = module.get<UsersService>(UsersService); }); it('should register a user', async () => { jest.spyOn(usersService, 'findByEmail').mockResolvedValue(null); jest.spyOn(usersService, 'create').mockResolvedValue(mockUser as any); const result = await service.register({ email: 'test@test.com', password: 'password123', fullName: 'Test' }); expect(result.token).toBe('token'); }); it('should login a user', async () => { jest.spyOn(usersService, 'findByEmail').mockResolvedValue(mockUser as any); jest.spyOn(bcrypt, 'compare').mockImplementation(async () => true); const result = await service.login({ email: 'test@test.com', password: 'password123' }); expect(result.token).toBe('token'); }); });