Пример #1
0
        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);
        }
Пример #2
0
 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> >();
 }
Пример #3
0
        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);
        }
Пример #4
0
        private bool HasGuests(LodgmentOptionsModel lodgmentOptionsModel)
        {
            var hasGuests = false;

            if (lodgmentOptionsModel != null)
            {
                hasGuests = lodgmentOptionsModel.TotalGuests > 0;
            }

            return(hasGuests);
        }
Пример #5
0
        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");
            }
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
            }
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
            }
        }
Пример #10
0
 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();
 }
Пример #11
0
        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);
        }
Пример #12
0
 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> >();
 }
Пример #13
0
 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);
 }
Пример #14
0
 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();
 }
Пример #15
0
        private byte GetEligibleVeteransAmount(LodgmentOptionsModel lodgmentOptionsModel)
        {
            var amountOfVeterans = Convert.ToByte(Math.Floor((decimal)(lodgmentOptionsModel.AmountOfVeterans / 2)));

            return(amountOfVeterans);
        }
Пример #16
0
        public async Task <PaginatedModel <Lodgment> > GetLodgmentsInSpotAsync(int id, LodgmentOptionsModel lodgmentOptionsModel,
                                                                               PagingModel pagingModel)
        {
            var paginatedLodgments = await lodgmentsService.GetLodgmentsAsync(pagingModel,
                                                                              lodgmentOptionsModel, id);

            return(paginatedLodgments);
        }