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); }
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>()); }