Skip to content

Commit ddd8ec6

Browse files
committed
Adjusted tests for the changes
1 parent 46f86ee commit ddd8ec6

File tree

2 files changed

+142
-4
lines changed

2 files changed

+142
-4
lines changed

apps/car-rental-backend/src/resources/vehicles/vehicles.service.spec.ts

+133-4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import { VehicleDto } from './dto/vehicle.dto';
1212
import { VehicleBrand } from '../vehicle-brands/entities/vehicle-brand.entity';
1313
import { AddressesService } from '../addresses/addresses.service';
1414
import { Address } from '../addresses/entities/address.entity';
15+
import { AddressDto } from '../addresses/dto/address.dto';
16+
import { UpdateAddressDto } from '../addresses/dto/update-address.dto';
1517

1618
describe('VehiclesService', () => {
1719
let service: VehiclesService;
@@ -193,10 +195,11 @@ describe('VehiclesService', () => {
193195
},
194196
};
195197
const vehicleBrand = { id: 1, name: 'Toyota' } as VehicleBrandDto;
196-
it('should update a vehicle', async () => {
198+
it('should update a vehicle and update the address', async () => {
197199
const id = 1;
198200
const updateVehicleDto: UpdateVehicleDto = {
199201
registrationNumber: 'XYZ789',
202+
brand: 'Toyota',
200203
clientAddress: {
201204
id: 1,
202205
createdAt: new Date('2021-09-01T00:00:00.000Z'),
@@ -208,19 +211,24 @@ describe('VehiclesService', () => {
208211
street: 'ul. Cieszyńska 12',
209212
},
210213
};
214+
215+
const { id: addressId, ...addressData } =
216+
updateVehicleDto.clientAddress as UpdateAddressDto;
217+
const vehicleClientAddress = new Address();
218+
vehicleClientAddress.id = 1;
211219
const vehicle = new Vehicle();
212220
vehicle.id = id;
213221
vehicle.registrationNumber = 'ABC123';
214222
vehicle.vehicleIdentificationNumber = 'ASDFGH1234567890';
215-
vehicle.clientAddress = new Address();
216-
vehicle.clientAddress.id = 1;
223+
vehicle.clientAddress = vehicleClientAddress;
217224

218225
const vehicleBrand = new VehicleBrand();
219226
vehicleBrand.name = 'Toyota';
220227

221228
jest
222229
.spyOn(service, 'findOne')
223-
.mockResolvedValue(vehicle as unknown as VehicleDto);
230+
.mockResolvedValueOnce(vehicle as unknown as VehicleDto)
231+
.mockResolvedValueOnce(mockVehicleDto);
224232
jest
225233
.spyOn(vehicleBrandsService, 'findByName')
226234
.mockResolvedValue(vehicleBrand);
@@ -234,6 +242,63 @@ describe('VehiclesService', () => {
234242
.spyOn(addressesService, 'create')
235243
.mockResolvedValue(vehicle.clientAddress);
236244
jest.spyOn(addressesService, 'remove').mockResolvedValue(undefined);
245+
jest.spyOn(vehiclesRepository, 'find').mockResolvedValue([]);
246+
jest.spyOn(vehiclesRepository, 'save').mockResolvedValue(vehicle);
247+
248+
const result = await service.update(id, updateVehicleDto);
249+
expect(result).toEqual(mockVehicleDto);
250+
expect(vehicleBrandsService.findByName).toHaveBeenCalledWith(
251+
updateVehicleDto.brand
252+
);
253+
expect(service.findOne).toHaveBeenCalledWith(id);
254+
expect(addressesService.findOne).toHaveBeenCalledWith(
255+
(updateVehicleDto.clientAddress as UpdateAddressDto).id
256+
);
257+
expect(addressesService.update).toHaveBeenCalledWith(
258+
(updateVehicleDto.clientAddress as UpdateAddressDto).id,
259+
addressData
260+
);
261+
expect(addressesService.create).not.toHaveBeenCalled();
262+
expect(addressesService.remove).not.toHaveBeenCalled();
263+
});
264+
265+
it('should update a vehicle and create the address', async () => {
266+
const id = 1;
267+
const updateVehicleDto: UpdateVehicleDto = {
268+
registrationNumber: 'XYZ789',
269+
clientAddress: {
270+
city: 'Bielsko-Biała',
271+
administrativeArea: 'Śląskie',
272+
postalCode: '43-300',
273+
country: 'Poland',
274+
street: 'ul. Cieszyńska 12',
275+
},
276+
};
277+
const vehicle = new Vehicle();
278+
vehicle.id = id;
279+
vehicle.registrationNumber = 'ABC123';
280+
vehicle.vehicleIdentificationNumber = 'ASDFGH1234567890';
281+
282+
const clientAddress = new Address();
283+
clientAddress.id = 1;
284+
285+
const vehicleBrand = new VehicleBrand();
286+
vehicleBrand.name = 'Toyota';
287+
288+
jest
289+
.spyOn(service, 'findOne')
290+
.mockResolvedValue(vehicle as unknown as VehicleDto);
291+
jest
292+
.spyOn(vehicleBrandsService, 'findByName')
293+
.mockResolvedValue(vehicleBrand);
294+
jest.spyOn(addressesService, 'findOne').mockResolvedValue(undefined);
295+
jest
296+
.spyOn(addressesService, 'update')
297+
.mockResolvedValue(vehicle.clientAddress);
298+
jest
299+
.spyOn(addressesService, 'create')
300+
.mockResolvedValue(clientAddress);
301+
jest.spyOn(addressesService, 'remove').mockResolvedValue(undefined);
237302
jest
238303
.spyOn(vehicleBrandsService, 'findByName')
239304
.mockResolvedValue(vehicleBrand);
@@ -243,6 +308,65 @@ describe('VehiclesService', () => {
243308

244309
const result = await service.update(id, updateVehicleDto);
245310
expect(result).toEqual(mockVehicleDto);
311+
expect(vehicleBrandsService.findByName).not.toHaveBeenCalledWith();
312+
expect(service.findOne).toHaveBeenCalledWith(id);
313+
expect(addressesService.findOne).not.toHaveBeenCalled();
314+
expect(addressesService.update).not.toHaveBeenCalled();
315+
expect(addressesService.create).toHaveBeenCalledWith(
316+
updateVehicleDto.clientAddress
317+
);
318+
expect(addressesService.remove).not.toHaveBeenCalled();
319+
});
320+
321+
it('should update a vehicle and remove the address', async () => {
322+
const id = 1;
323+
const updateVehicleDto: UpdateVehicleDto = {
324+
registrationNumber: 'XYZ789',
325+
};
326+
const vehicleClientAddress = new Address();
327+
vehicleClientAddress.id = 1;
328+
const vehicle = new Vehicle();
329+
vehicle.id = id;
330+
vehicle.registrationNumber = 'ABC123';
331+
vehicle.vehicleIdentificationNumber = 'ASDFGH1234567890';
332+
vehicle.clientAddress = vehicleClientAddress;
333+
334+
const vehicleBrand = new VehicleBrand();
335+
vehicleBrand.name = 'Toyota';
336+
337+
jest
338+
.spyOn(service, 'findOne')
339+
.mockResolvedValue(vehicle as unknown as VehicleDto);
340+
jest
341+
.spyOn(vehicleBrandsService, 'findByName')
342+
.mockResolvedValue(vehicleBrand);
343+
jest
344+
.spyOn(addressesService, 'findOne')
345+
.mockResolvedValue(vehicle.clientAddress);
346+
jest
347+
.spyOn(addressesService, 'update')
348+
.mockResolvedValue(vehicle.clientAddress);
349+
jest
350+
.spyOn(addressesService, 'create')
351+
.mockResolvedValue(vehicle.clientAddress);
352+
jest.spyOn(addressesService, 'remove').mockResolvedValue(undefined);
353+
jest
354+
.spyOn(vehicleBrandsService, 'findByName')
355+
.mockResolvedValue(vehicleBrand);
356+
jest.spyOn(service, 'findOne').mockResolvedValue(mockVehicleDto);
357+
jest.spyOn(vehiclesRepository, 'find').mockResolvedValue([vehicle]);
358+
jest.spyOn(vehiclesRepository, 'save').mockResolvedValue(vehicle);
359+
360+
const result = await service.update(id, updateVehicleDto);
361+
expect(result).toEqual(mockVehicleDto);
362+
expect(vehicleBrandsService.findByName).not.toHaveBeenCalledWith();
363+
expect(service.findOne).toHaveBeenCalledWith(id);
364+
expect(addressesService.findOne).not.toHaveBeenCalled();
365+
expect(addressesService.update).not.toHaveBeenCalled();
366+
expect(addressesService.create).not.toHaveBeenCalled();
367+
expect(addressesService.remove).toHaveBeenCalledWith(
368+
vehicle.clientAddress.id
369+
);
246370
});
247371

248372
it('should throw an error if vehicle not found', async () => {
@@ -297,10 +421,15 @@ describe('VehiclesService', () => {
297421
it('should remove a vehicle', async () => {
298422
const id = 1;
299423
const vehicle = new VehicleDto();
424+
vehicle.clientAddress = { id: 1 } as AddressDto;
300425
jest.spyOn(service, 'findOne').mockResolvedValue(vehicle);
301426
jest.spyOn(vehiclesRepository, 'delete').mockResolvedValue(undefined);
427+
jest.spyOn(addressesService, 'remove').mockResolvedValue();
302428

303429
await service.remove(id);
430+
expect(addressesService.remove).toHaveBeenCalledWith(
431+
vehicle.clientAddress.id
432+
);
304433
expect(vehiclesRepository.delete).toHaveBeenCalledWith(id);
305434
});
306435

apps/car-rental-backend/src/resources/vehicles/vehicles.service.ts

+9
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,15 @@ export class VehiclesService {
241241
);
242242
}
243243
this.logger.log(`Removing vehicle with ${id}`);
244+
if (vehicle.clientAddress) {
245+
this.logger.log(
246+
`Removing client address with id ${vehicle.clientAddress.id}`
247+
);
248+
await this.addressesService.remove(vehicle.clientAddress.id);
249+
this.logger.log(
250+
`Client address with id ${vehicle.clientAddress.id} removed`
251+
);
252+
}
244253
await this.vehiclesRepository.delete(id);
245254
this.logger.log(`Vehicle with id ${id} removed`);
246255
}

0 commit comments

Comments
 (0)