public void Should_Add_Costs() { // Arrange int difference = 100; var source = new CostGeneratingEntity { Cost = difference, FuelConsumed = difference, Mileage = difference }; var destination = new CostGeneratingEntity { Cost = 0, FuelConsumed = 0, Mileage = 0 }; // Act destination.AddGeneratedCosts(source); // Assert Assert.True(destination.Cost == difference); Assert.True(destination.FuelConsumed == difference); Assert.True(destination.Mileage == difference); }
public async Task <IActionResult> Update(int id, [FromBody] BookingDto bookingDto) { var oldBooking = await bookingRepository.GetById(id); if (oldBooking == null) { return(NotFound("No such booking.")); } var booking = mapper.Map <Booking>(bookingDto); if (booking.Status == BookingStatus.Completed) { var vehicle = await vehicleRepository.GetById(booking.VehicleId); var vehicleModel = await vehicleModelRepository.GetById(vehicle.VehicleModelId); var employee = await employeeRepository.GetById(booking.EmployeeId); if (oldBooking.Status != booking.Status) { // Status change => Completed. vehicle.Status = VehicleStatus.Available; vehicleModel.AddGeneratedCosts(booking); vehicle.AddGeneratedCosts(booking); employee.AddGeneratedCosts(booking); } else { // Update. // Cost is replaced for booking, delta is propagated to other entities. var deltaCosts = new CostGeneratingEntity { Cost = booking.Cost - oldBooking.Cost, FuelConsumed = booking.FuelConsumed - oldBooking.FuelConsumed, Mileage = booking.Mileage - oldBooking.Mileage }; vehicle.AddGeneratedCosts(deltaCosts); vehicleModel.AddGeneratedCosts(deltaCosts); vehicleModel.AddGeneratedCosts(deltaCosts); } await vehicleRepository.Update(vehicle); await vehicleModelRepository.Update(vehicleModel); await employeeRepository.Update(employee); await bookingRepository.Update(booking); } else { await bookingRepository.Update(booking); } return(Ok()); }
public static void AddGeneratedCosts(this CostGeneratingEntity destination, CostGeneratingEntity source) { if (destination == null || source == null) { return; } destination.Cost += source.Cost; destination.FuelConsumed += source.FuelConsumed; destination.Mileage += source.Mileage; }
public void Should_Handle_Null_Source() { // Arrange var destination = new CostGeneratingEntity { Cost = 0, FuelConsumed = 0, Mileage = 0 }; // Act var ex = Record.Exception(() => { destination.AddGeneratedCosts(null); }); // Assert Assert.Null(ex); }