import { Test, TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; import { EmailController } from './email.controller'; import { Email } from '../database/entities/email.entity'; const mockEmails: Partial[] = [ { Id: 1, MessageId: 'msg-1', SenderAddress: 'a@test.de', RecipientAddress: 'b@test.de', Subject: 'Test 1', Date: new Date(), Body: 'body', Status: 0 }, { Id: 2, MessageId: 'msg-2', SenderAddress: 'c@test.de', RecipientAddress: 'd@test.de', Subject: 'Test 2', Date: new Date(), Body: 'body2', Status: 1 }, ]; const mockQueryBuilder = { orderBy: jest.fn().mockReturnThis(), take: jest.fn().mockReturnThis(), where: jest.fn().mockReturnThis(), getMany: jest.fn().mockResolvedValue(mockEmails), }; const mockRepo = { createQueryBuilder: jest.fn().mockReturnValue(mockQueryBuilder), findOneByOrFail: jest.fn().mockResolvedValue(mockEmails[0]), }; describe('EmailController', () => { let controller: EmailController; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [EmailController], providers: [{ provide: getRepositoryToken(Email), useValue: mockRepo }], }).compile(); controller = module.get(EmailController); }); it('should be defined', () => { expect(controller).toBeDefined(); }); it('getEmails returns list', async () => { const result = await controller.getEmails(); expect(result).toHaveLength(2); expect(mockQueryBuilder.orderBy).toHaveBeenCalledWith('e.Date', 'DESC'); }); it('getEmails filters by status', async () => { await controller.getEmails('1'); expect(mockQueryBuilder.where).toHaveBeenCalledWith('e.Status = :status', { status: 1 }); }); it('getEmail returns single item', async () => { const result = await controller.getEmail('1'); expect(result).toEqual(mockEmails[0]); expect(mockRepo.findOneByOrFail).toHaveBeenCalledWith({ Id: 1 }); }); });