Skip to content
Snippets Groups Projects
Select Git revision
  • 53eff3dd481681d55fed19616431cdadf6ece4c1
  • master default protected
  • feat_add_nmpi-backend
  • experimental_rel protected
  • lab-jupyterlab4 protected
  • fix_bazel_for_spinnaker
  • add-nestml-tests
  • feat-add_graphviz_wf
  • snudda_2.2.2
  • ebrains-25-02 protected
  • ebrains-24-04 protected
  • feat_add_py-jaxley
  • feat_JUSUF_image protected
  • fix-k8s-job-cache-dir
  • test_open3d
  • add-music
  • add_gcc-spinnaker
  • disable-view
  • test_quiggeldy_service
  • image_build
  • update-readme
  • v24.04
  • v25.02
  • v23.09
  • v23.06
  • v23.02
  • v22.10
  • v22.07
28 results

package.py

Blame
  • experiments.resolver.spec.ts 8.02 KiB
    import { Test, TestingModule } from '@nestjs/testing';
    import { ExperimentStatus } from '../engine/models/experiment/experiment.model';
    import { User } from '../users/models/user.model';
    import { ENGINE_SERVICE } from '../engine/engine.constants';
    import { IEngineService } from '../engine/engine.interfaces';
    import { ExperimentsResolver } from './experiments.resolver';
    import { ExperimentsService } from './experiments.service';
    import { ExperimentCreateInput } from './models/input/experiment-create.input';
    import { ExperimentEditInput } from './models/input/experiment-edit.input';
    
    type MockEngineService = Partial<Record<keyof IEngineService, jest.Mock>>;
    type MockExperimentService = Partial<
      Record<keyof ExperimentsService, jest.Mock>
    >;
    
    const createEngineService = (): MockEngineService => ({
      getDomains: jest.fn(),
      getAlgorithms: jest.fn(),
      createExperiment: jest.fn(),
      runExperiment: jest.fn(),
      getExperiment: jest.fn(),
      editExperiment: jest.fn(),
      listExperiments: jest.fn(),
      removeExperiment: jest.fn(),
    });
    
    const createExperimentsService = (): MockExperimentService => ({
      findAll: jest.fn(),
      findOne: jest.fn(),
      dataToExperiment: jest.fn(),
      create: jest.fn(),
      update: jest.fn(),
      remove: jest.fn(),
    });
    
    describe('ExperimentsResolver', () => {
      let resolver: ExperimentsResolver;
      let engineService: MockEngineService;
      let experimentsService: MockExperimentService;
    
      beforeEach(async () => {
        const module: TestingModule = await Test.createTestingModule({
          providers: [
            ExperimentsResolver,
            { provide: ExperimentsService, useValue: createExperimentsService() },
            {
              provide: ENGINE_SERVICE,
              useValue: createEngineService(),
            },
          ],
        }).compile();
    
        engineService = module.get<MockEngineService>(ENGINE_SERVICE);
        experimentsService = module.get<ExperimentsService>(
          ExperimentsService,
        ) as unknown as MockExperimentService;
        resolver = module.get<ExperimentsResolver>(ExperimentsResolver);
      });
    
      it('should be defined', () => {
        expect(resolver).toBeDefined();
      });
    
      describe('experimentList', () => {
        describe('when engine method exist', () => {
          it('should call engine method', async () => {
            const request: any = jest.fn();
            engineService.listExperiments.mockReturnValue({});
            await resolver.experimentList(0, '', request);
    
            expect(engineService.listExperiments.mock.calls.length).toBeGreaterThan(
              0,
            );
          });
        });
    
        describe('when engine method does not exist', () => {
          it('should call service method', async () => {
            const request: any = jest.fn();
            engineService.listExperiments = undefined;
            experimentsService.findAll.mockReturnValue([[], 9]);
            await resolver.experimentList(0, '', request);
    
            expect(experimentsService.findAll.mock.calls.length).toBeGreaterThan(0);
          });
        });
      });
    
      describe('experiment', () => {
        describe('when engine method exist', () => {
          it('should call engine method', async () => {
            const request: any = jest.fn();
            const user: User = {
              id: 'dummyUser',
              username: 'test',
            };
            await resolver.experiment('test', request, user);
    
            expect(experimentsService.findOne.mock.calls.length).toBe(0);
            expect(engineService.getExperiment.mock.calls.length).toBeGreaterThan(
              0,
            );
          });
        });
    
        describe('when engine method does not exist', () => {
          it('should call service method', async () => {
            const request: any = jest.fn();
            const user: User = {
              id: 'dummyUser',
              username: 'test',
            };
            engineService.getExperiment = undefined;
            await resolver.experiment('test', request, user);
    
            expect(experimentsService.findOne.mock.calls.length).toBeGreaterThan(0);
          });
        });
      });
    
      describe('createExperiment', () => {
        describe('when engine method exist', () => {
          it('should call engine method', async () => {
            const request: any = jest.fn();
            const data: ExperimentCreateInput =
              {} as unknown as ExperimentCreateInput;
            const user: User = {
              id: 'dummyUser',
              username: 'test',
            };
            await resolver.createExperiment(request, user, data, true);
    
            expect(experimentsService.create.mock.calls.length).toBe(0);
            expect(
              engineService.createExperiment.mock.calls.length,
            ).toBeGreaterThan(0);
          });
        });
    
        describe('when engine method does not exist', () => {
          it('should call service method', async () => {
            const request: any = jest.fn();
            const data: ExperimentCreateInput =
              {} as unknown as ExperimentCreateInput;
            const user: User = {
              id: 'dummyUser',
              username: 'test',
            };
            engineService.createExperiment = undefined;
            engineService.runExperiment.mockResolvedValue([]);
            experimentsService.create.mockReturnValue({ id: 'test' });
            await resolver.createExperiment(request, user, data, false);
    
            expect(experimentsService.create.mock.calls.length).toBeGreaterThan(0);
          });
    
          it('should only call runExperiment if transient', async () => {
            const request: any = jest.fn();
            const data: ExperimentCreateInput =
              {} as unknown as ExperimentCreateInput;
            const user: User = {
              id: 'dummyUser',
              username: 'test',
            };
            engineService.createExperiment = undefined;
            engineService.runExperiment.mockResolvedValue([]);
            experimentsService.create.mockReturnValue({ id: 'test' });
            const result = await resolver.createExperiment(
              request,
              user,
              data,
              true,
            );
    
            expect(engineService.runExperiment.mock.calls.length).toBeGreaterThan(
              0,
            );
            expect(result.status).toBe(ExperimentStatus.SUCCESS);
          });
        });
      });
    
      describe('editExperiment', () => {
        describe('when engine method exist', () => {
          it('should call engine method', async () => {
            const request: any = jest.fn();
            const data: ExperimentEditInput = {} as unknown as ExperimentEditInput;
            const user: User = {
              id: 'dummyUser',
              username: 'test',
            };
            await resolver.editExperiment(request, 'test', data, user);
    
            expect(experimentsService.update.mock.calls.length).toBe(0);
            expect(engineService.editExperiment.mock.calls.length).toBeGreaterThan(
              0,
            );
          });
        });
    
        describe('when engine method does not exist', () => {
          it('should call service method', async () => {
            const request: any = jest.fn();
            const data: ExperimentEditInput = {} as unknown as ExperimentEditInput;
            const user: User = {
              id: 'dummyUser',
              username: 'test',
            };
            engineService.editExperiment = undefined;
            await resolver.editExperiment(request, 'test', data, user);
    
            expect(experimentsService.update.mock.calls.length).toBeGreaterThan(0);
          });
        });
      });
    
      describe('removeExperiment', () => {
        describe('when engine method exist', () => {
          it('should call engine method', async () => {
            const request: any = jest.fn();
            const user: User = {
              id: 'dummyUser',
              username: 'test',
            };
            await resolver.removeExperiment('test', request, user);
    
            expect(experimentsService.remove.mock.calls.length).toBe(0);
            expect(
              engineService.removeExperiment.mock.calls.length,
            ).toBeGreaterThan(0);
          });
        });
    
        describe('when engine method does not exist', () => {
          it('should call service method', async () => {
            const request: any = jest.fn();
            const user: User = {
              id: 'dummyUser',
              username: 'test',
            };
            engineService.removeExperiment = undefined;
            await resolver.removeExperiment('test', request, user);
    
            expect(experimentsService.remove.mock.calls.length).toBeGreaterThan(0);
          });
        });
      });
    });