Skip to content

Commit

Permalink
Added tests for Mail Receiver
Browse files Browse the repository at this point in the history
Signed-off-by: Florian Oberndörfer <[email protected]>
  • Loading branch information
flo0852 committed Dec 7, 2024
1 parent 6ae49f9 commit ec213d1
Show file tree
Hide file tree
Showing 3 changed files with 165 additions and 6 deletions.
98 changes: 98 additions & 0 deletions apps/backend/src/app/utils/mail/mail.controller.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import request from 'supertest';
import { MailController } from './mail.controller';
import { MailService } from './mail.service';
import { getRepositoryToken } from '@nestjs/typeorm';
import { MailReceiverEntity } from './entity/MailReceiver.entity';
import { DeleteResult, Repository } from 'typeorm';
import { MailerService } from '@nestjs-modules/mailer';
import { ConfigService } from '@nestjs/config';

describe('MailController (e2e)', () => {
let app: INestApplication;
let mailReceiverRepository: Repository<MailReceiverEntity>;

beforeEach(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
controllers: [MailController],
providers: [
MailService,
{
provide: MailerService,
useValue: {
sendMail: jest.fn(),
},
},
{
provide: ConfigService,
useValue: {
get: jest.fn().mockReturnValue('true'),
},
},
{
provide: getRepositoryToken(MailReceiverEntity),
useValue: {
find: jest.fn(),
save: jest.fn(),
findOneBy: jest.fn(),
delete: jest.fn(),
},
},
],
}).compile();

app = moduleFixture.createNestApplication();
await app.init();

mailReceiverRepository = moduleFixture.get<Repository<MailReceiverEntity>>(
getRepositoryToken(MailReceiverEntity)
);
});

it('/GET mail receivers', async () => {
const receivers = [{ id: '1', mail: '[email protected]' }];
jest.spyOn(mailReceiverRepository, 'find').mockResolvedValue(receivers);

const response = await request(app.getHttpServer()).get('/mail');
expect(response.status).toBe(200);
expect(response.body).toEqual(receivers);
});

it('/POST mail receiver', async () => {
const createMailReceiverDto = { mail: '[email protected]' };
const savedReceiver = { id: '2', mail: '[email protected]' };
jest.spyOn(mailReceiverRepository, 'save').mockResolvedValue(savedReceiver);

const response = await request(app.getHttpServer())
.post('/mail')
.send(createMailReceiverDto);
expect(response.status).toBe(201);
expect(response.body).toEqual(savedReceiver);
});

it('/DELETE mail receiver', async () => {
const id = 'ea1a2f52-5cf4-44a6-b266-175ee396a18c';
jest
.spyOn(mailReceiverRepository, 'findOneBy')
.mockResolvedValue({ id, mail: '[email protected]' });
jest
.spyOn(mailReceiverRepository, 'delete')
.mockResolvedValue(new DeleteResult());

const response = await request(app.getHttpServer()).delete(`/mail/${id}`);
expect(response.status).toBe(200);
});

it('should throw NotFoundException if mail receiver not found', async () => {
const id = 'ea1a2f52-5cf4-44a6-b266-175ee396a18e';
jest.spyOn(mailReceiverRepository, 'findOneBy').mockResolvedValue(null);

const response = await request(app.getHttpServer()).delete(`/mail/${id}`);
expect(response.status).toBe(404);
});

afterAll(async () => {
await app.close();
});
});
69 changes: 66 additions & 3 deletions apps/backend/src/app/utils/mail/mail.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,39 @@ import { BackupType } from '../../backupData/dto/backupType';
import { SizeAlertEntity } from '../../alerting/entity/alerts/sizeAlert.entity';
import { SeverityType } from '../../alerting/dto/severityType';
import { SIZE_ALERT } from '../constants';
import { getRepositoryToken } from '@nestjs/typeorm';
import { MailReceiverEntity } from './entity/MailReceiver.entity';
import { NotFoundException } from '@nestjs/common';

jest.mock('path', () => ({
resolve: jest.fn().mockReturnValue('mocked/path/to/logo.png'),
dirname: jest.fn(),
}));

const mockMailReceiverRepository = {
find: jest.fn().mockResolvedValue([
{
id: '1',
mail: '[email protected]',
},
]),
save: jest.fn().mockImplementation((receiver) => Promise.resolve(receiver)),
findOneBy: jest.fn().mockImplementation(({ id }) => {
if (id === '1') {
return Promise.resolve({
id: '1',
mail: '[email protected]',
});
} else {
return Promise.resolve(null);
}
}),
delete: jest.fn().mockResolvedValue({}),
};

describe('MailService', () => {
let service: MailService;
let mailerService: MailerService;
let configService: ConfigService;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
Expand All @@ -29,16 +53,18 @@ describe('MailService', () => {
{
provide: ConfigService,
useValue: {
getOrThrow: jest.fn().mockReturnValue('[email protected]'),
get: jest.fn().mockReturnValue('true'),
},
},
{
provide: getRepositoryToken(MailReceiverEntity),
useValue: mockMailReceiverRepository,
},
],
}).compile();

service = module.get(MailService);
mailerService = module.get(MailerService);
configService = module.get(ConfigService);
});

it('should be defined', () => {
Expand Down Expand Up @@ -112,4 +138,41 @@ describe('MailService', () => {
attachments,
});
});

it('should get all mail receivers', async () => {
const receivers = [{ id: '1', mail: '[email protected]' }];

expect(await service.getAllMailReceiver()).toStrictEqual(receivers);
});

it('should add a mail receiver', async () => {
const createMailReceiverDto = { mail: '[email protected]' };
const savedReceiver = { mail: '[email protected]' };

await service.addMailReceiver(createMailReceiverDto);

expect(mockMailReceiverRepository.save).toBeCalledWith({
mail: createMailReceiverDto.mail,
});

expect(await service.addMailReceiver(createMailReceiverDto)).toStrictEqual(
savedReceiver
);
});

it('should remove a mail receiver', async () => {
const id = '1';
await service.removeMailReceiver(id);

expect(mockMailReceiverRepository.findOneBy).toHaveBeenCalledWith({ id });
expect(mockMailReceiverRepository.delete).toHaveBeenCalledWith({ id });
});

it('should throw NotFoundException if mail receiver not found', async () => {
const id = 'non-existent-id';

await expect(service.removeMailReceiver(id)).rejects.toThrow(
NotFoundException
);
});
});
4 changes: 1 addition & 3 deletions apps/backend/src/app/utils/mail/mail.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,7 @@ export class MailService {
.map((receiver) => receiver.mail)
.join(',')
.split(',');

console.log('receivers', receivers);


let reason = '';
let description = '';
let valueColumnName = '';
Expand Down

0 comments on commit ec213d1

Please sign in to comment.