Newer
Older
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { onlineMediationMockData } from '../../test/mock/data/onlineMediation.mock.data';
import { ConfigurationService } from '../configuration/configuration.service';
import { MailerModule } from '../mailer/mailer.module';
import { MailerService } from '../mailer/mailer.service';
import { OnlineMediationService } from './onlineMediation.service';
describe('userRegistryService', () => {
let onlineMediationService: OnlineMediationService;
const mockOnlineMediationModel = {
find: jest.fn(() => mockOnlineMediationModel),
create: jest.fn(() => mockOnlineMediationModel),
sort: jest.fn(() => mockOnlineMediationModel),
exec: jest.fn(() => mockOnlineMediationModel),
deleteMany: jest.fn(() => mockOnlineMediationModel),
};
const mockMailService = {
send: jest.fn(),
getTemplateLocation: jest.fn(),
loadJsonConfig: jest.fn(),
config: {
templates: {
sosTechEMail: {
ejs: 'sosTechEmail.ejs',
json: 'sosTechEmail.json',
},
},
},
};
const mockConfigService = {
isProdConf: jest.fn(),
const ejsSpy = jest.spyOn(ejs, 'renderFile');
const mailerSpy = jest.spyOn(mockMailService, 'send');
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [MailerModule, HttpModule],
providers: [
OnlineMediationService,
{ provide: ConfigurationService, useValue: mockConfigService },
{ provide: MailerService, useValue: mockMailService },
{
provide: getModelToken('OnlineMediation'),
useValue: mockOnlineMediationModel,
},
],
}).compile();
onlineMediationService = module.get<OnlineMediationService>(OnlineMediationService);
});
it('should be defined', () => {
expect(onlineMediationService).toBeDefined();
});
describe('findAll', () => {
it('should findAll entries', async () => {
mockOnlineMediationModel.exec.mockResolvedValueOnce(onlineMediationMockData);
expect(await onlineMediationService.getAll()).toBe(onlineMediationMockData);
});
});
describe('create', () => {
it('should create an entry', async () => {
const res = {
accompanimentType: 'RDV Conseiller Numérique',
dateSlot: { day: 'Vendredi', hours: '15h00-17h00' },
name: 'test',
onlineDemarcheType: ['Démarches Métropolitaines'],
phone: '65 65',
surname: 'teztrfzegfv',
preferredLanguage: 'Français',
};
mockOnlineMediationModel.create.mockResolvedValueOnce(res);
expect(await onlineMediationService.create(res)).toStrictEqual(res);
describe('sendMailAndResetDb', () => {
beforeEach(() => {
jest.clearAllMocks();
});
it('should send the mail and reset db', async () => {
mockConfigService.isProdConf.mockReturnValueOnce(true);
mockOnlineMediationModel.exec.mockResolvedValueOnce(onlineMediationMockData);
mockOnlineMediationModel.deleteMany.mockReturnThis();
mockOnlineMediationModel.exec.mockResolvedValueOnce(onlineMediationMockData.length);
mockMailService.loadJsonConfig.mockReturnValueOnce({ subject: 'Teste Mail' });
ejsSpy.mockResolvedValueOnce('coucou');
const response = await onlineMediationService.sendMailAndResetDb();
expect(mailerSpy).toHaveBeenCalledTimes(1);
expect(response).toBe(onlineMediationMockData.length);
});
it('should send the mail and reset db', async () => {
mockConfigService.isProdConf.mockReturnValueOnce(false);
mockOnlineMediationModel.exec.mockResolvedValueOnce(onlineMediationMockData);
mockOnlineMediationModel.deleteMany.mockReturnThis();
mockOnlineMediationModel.exec.mockResolvedValueOnce(onlineMediationMockData.length);
const response = await onlineMediationService.sendMailAndResetDb();
expect(mailerSpy).toHaveBeenCalledTimes(0);
expect(response).toBe(onlineMediationMockData.length);
});
});