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