import { HttpModule } from '@nestjs/axios'; import { getModelToken } from '@nestjs/mongoose'; import { Test } from '@nestjs/testing'; import * as ejs from 'ejs'; import { appointmentMockData } from '../../test/mock/data/appointment.mock.data'; import { StructuresServiceMock } from '../../test/mock/services/structures.mock.service'; import { UsersServiceMock } from '../../test/mock/services/user.mock.service'; import { MailerModule } from '../mailer/mailer.module'; import { MailerService } from '../mailer/mailer.service'; import { StructuresService } from '../structures/services/structures.service'; import { UsersService } from '../users/services/users.service'; import { AppointmentService } from './appointment.service'; describe('userRegistryService', () => { let appointmentService: AppointmentService; const mockAppointmentModel = { find: jest.fn(() => mockAppointmentModel), create: jest.fn(() => mockAppointmentModel), sort: jest.fn(() => mockAppointmentModel), exec: jest.fn(() => mockAppointmentModel), deleteMany: jest.fn(() => mockAppointmentModel), }; const mockMailService = { send: jest.fn(), getTemplateLocation: jest.fn(), loadJsonConfig: jest.fn(), config: { templates: { appointment: { ejs: 'appointment.ejs', json: 'appointment.json', }, }, }, }; const ejsSpy = jest.spyOn(ejs, 'renderFile'); beforeEach(async () => { const module = await Test.createTestingModule({ imports: [MailerModule, HttpModule], providers: [ AppointmentService, { provide: UsersService, useClass: UsersServiceMock, }, { provide: StructuresService, useClass: StructuresServiceMock, }, { provide: MailerService, useValue: mockMailService }, { provide: getModelToken('Appointment'), useValue: mockAppointmentModel, }, ], }).compile(); appointmentService = module.get<AppointmentService>(AppointmentService); }); it('should be defined', () => { expect(appointmentService).toBeDefined(); }); describe('findAll', () => { it('should findAll entries', async () => { mockAppointmentModel.exec.mockResolvedValueOnce(appointmentMockData); expect(await appointmentService.findAll()).toBe(appointmentMockData); }); }); describe('create', () => { it('should create an entry', async () => { const res = { accompanimentType: 'RDV Conseiller Numérique', name: 'test', onlineDemarcheType: ['Démarches Métropolitaines'], phone: '65 65', surname: 'teztrfzegfv', structureOrientator: { structureName: 'name', structureMail: 'mail@structure.org', structurePhone: '12 34' }, structureRDV: '6093ba0e2ab5775cfc01ed3e', socialWorkerId: '60648b104067f10013d69929', }; mockMailService.loadJsonConfig.mockReturnValueOnce({ subject: 'Teste Mail' }); ejsSpy.mockResolvedValueOnce('coucou'); mockAppointmentModel.create.mockResolvedValueOnce(res); expect(await appointmentService.create(res)).toStrictEqual(res); expect(mockMailService.send).toHaveBeenCalledTimes(1); }); }); });