public async Task <double> CalculateTotalStayAsync(LodgmentOptionsModel lodgmentOptionsModel, Lodgment lodgment) { await Task.Yield(); double totalPrice = 0; if (lodgmentOptionsModel != null) { ValidateLodgmentDatesRange(lodgmentOptionsModel); var timeSpan = new TimeSpan(lodgmentOptionsModel.CheckOut - lodgmentOptionsModel.CheckIn); double price = 0; if (HasGuests(lodgmentOptionsModel)) { price = CalculatePriceByGuests(lodgmentOptionsModel, lodgment.Price); } else { price = CalculatePriceWithoutGuests(lodgment.Price); } totalPrice = price * Math.Floor(timeSpan.TotalDays); } return(totalPrice); }
public void BeforeEach() { InitializeComponents(); fixture.Customize <Lodgment>(c => c .Without(x => x.Spot) .Without(y => y.Reviews) .Without(y => y.Bookings)); fixture.Customize <Spot>(c => c .Without(x => x.Region)); fixture.Customize <CategorySpot>(c => c .Without(x => x.Category) .Without(x => x.Spot)); moqService = new Mock <ISpotsService>(MockBehavior.Strict); controller = new SpotsController(moqService.Object); controller.ControllerContext = controllerContext; expectedLodgment = fixture.Create <Lodgment>(); expectedLodgments = fixture.CreateMany <Lodgment>(); lodgment = fixture.Create <Lodgment>(); lodgmentOptions = fixture.Create <LodgmentOptionsModel>(); paginatedLodgments = fixture.Create <PaginatedModel <Lodgment> >(); paging = fixture.Create <PagingModel>(); lodgmentId = fixture.Create <int>(); spotId = fixture.Create <int>(); expectedSpot = fixture.Create <Spot>(); expectedSpots = fixture.CreateMany <Spot>(); paginatedSpots = fixture.Create <PaginatedModel <Spot> >(); }
private double CalculatePriceByGuests(LodgmentOptionsModel lodgmentOptionsModel, double lodgmentPrice) { var price = GetTotalPrice(lodgmentOptionsModel.AmountOfAdults, lodgmentPrice, AdultsDiscountPercentage); price += GetTotalPrice(lodgmentOptionsModel.AmountOfUnderAge, lodgmentPrice, UngerAgeDiscountPercentage); price += GetTotalPrice(lodgmentOptionsModel.AmountOfBabies, lodgmentPrice, BabiesDiscountPercentage); price += CalculatePriceForVeterans(lodgmentOptionsModel, lodgmentPrice); return(price); }
private bool HasGuests(LodgmentOptionsModel lodgmentOptionsModel) { var hasGuests = false; if (lodgmentOptionsModel != null) { hasGuests = lodgmentOptionsModel.TotalGuests > 0; } return(hasGuests); }
private void ValidateLodgmentDatesRange(LodgmentOptionsModel lodgmentOptionsModel) { if (lodgmentOptionsModel.CheckIn == 0 || lodgmentOptionsModel.CheckOut == 0) { throw new ArgumentException("CheckIn and CheckOut date must be defined"); } if (lodgmentOptionsModel.CheckOut < lodgmentOptionsModel.CheckIn) { throw new ArgumentException("CheckOut date can't be earlier than CheckIn date"); } }
private async Task <bool> CheckLodgmentOptionsValid(LodgmentOptionsModel lodgmentOptionsModel) { await Task.Yield(); bool isValid = lodgmentOptionsModel != null; if (isValid) { isValid = lodgmentOptionsModel.CheckIn > 0 || lodgmentOptionsModel.CheckOut > 0; } return(isValid); }
public async Task <IActionResult> GetLodgmentAsync(int id, [FromQuery] LodgmentOptionsModel lodgmentOptionsModel = null) { try { var lodgment = await service.GetLodgmentByIdAsync(id, lodgmentOptionsModel); return(Ok(lodgment)); } catch (Exception ex) { var exceptionResponse = GetExceptionResponse(ex, Request); return(exceptionResponse); } }
public async Task <Lodgment> GetLodgmentByIdAsync(int id, LodgmentOptionsModel lodgmentOptionsModel = null) { var lodgment = await repository.GetLodgmentByIdAsync(id); if (lodgment != null) { var isValid = await CheckLodgmentOptionsValid(lodgmentOptionsModel); if (isValid) { lodgment.TotalPrice = await lodgmentCalculator.CalculateTotalStayAsync(lodgmentOptionsModel, lodgment); } } return(lodgment); }
public async Task <IActionResult> GetLodgmentsInSpotAsync(int id, [FromQuery] LodgmentOptionsModel lodgmentOptionsModel, [FromQuery] PagingModel pagingModel) { try { PaginatedModel <Lodgment> paginatedLodgments = await service.GetLodgmentsInSpotAsync(id, lodgmentOptionsModel, pagingModel); return(Ok(paginatedLodgments)); } catch (Exception ex) { var exceptionResponse = GetExceptionResponse(ex, Request); return(exceptionResponse); } }
public void BeforeEach() { fixture = new Fixture().Customize(new AutoMoqCustomization()); fixture.Customize <Lodgment>(c => c .Without(x => x.Spot) .Without(x => x.Bookings) .Without(x => x.Reviews)); lodgment = fixture.Create <Lodgment>(); nowDateTimeTicks = DateTime.Now.Ticks; stayDays = fixture.Create <int>(); lodgmentOptions = new LodgmentOptionsModel { CheckIn = nowDateTimeTicks, CheckOut = nowDateTimeTicks + (TimeSpan.TicksPerDay * stayDays), }; lodgmentCalculator = new LodgmentCalculator(); }
private double CalculatePriceForVeterans(LodgmentOptionsModel lodgmentOptionsModel, double lodgmentPrice) { double price = 0; if (lodgmentOptionsModel.AmountOfVeterans > 0) { var eligibleVeterans = GetEligibleVeteransAmount(lodgmentOptionsModel); if (eligibleVeterans > 0) { price += GetTotalPrice(eligibleVeterans, lodgmentPrice, VeteransDiscountPercentage); } var nonEligibleVeterans = lodgmentOptionsModel.AmountOfVeterans - eligibleVeterans; price += GetTotalPrice(nonEligibleVeterans, lodgmentPrice, NoDiscountPercentage); } return(price); }
public void BeforeEach() { fixture = new Fixture().Customize(new AutoMoqCustomization()); fixture.Customize <Spot>(c => c .Without(x => x.Region)); fixture.Customize <Lodgment>(c => c .Without(x => x.Spot) .Without(y => y.Bookings) .Without(y => y.Reviews)); fixture.Customize <CategorySpot>(c => c .Without(x => x.Category) .Without(x => x.Spot)); moqRepository = new Mock <ISpotsRepository>(MockBehavior.Strict); moqLodgmentsService = new Mock <ILodgmentsService>(MockBehavior.Strict); moqStorageService = new Mock <IStorageService>(MockBehavior.Strict); moqReportsService = new Mock <IReportsService>(MockBehavior.Strict); expectedSpot = fixture.Create <Spot>(); spot = fixture.Create <Spot>(); spotId = fixture.Create <int>(); existSpot = fixture.Create <Spot>(); existCategory = fixture.Create <Category>(); expectedCategorySpot = fixture.Create <CategorySpot>(); existRegion = fixture.Create <Region>(); region = fixture.Create <Region>(); expectedLodgment = fixture.Create <Lodgment>(); lodgment = fixture.Create <Lodgment>(); expectedLodgments = fixture.CreateMany <Lodgment>(); expectedSpots = fixture.CreateMany <Spot>(); lodgmentId = fixture.Create <int>(); paging = fixture.Create <PagingModel>(); lodgmentOptions = new LodgmentOptionsModel() { CheckIn = DateTime.Now.Ticks, CheckOut = DateTime.Now.Ticks + (TimeSpan.TicksPerDay * fixture.Create <int>()), AmountOfAdults = fixture.Create <byte>(), AmountOfUnderAge = fixture.Create <byte>(), AmountOfBabies = fixture.Create <byte>() }; expectedPaginatedLodgments = fixture.Create <PaginatedModel <Lodgment> >(); expectedPaginatedSpots = fixture.Create <PaginatedModel <Spot> >(); service = new SpotsService(moqRepository.Object, moqLodgmentsService.Object, moqStorageService.Object, moqReportsService.Object); paginatedSpots = fixture.Create <PaginatedModel <Spot> >(); }
public void BeforeEach() { fixture = new Fixture().Customize(new AutoMoqCustomization()); fixture.Customize <Spot>(c => c .Without(x => x.Region)); fixture.Customize <Lodgment>(c => c .Without(x => x.Spot) .Without(y => y.Bookings) .Without(y => y.Reviews)); fixture.Customize <CategorySpot>(c => c .Without(x => x.Category) .Without(x => x.Spot)); moqRepository = new Mock <ILodgmentsRepository>(MockBehavior.Strict); moqSpotsService = new Mock <ISpotsService>(MockBehavior.Strict); moqLodgmentCalculator = new Mock <ILodgmentCalculator>(MockBehavior.Strict); moqStorageService = new Mock <IStorageService>(MockBehavior.Strict); moqReviewsService = new Mock <IReviewsService>(MockBehavior.Strict); moqBookingsService = new Mock <IBookingsService>(MockBehavior.Strict); expectedLodgment = fixture.Create <Lodgment>(); expectedLodgment.IsActive = true; expectedLodgment.IsDeleted = false; lodgment = fixture.Create <Lodgment>(); existLodgment = fixture.Create <Lodgment>(); existSpot = fixture.Create <Spot>(); spot = fixture.Create <Spot>(); spotId = fixture.Create <int>(); lodgmentId = fixture.Create <int>(); totalStayPrice = fixture.Create <double>(); paging = fixture.Create <PagingModel>(); fileModel = fixture.Create <FileModel>(); expectedUrls = fixture.CreateMany <string>().ToList(); lodgmentOptions = new LodgmentOptionsModel() { CheckIn = DateTime.Now.Ticks, CheckOut = DateTime.Now.Ticks + (TimeSpan.TicksPerDay * fixture.Create <int>()), AmountOfAdults = fixture.Create <byte>(), AmountOfUnderAge = fixture.Create <byte>(), AmountOfBabies = fixture.Create <byte>() }; expectedPaginatedLodgments = fixture.Create <PaginatedModel <Lodgment> >(); service = new LodgmentsService(moqRepository.Object, moqLodgmentCalculator.Object, moqStorageService.Object, moqReviewsService.Object, moqBookingsService.Object); }
public void BeforeEach() { InitializeComponents(); fixture.Customize <Lodgment>(c => c .Without(x => x.Spot) .Without((y => y.Reviews))); fixture.Customize <BookingStatus>(c => c .Without(x => x.Bookings)); fixture.Customize <Booking>(c => c .Without(b => b.Lodgment)); moqService = new Mock <ILodgmentsService>(MockBehavior.Strict); controller = new LodgmentsController(moqService.Object); controller.ControllerContext = controllerContext; expectedLodgment = fixture.Create <Lodgment>(); lodgmentOptions = fixture.Create <LodgmentOptionsModel>(); lodgmentId = fixture.Create <int>(); bookingConfirmationModel = fixture.Create <BookingConfirmationModel>(); expectedBooking = fixture.Create <Booking>(); expectedLodgments = fixture.CreateMany <Lodgment>(); paginatedLodgments = fixture.Create <PaginatedModel <Lodgment> >(); paging = fixture.Create <PagingModel>(); fileModel = fixture.Create <FileModel>(); expectedUrls = fixture.CreateMany <string>().ToList(); }
private byte GetEligibleVeteransAmount(LodgmentOptionsModel lodgmentOptionsModel) { var amountOfVeterans = Convert.ToByte(Math.Floor((decimal)(lodgmentOptionsModel.AmountOfVeterans / 2))); return(amountOfVeterans); }
public async Task <PaginatedModel <Lodgment> > GetLodgmentsInSpotAsync(int id, LodgmentOptionsModel lodgmentOptionsModel, PagingModel pagingModel) { var paginatedLodgments = await lodgmentsService.GetLodgmentsAsync(pagingModel, lodgmentOptionsModel, id); return(paginatedLodgments); }