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);
        }
示例#2
0
        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);
        }