Пример #1
0
 /// <summary>
 /// Check availability without claims check. Does a check availability given the search criteria presented
 /// </summary>
 /// <param name="searchCriteria">online search criteria</param>
 /// <returns>Search results based upon criteria given</returns>
 public List<OnlineAvailabilitySearchResultDto> CheckOnlineAvailability(OnlineAvailabilitySearchCriteriaDto searchCriteria)
 {
     return HandleCheckAvailabilityRequest(searchCriteria);
 }
Пример #2
0
        /// <summary>
        /// Does the actual call to the manager level
        /// </summary>
        /// <param name="searchCriteria">search criteria</param>
        /// <returns>search results</returns>
        private List<OnlineAvailabilitySearchResultDto> HandleCheckAvailabilityRequest(OnlineAvailabilitySearchCriteriaDto searchCriteria)
        {
            // Log criteria
            Log.LogInfo("Online search criteria request: {0}", null, searchCriteria);
            Log.LogInfoAsXml(searchCriteria);

            // Try get of business by short name here
            // Only doing first business for now
            if (searchCriteria.BusinessShortNames.Count == 0 ||
                Cache.BusinessByShortName.TryGetValue(searchCriteria.BusinessShortNames[0]) == null)
            {
                throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30001, "AvailabilitySearchService.CheckAvailability",
                    additionalDescriptionParameters: (new object[] { searchCriteria.BusinessShortNames })));
            }

            // Convert the criteria to a model object
            AvailabilitySearchCriteria criteria = DataTransferObjectsConverter.ConvertDtoToOnlineAvailabilitySearchCriteria(searchCriteria);

            var availabilitySearchResults = SearchAvailabilityAndAllocateRooms(criteria);

            var onlineSearchResults = ConvertToDto(criteria, availabilitySearchResults);

            // Log result
            Log.LogInfo("Online search result: {0}", null, onlineSearchResults);
            Log.LogInfoAsXml(onlineSearchResults, null, onlineSearchResults);

            return onlineSearchResults;
        }
        public void WhenISubmitAnOnlineAvailabilityCheckForFromToWithAdultsAndChildren(string p0, string p1, string p2, int p3, int p4)
        {
            OnlineAvailabilitySearchCriteriaDto searchCriteria = new OnlineAvailabilitySearchCriteriaDto
                                                                     {
                                                                         BusinessShortNames = new List<string> { p0 },
                                                                         StartDate = new CalendarDateDto(GetDateFromFeatureString(p1)),
                                                                         EndDate = new CalendarDateDto(GetDateFromFeatureString(p2)),
                                                                         RoomSearchCriteria = new List<OnlineRoomRestrictionsDto>
                                                                         {
                                                                             new OnlineRoomRestrictionsDto
                                                                             {
                                                                                 NumberOfAdults = p3,
                                                                                 NumberOfChildren = p4
                                                                             }
                                                                         }
                                                                     };

            searchResults = searchService.CheckOnlineAvailability(searchCriteria);
        }
Пример #4
0
            public void TestCorrectMethodsAreCalledAndTranslationIsCorrectForCheckAvailability()
            {
                
                // Arrange
                const long BUSINESS_ID = 1;
                const string BUSINESS_NAME = "EVO";
                const string CURRENCY = "GBP";

                // Stub the BusinessCache to be used by our service method
                CacheHelper.StubBusinessCacheSingleBusiness(BUSINESS_ID, BUSINESS_NAME);

                // invalidate the cache so we make sure our business is loaded into the cache
                Cache.Business.Invalidate();
                Cache.BusinessByShortName.Invalidate();

                OnlineAvailabilitySearchCriteriaDto searchCriteriaSent = new OnlineAvailabilitySearchCriteriaDto
                {
                    BusinessShortNames = new List<string> { BUSINESS_NAME },
                    StartDate = new CalendarDateDto { Year = DateTime.Now.Year, Day = DateTime.Now.Day, Month = DateTime.Now.Month },
                    EndDate = new CalendarDateDto { Year = DateTime.Now.Year, Day = DateTime.Now.Day, Month = DateTime.Now.Month + 1 },
                    RoomSearchCriteria = new List<OnlineRoomRestrictionsDto> { new OnlineRoomRestrictionsDto { NumberOfAdults = 1, NumberOfChildren = 0 } },
                    CurrencyCode = CURRENCY
                };

                AvailabilitySearchResult mockResult = new AvailabilitySearchResult
                {
                    BusinessCandidates = new List<AvailabilityResultBusiness>
                    {
                        new AvailabilityResultBusiness
                        {
                            BusinessId = BUSINESS_ID,
                            ShortName = BUSINESS_NAME,
                            RoomTypes = new List<AvailabilityResultRoomType>
                            {
                                new AvailabilityResultRoomType
                                {
                                    BusinessId = BUSINESS_ID,
                                    UnAvailabilityReasonCode = UnavailabilityReasonCode.CheckInNotPossible,
                                    RatesAndRoomsAvailable = new List<RoomsAvailability> ()
                                    
                                },
                                new AvailabilityResultRoomType
                                {
                                    BusinessId = BUSINESS_ID,
                                    UnAvailabilityReasonCode = UnavailabilityReasonCode.MaxOccupancyExceeded,
                                    RatesAndRoomsAvailable = new List<RoomsAvailability> ()
                                }
                            }
                        }
                    }
                };

                mockAvailabilityManager.Expect(m => m.CheckOnlineAvailability(Arg<Model.Room.Online.AvailabilitySearchCriteria>.Matches(
                    asc =>
                        asc.StartDate.Day == searchCriteriaSent.StartDate.Day &&
                        asc.StartDate.Month == searchCriteriaSent.StartDate.Month &&
                        asc.StartDate.Year == searchCriteriaSent.StartDate.Year &&
                        asc.EndDate.Day == searchCriteriaSent.EndDate.Day &&
                        asc.EndDate.Month == searchCriteriaSent.EndDate.Month &&
                        asc.EndDate.Year == searchCriteriaSent.EndDate.Year &&
                        asc.RoomSearchCriteria[0].NumberOfAdults == searchCriteriaSent.RoomSearchCriteria[0].NumberOfAdults &&
                        asc.RoomSearchCriteria[0].NumberOfChildren == searchCriteriaSent.RoomSearchCriteria[0].NumberOfChildren &&
                        asc.BusinessShortNames[0] == searchCriteriaSent.BusinessShortNames[0]))).Return(mockResult).Repeat.Once();

                // Act
                OnlineAvailabilitySearchResultDto searchResults =
                    onlineAvailabilitySearchService.CheckOnlineAvailability(searchCriteriaSent).FirstOrDefault();

                // Assert
                mockAvailabilityManager.VerifyAllExpectations();
                Assert.IsNotNull(searchResults.BusinessCandidates, "businesses should still have been returned");
                Assert.AreEqual(1, searchResults.BusinessCandidates[0].NoAvailabilityReasons.Count, "reasons weren't accumulated for the business");
                Assert.IsTrue(searchResults.BusinessCandidates[0].NoAvailabilityReasons.Contains(UnavailabilityReasonCodeDto.NoInventory), "No Inventory in this business");

                CacheHelper.ReAssignBusinessDaoToBusinessCache();
            }
Пример #5
0
            public void TestWithBusinessNotExistingThrowsValidationException()
            {
                // Arrange
                const long GOOD_BUSINESS_ID = 1;
                const string GOOD_BUSINESS_NAME = "EVO";

                // Stub the BusinessCache to be used by our service method
                CacheHelper.StubBusinessCacheSingleBusiness(GOOD_BUSINESS_ID, GOOD_BUSINESS_NAME);

                // invalidate the cache so we make sure our business is loaded into the cache
                Cache.Business.Invalidate();
                Cache.BusinessByShortName.Invalidate();

                OnlineAvailabilitySearchCriteriaDto searchCriteriaSent = new OnlineAvailabilitySearchCriteriaDto
                {
                    // Make sure short name used is not what was put in cache
                    BusinessShortNames = new List<string> { GOOD_BUSINESS_NAME + "Changed" },
                    StartDate = new CalendarDateDto { Year = DateTime.Now.Year, Day = DateTime.Now.Day, Month = DateTime.Now.Month },
                    EndDate = new CalendarDateDto { Year = DateTime.Now.Year, Day = DateTime.Now.Day, Month = DateTime.Now.Month + 1 },
                    RoomSearchCriteria = new List<OnlineRoomRestrictionsDto> { new OnlineRoomRestrictionsDto { NumberOfAdults = 1, NumberOfChildren = 0 } }
                };

                try
                {
                    // Act
                    onlineAvailabilitySearchService.CheckOnlineAvailability(searchCriteriaSent);

                    // Assert
                    Assert.Fail("An exception SRVEX30001 of type ValidationException should have been thrown");
                }
                catch (ValidationException ex)
                {
                    // Assert
                    Assert.AreEqual("SRVEX30001", ex.Code,
                                    "The Validation exception is not returning the right error code");
                }

                CacheHelper.ReAssignBusinessDaoToBusinessCache();
            }
Пример #6
0
 /// <summary>
 /// Convert the AvailabilitySearchCriteriaDto to AvailabilitySearchCriteria Model
 /// </summary>
 /// <param name="searchCriteria">The object to convert</param>
 /// <returns>AvailabilitySearchCriteria</returns>
 public static Model.Room.Online.AvailabilitySearchCriteria ConvertDtoToOnlineAvailabilitySearchCriteria(OnlineAvailabilitySearchCriteriaDto searchCriteria)
 {
     return new Model.Room.Online.AvailabilitySearchCriteria
     {
         BusinessShortNames = searchCriteria.BusinessShortNames,
         StartDate = ConvertDtoToCalendarDate(searchCriteria.StartDate),
         EndDate = ConvertDtoToCalendarDate(searchCriteria.EndDate),
         RoomSearchCriteria = searchCriteria.RoomSearchCriteria.ConvertAll(rr =>
                                 new Model.Room.Online.RoomRestrictions
                                 {
                                     NumberOfAdults = rr.NumberOfAdults,
                                     NumberOfChildren = rr.NumberOfChildren
                                 }),
         ChannelShortName = searchCriteria.ChannelShortName,
         RequestedCurrency = searchCriteria.CurrencyCode
     };
 }