Skip to content
Snippets Groups Projects
onlineMediation.service.spec.ts 4.1 KiB
Newer Older
import { HttpModule } from '@nestjs/axios';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import * as ejs from 'ejs';
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);
    });
  });