INTO-CPS-Association/DTaaS

View on GitHub
servers/lib/test/unit/files-service.factory.unit.spec.ts

Summary

Maintainability
A
0 mins
Test Coverage
// files-service.factory.spec.ts
import { Test, TestingModule } from '@nestjs/testing';
import { ConfigService } from '@nestjs/config';
import FilesServiceFactory from '../../src/files/services/files-service.factory';
import LocalFilesService from '../../src/files/services/local-files.service';
import { IFilesService } from '../../src/files/interfaces/files.service.interface';

describe('FilesServiceFactory', () => {
  let serviceFactory: FilesServiceFactory;
  let configService: ConfigService;
  let localFilesService: IFilesService;

  beforeEach(async () => {
    localFilesService = new LocalFilesService(configService as ConfigService);

    const module: TestingModule = await Test.createTestingModule({
      providers: [
        FilesServiceFactory,
        { provide: ConfigService, useValue: { get: jest.fn() } },
        { provide: LocalFilesService, useValue: localFilesService },
      ],
    }).compile();

    serviceFactory = module.get<FilesServiceFactory>(FilesServiceFactory);
    configService = module.get<ConfigService>(ConfigService);
  });

  it('should create a local files service when MODE is local', () => {
    jest.spyOn(configService, 'get').mockReturnValue('local');
    expect(serviceFactory.create()).toBe(localFilesService);
  });

  it('should throw an error when MODE is invalid', () => {
    jest.spyOn(configService, 'get').mockReturnValue('invalid');
    expect(() => serviceFactory.create()).toThrow(`Invalid MODE: invalid`);
  });
});