Unit tests for the update-ad service
This commit is contained in:
		
							parent
							
								
									f6c3204708
								
							
						
					
					
						commit
						5aa4d9e568
					
				| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
import { DateTimeTransformerPort } from '@modules/ad/core/application/ports/datetime-transformer.port';
 | 
			
		||||
 | 
			
		||||
export function mockInputDateTimeTransformer(): DateTimeTransformerPort {
 | 
			
		||||
  return {
 | 
			
		||||
    fromDate: jest.fn(),
 | 
			
		||||
    toDate: jest.fn(),
 | 
			
		||||
    day: jest.fn(),
 | 
			
		||||
    time: jest.fn(),
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,18 +1,17 @@
 | 
			
		|||
import { Test, TestingModule } from '@nestjs/testing';
 | 
			
		||||
import { AggregateID, ConflictException } from '@mobicoop/ddd-library';
 | 
			
		||||
import {
 | 
			
		||||
  AD_REPOSITORY,
 | 
			
		||||
  INPUT_DATETIME_TRANSFORMER,
 | 
			
		||||
} from '@modules/ad/ad.di-tokens';
 | 
			
		||||
import { WaypointDto } from '@modules/ad/interface/grpc-controllers/dtos/waypoint.dto';
 | 
			
		||||
import { CreateAdRequestDto } from '@modules/ad/interface/grpc-controllers/dtos/create-ad.request.dto';
 | 
			
		||||
import { AggregateID } from '@mobicoop/ddd-library';
 | 
			
		||||
import { AdEntity } from '@modules/ad/core/domain/ad.entity';
 | 
			
		||||
import { ConflictException } from '@mobicoop/ddd-library';
 | 
			
		||||
import { Frequency } from '@modules/ad/core/domain/ad.types';
 | 
			
		||||
import { CreateAdService } from '@modules/ad/core/application/commands/create-ad/create-ad.service';
 | 
			
		||||
import { CreateAdCommand } from '@modules/ad/core/application/commands/create-ad/create-ad.command';
 | 
			
		||||
import { CreateAdService } from '@modules/ad/core/application/commands/create-ad/create-ad.service';
 | 
			
		||||
import { AdEntity } from '@modules/ad/core/domain/ad.entity';
 | 
			
		||||
import { AdAlreadyExistsException } from '@modules/ad/core/domain/ad.errors';
 | 
			
		||||
import { DateTimeTransformerPort } from '@modules/ad/core/application/ports/datetime-transformer.port';
 | 
			
		||||
import { Frequency } from '@modules/ad/core/domain/ad.types';
 | 
			
		||||
import { CreateAdRequestDto } from '@modules/ad/interface/grpc-controllers/dtos/create-ad.request.dto';
 | 
			
		||||
import { WaypointDto } from '@modules/ad/interface/grpc-controllers/dtos/waypoint.dto';
 | 
			
		||||
import { Test, TestingModule } from '@nestjs/testing';
 | 
			
		||||
import { mockInputDateTimeTransformer } from '../ad.mocks';
 | 
			
		||||
 | 
			
		||||
const originWaypoint: WaypointDto = {
 | 
			
		||||
  position: 0,
 | 
			
		||||
| 
						 | 
				
			
			@ -64,13 +63,6 @@ const mockAdRepository = {
 | 
			
		|||
    }),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const mockInputDateTimeTransformer: DateTimeTransformerPort = {
 | 
			
		||||
  fromDate: jest.fn(),
 | 
			
		||||
  toDate: jest.fn(),
 | 
			
		||||
  day: jest.fn(),
 | 
			
		||||
  time: jest.fn(),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
describe('create-ad.service', () => {
 | 
			
		||||
  let createAdService: CreateAdService;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +75,7 @@ describe('create-ad.service', () => {
 | 
			
		|||
        },
 | 
			
		||||
        {
 | 
			
		||||
          provide: INPUT_DATETIME_TRANSFORMER,
 | 
			
		||||
          useValue: mockInputDateTimeTransformer,
 | 
			
		||||
          useValue: mockInputDateTimeTransformer(),
 | 
			
		||||
        },
 | 
			
		||||
        CreateAdService,
 | 
			
		||||
      ],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,71 @@
 | 
			
		|||
import {
 | 
			
		||||
  AD_REPOSITORY,
 | 
			
		||||
  INPUT_DATETIME_TRANSFORMER,
 | 
			
		||||
} from '@modules/ad/ad.di-tokens';
 | 
			
		||||
import { UpdateAdCommand } from '@modules/ad/core/application/commands/update-ad/update-ad.command';
 | 
			
		||||
import { UpdateAdService } from '@modules/ad/core/application/commands/update-ad/update-ad.service';
 | 
			
		||||
import { AdEntity } from '@modules/ad/core/domain/ad.entity';
 | 
			
		||||
import { Status } from '@modules/ad/core/domain/ad.types';
 | 
			
		||||
import { EventEmitter2 } from '@nestjs/event-emitter';
 | 
			
		||||
import { Test, TestingModule } from '@nestjs/testing';
 | 
			
		||||
import { mockInputDateTimeTransformer } from '../ad.mocks';
 | 
			
		||||
import { punctualCreateAdRequest } from '../interface/ad.fixtures';
 | 
			
		||||
import { punctualPassengerCreateAdProps } from './ad.fixtures';
 | 
			
		||||
 | 
			
		||||
const mockAdRepository = {
 | 
			
		||||
  findOneById: jest.fn().mockImplementation(
 | 
			
		||||
    async (id) =>
 | 
			
		||||
      new AdEntity({
 | 
			
		||||
        id,
 | 
			
		||||
        props: { ...punctualPassengerCreateAdProps(), status: Status.VALID },
 | 
			
		||||
      }),
 | 
			
		||||
  ),
 | 
			
		||||
  update: jest.fn(),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const mockEventEmitter = {
 | 
			
		||||
  emitAsync: jest.fn(),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
describe('create-ad.service', () => {
 | 
			
		||||
  let updateAdService: UpdateAdService;
 | 
			
		||||
 | 
			
		||||
  beforeAll(async () => {
 | 
			
		||||
    const module: TestingModule = await Test.createTestingModule({
 | 
			
		||||
      providers: [
 | 
			
		||||
        {
 | 
			
		||||
          provide: AD_REPOSITORY,
 | 
			
		||||
          useValue: mockAdRepository,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          provide: INPUT_DATETIME_TRANSFORMER,
 | 
			
		||||
          useValue: mockInputDateTimeTransformer(),
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          provide: EventEmitter2,
 | 
			
		||||
          useValue: mockEventEmitter,
 | 
			
		||||
        },
 | 
			
		||||
        UpdateAdService,
 | 
			
		||||
      ],
 | 
			
		||||
    }).compile();
 | 
			
		||||
 | 
			
		||||
    updateAdService = module.get<UpdateAdService>(UpdateAdService);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should be defined', () => {
 | 
			
		||||
    expect(updateAdService).toBeDefined();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('execute', () => {
 | 
			
		||||
    it('should update the ad in the repository and emit an event', async () => {
 | 
			
		||||
      const command = new UpdateAdCommand({
 | 
			
		||||
        adId: '200d61a8-d878-4378-a609-c19ea71633d2',
 | 
			
		||||
        ...punctualCreateAdRequest(),
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      await updateAdService.execute(command);
 | 
			
		||||
      expect(mockAdRepository.update).toHaveBeenCalled();
 | 
			
		||||
      expect(mockEventEmitter.emitAsync).toHaveBeenCalled();
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
		Loading…
	
		Reference in New Issue