public void Eval_should_be_allowed_when_deadline_conditions_met(int deadlineDay, int tommorowDay, PassedDeadlineOffersMode deadlineMode)
        {
            var settings         = GetSettings(AprMode.DisplayOnly, deadlineMode);
            var deadlineDate     = new DateTime(2021, 1, deadlineDay);
            var tommorowDate     = new DateTime(2021, 1, tommorowDay);
            var deadline         = GetDeadline(deadlineDate);
            var dateTimeProvider = GetProvider(tommorowDate);
            var roomSet          = GetRoomContractSet(deadline, false);

            var allowed = RoomContractSetSettingsChecker.IsEvaluationAllowed(roomSet, deadlineDate.AddDays(1), settings, dateTimeProvider);

            Assert.True(allowed);
        }
        public void Display_should_be_allowed_when_apr_conditions_met(AprMode aprMode, bool isRoomSetApr)
        {
            var settings         = GetSettings(aprMode, PassedDeadlineOffersMode.DisplayOnly);
            var deadlineDate     = new DateTime(2021, 1, 21);
            var tommorowDate     = new DateTime(2021, 1, 20);
            var deadline         = GetDeadline(deadlineDate);
            var dateTimeProvider = GetProvider(tommorowDate);
            var roomSet          = GetRoomContractSet(deadline, isRoomSetApr);

            var allowed = RoomContractSetSettingsChecker.IsDisplayAllowed(roomSet, deadlineDate.AddDays(1), settings, dateTimeProvider);

            Assert.True(allowed);
        }
        [InlineData(21, 20, PassedDeadlineOffersMode.Hide, AprMode.Hide, true)]        // Apr not ok, deadline ok
        public void Display_should_not_be_allowed_when_any_condition_not_met(int deadlineDay, int tommorowDay, PassedDeadlineOffersMode deadlineMode,
                                                                             AprMode aprMode, bool isRoomSetApr)
        {
            var settings         = GetSettings(aprMode, deadlineMode);
            var deadlineDate     = new DateTime(2021, 1, deadlineDay);
            var tommorowDate     = new DateTime(2021, 1, tommorowDay);
            var deadline         = GetDeadline(deadlineDate);
            var dateTimeProvider = GetProvider(tommorowDate);
            var roomSet          = GetRoomContractSet(deadline, isRoomSetApr);

            var allowed = RoomContractSetSettingsChecker.IsDisplayAllowed(roomSet, deadlineDate.AddDays(1), settings, dateTimeProvider);

            Assert.False(allowed);
        }
Ejemplo n.º 4
0
        public async Task <Result <List <RoomContractSet> > > Get(Guid searchId, string htId, AgentContext agent, string languageCode)
        {
            Baggage.AddSearchId(searchId);
            var searchSettings = await _accommodationBookingSettingsService.Get(agent);

            var(_, isFailure, selectedResults, error) = await GetSelectedWideAvailabilityResults(searchId, htId, agent);

            if (isFailure)
            {
                return(Result.Failure <List <RoomContractSet> >(error));
            }

            var checkInDate = selectedResults
                              .Select(s => s.Result.CheckInDate)
                              .FirstOrDefault();

            var supplierTasks = selectedResults
                                .Select(GetSupplierAvailability)
                                .ToArray();

            await Task.WhenAll(supplierTasks);

            return(supplierTasks
                   .Select(task => task.Result)
                   .Where(taskResult => taskResult.IsSuccess)
                   .Select(taskResult => taskResult.Value)
                   .SelectMany(MapToRoomContractSets)
                   .Where(SettingsFilter)
                   .OrderBy(r => r.Rate.FinalPrice.Amount)
                   .ToList());


            async Task <Result <SingleAccommodationAvailability, ProblemDetails> > GetSupplierAvailability((Suppliers, AccommodationAvailabilityResult) wideAvailabilityResult)
            {
                using var scope = _serviceScopeFactory.CreateScope();

                var(source, result) = wideAvailabilityResult;

                return(await RoomSelectionSearchTask
                       .Create(scope.ServiceProvider)
                       .GetSupplierAvailability(searchId: searchId, htId: htId, supplier: source, supplierAccommodationCode: result.SupplierAccommodationCode,
                                                availabilityId: result.AvailabilityId, settings: searchSettings, agent: agent, languageCode: languageCode,
                                                countryHtId: result.CountryHtId, localityHtId: result.LocalityHtId));
            }

            async Task <Result <List <(Suppliers Source, AccommodationAvailabilityResult Result)> > > GetSelectedWideAvailabilityResults(Guid searchId, string htId, AgentContext agent)
            {
                var results = await GetWideAvailabilityResults(searchId, htId, agent);

                if (searchSettings.PassedDeadlineOffersMode == PassedDeadlineOffersMode.Hide)
                {
                    results = results
                              .Where(r => r.Result.CheckInDate > _dateTimeProvider.UtcTomorrow());
                }

                return(results.ToList());
            }

            IEnumerable <RoomContractSet> MapToRoomContractSets(SingleAccommodationAvailability accommodationAvailability)
            {
                return(accommodationAvailability.RoomContractSets
                       .Select(rs => rs.ApplySearchSettings(searchSettings.IsSupplierVisible, searchSettings.IsDirectContractFlagVisible)));
            }

            bool SettingsFilter(RoomContractSet roomSet)
            => RoomContractSetSettingsChecker.IsDisplayAllowed(roomSet, checkInDate, searchSettings, _dateTimeProvider);
        }