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