Exemple #1
0
        public void PackageRateIsAppliedWhenPackageRateIsCheaperThanHourlyRate()
        {
            // Arrange
            var entryDateTime          = new DateTime(2021, 3, 27, 0, 0, 0);
            var exitDateTime           = new DateTime(2021, 3, 29, 0, 0, 0);
            var carParkingTimeInputDto = new CarParkingTimeInputDto {
                EntryTime = entryDateTime, ExitTime = exitDateTime
            };

            var packageRateCalculatorService = Substitute.For <IPackageRateCalculatorService>();

            packageRateCalculatorService.CalculatePackageRate(carParkingTimeInputDto.EntryTime, carParkingTimeInputDto.ExitTime).Returns(new CarParkingRateDto {
                PackageName = Constants.WeekendPackageRateName, TotalPrice = 10.00
            });

            var hourlyRateCalculatorService = Substitute.For <IHourlyRateCalculatorService>();

            hourlyRateCalculatorService.CalculateHourlyRate(carParkingTimeInputDto.EntryTime, carParkingTimeInputDto.ExitTime).Returns(new CarParkingRateDto {
                PackageName = Constants.HourlyRatesName, TotalPrice = 48.00
            });

            var carParkCalculatorService = new CarParkFeesCalculatorService(packageRateCalculatorService, hourlyRateCalculatorService);

            // Act
            var actual = carParkCalculatorService.CalculateCarParkFees(carParkingTimeInputDto);

            // Assert
            packageRateCalculatorService.Received(1).CalculatePackageRate(Arg.Any <DateTime>(), Arg.Any <DateTime>());
            hourlyRateCalculatorService.Received(1).CalculateHourlyRate(Arg.Any <DateTime>(), Arg.Any <DateTime>());
            Assert.IsNotNull(actual);
            Assert.AreEqual(0, actual.Errors.Count);
            Assert.AreEqual(Constants.WeekendPackageRateName, actual.PackageName);
            Assert.AreEqual(10.00, actual.TotalPrice);
        }
Exemple #2
0
        public void ValidationErrorIsReturnedWhenEntryTimeIsNotSupplied()
        {
            // Arrange
            var exitDateTime           = new DateTime(2021, 3, 29, 9, 0, 0);
            var carParkingTimeInputDto = new CarParkingTimeInputDto {
                ExitTime = exitDateTime
            };

            var packageRateCalculatorService = Substitute.For <IPackageRateCalculatorService>();
            var hourlyRateCalculatorService  = Substitute.For <IHourlyRateCalculatorService>();

            var carParkCalculatorService = new CarParkFeesCalculatorService(packageRateCalculatorService, hourlyRateCalculatorService);

            // Act
            var actual = carParkCalculatorService.CalculateCarParkFees(carParkingTimeInputDto);

            // Assert
            Assert.IsNotNull(actual);
            Assert.AreEqual(1, actual.Errors.Count);
            Assert.AreEqual(ErrorCode.CAR_PARKING_ENTRY_TIME_IS_REQUIRED, actual.Errors.First().ErrorCode);
            packageRateCalculatorService.Received(0).CalculatePackageRate(Arg.Any <DateTime>(), Arg.Any <DateTime>());
            hourlyRateCalculatorService.Received(0).CalculateHourlyRate(Arg.Any <DateTime>(), Arg.Any <DateTime>());
        }