Skip to content
Snippets Groups Projects
appointment.service.spec.ts 3.19 KiB
Newer Older
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);