public void ModifyBookingWithMisMatchBusinessThrowsException() { // Arrange const long BUSINESS_ID = 2; const long MISMATCHED_BUSINESS_ID = 5; // Stub the BusinessCache to have the businesses to be used by our service method CacheHelper.StubBusinessCacheMultipleBusiness(new List<long> { MISMATCHED_BUSINESS_ID, BUSINESS_ID }); // invalidate the cache so we make sure both our businesses are loaded into the cache Cache.Business.Invalidate(); //Set up a Guest for the booking var guest = new GuestDto { Id = 23, BusinessId = BUSINESS_ID, Surname = "Doe" }; var bookingDto = new BookingDto { BusinessId = BUSINESS_ID, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(1), Guest = guest, RoomId = 1 }; try { // Act PropertyManagementSystemService.ModifyBooking(MISMATCHED_BUSINESS_ID, false, bookingDto); // Assert Assert.Fail("An exception SRVEX30000 of type ValidationException should have been thrown"); } catch (ValidationException ex) { // Assert Assert.AreEqual("SRVEX30000", ex.Code, "The Validation exception is not returning the right error code"); } finally { // Reassign the Dao on the cache to discard the stub assigned on the StubBusinessCacheSingleBusiness method CacheHelper.ReAssignBusinessDaoToBusinessCache(); } }
public void ModifyBookingWithExpectedResult() { // Arrange const long BUSINESS_ID = 1; //Set up a Guest for the booking var guest = new GuestDto { Id = 23, BusinessId = BUSINESS_ID, Surname = "Doe" }; var bookingDto = new BookingDto { BusinessId = BUSINESS_ID, Order = new OrderDto { Id = 5, OfflineSourceCode = OfflineSourceEnum.Web.GetCode(), CustomerCultureCode = "en-GB", CustomerCurrencyCode = "GBP" }, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(1), Guest = guest, RoomId = 1 }; var stubBookingManager = MockRepository.GenerateStub<IBookingManager>(); PropertyManagementSystemService.BookingManager = stubBookingManager; stubBookingManager.Stub(c => c.ModifyBooking(Arg<bool>.Is.Equal(false), Arg<Booking>.Is.Anything)).Return(DataTransferObjectsConverter.ConvertBookingDtoToBooking(bookingDto)); // Stub the BusinessCache to be used by our service method CacheHelper.StubBusinessCacheSingleBusiness(BUSINESS_ID); // invalidate the cache so we make sure our business is loaded into the cache Cache.Business.Invalidate(); // Act BookingDto modifyBookingResult = PropertyManagementSystemService.ModifyBooking(BUSINESS_ID, false, bookingDto); // Assert Assert.IsNotNull(modifyBookingResult, "booking was not modified successfully"); stubBookingManager.VerifyAllExpectations(); // Reassign the Dao on the cache to discard the stub assigned on the StubBusinessCacheSingleBusiness method CacheHelper.ReAssignBusinessDaoToBusinessCache(); }
public void ModifyBookingWithInvalidBusinessThrowsException() { // Arrange const long BUSINESS_ID = 123456; //Set up a Guest for the booking var guest = new GuestDto { Id = 23, BusinessId = BUSINESS_ID, Surname = "Doe" }; var bookingDto = new BookingDto { BusinessId = BUSINESS_ID, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(1), Guest = guest, RoomId = 1 }; try { // Act PropertyManagementSystemService.ModifyBooking(BUSINESS_ID, false, bookingDto); // 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"); } }
public void CreateBookingMismatchedBusinessIdThrowsValidationException() { // Arrange // Parameters for the invoke const long BUSINESS_ID = 2; const long MISMATCHED_BUSINESS_ID = 5; var bookingDto = new BookingDto { BusinessId = BUSINESS_ID, Guest = new GuestDto { Id = 1, BusinessId = BUSINESS_ID, Surname = "Test Guest", Email = "*****@*****.**" }, StartDate = new DateTime(2012, 2, 1, 0, 0, 0, DateTimeKind.Utc), EndDate = new DateTime(2012, 2, 2, 0, 0, 0, DateTimeKind.Utc), NumberOfAdults = 2, NumberOfChildren = 1, Cost = new decimal(120.5), BookingStatusCode = BookingStatusType.CONFIRMED, RoomTypeId = 1, RoomId = 1, RatePlanId = 1, CheckinStatusCode = CheckinStatusOptions.NOTCHECKEDIN, Notes = "Testing note", BookingScenarioType = BookingScenarioTypeEnumDto.OnAccountBooking }; // Stub the BusinessCache to be used by our service method CacheHelper.StubBusinessCacheSingleBusiness(MISMATCHED_BUSINESS_ID); // invalidate the cache so we make sure our business is loaded into the cache Cache.Business.Invalidate(); try { // Act PropertyManagementSystemService.CreateBooking(MISMATCHED_BUSINESS_ID, bookingDto); // Assert Assert.Fail("An exception SRVEX30000 of type ValidationException should have been thrown"); } catch (ValidationException ex) { // Assert Assert.AreEqual("SRVEX30000", ex.Code, "The Validation exception is not returning the right error code"); } finally { // Reassign the Dao on the cache to discard the stub assigned on the StubBusinessCacheSingleBusiness method CacheHelper.ReAssignBusinessDaoToBusinessCache(); } }
public void CreateBookingWithIncorrectRateTypeCodeThrowsException() { // Arrange const long BUSINESS_ID = 1; CacheHelper.StubBusinessCacheSingleBusiness(BUSINESS_ID); PropertyManagementSystemService.RoomInformationManager = new RoomInformationManager(); PropertyManagementSystemService.BookingManager = new BookingManager(); var mockOrderManager = new Mock<IOrderManager>(); //Set up a Guest for the booking var guest = new GuestDto { Id = 23, BusinessId = BUSINESS_ID, Surname = "Doe" }; const string BAD_CODE = "ThisIsABadCode"; var bookingDto = new BookingDto { BusinessId = BUSINESS_ID, Id = 1, OrderId = 5, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(1), Guest = guest, RoomId = 1, RoomTypeId = 1, RatePlanId = 1, NumberOfAdults = 1, NumberOfChildren = 0, RateTypeCode = BAD_CODE }; mockOrderManager.Setup(o => o.GetByKey(bookingDto.OrderId.Value, It.IsAny<string>())) .Returns(new Order {Id = bookingDto.OrderId}); PropertyManagementSystemService.OrderManager = mockOrderManager.Object; // Act try { PropertyManagementSystemService.CreateBooking(BUSINESS_ID, bookingDto); // Assert Assert.Fail("Exception with code SRVEX30046 should have been thrown"); } catch (ValidationException vex) { Assert.AreEqual("SRVEX30046", vex.Code, "Validation exception of type SRVEX30046 was not thrown"); mockOrderManager.VerifyAll(); } finally { CacheHelper.ReAssignBusinessDaoToBusinessCache(); PropertyManagementSystemService.GuestManager = new GuestManager(); PropertyManagementSystemService.OrderManager = new OrderManager(); } }
public void CreateBookingCreatesBooking() { // Arrange const long BUSINESS_ID = 1; // Stub the BusinessCache to be used by our service method CacheHelper.StubBusinessCacheSingleBusiness(BUSINESS_ID); // invalidate the cache so we make sure our business is loaded into the cache Cache.Business.Invalidate(); var bookingDto = new BookingDto { BusinessId = BUSINESS_ID, OrderId = 4, Order = new OrderDto { Id = 4, OfflineSourceCode = OfflineSourceEnum.Web.GetCode(), LeadGuest = new GuestDto { BusinessId = BUSINESS_ID, Surname = "Test Guest", Email = "*****@*****.**" } }, Guest = new GuestDto {BusinessId = BUSINESS_ID, Surname = "Test Guest", Email = "*****@*****.**"}, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(1), NumberOfAdults = 2, RoomTypeId = 1, RoomId = 1, RatePlanId = 1, BookingStatusCode = BookingStatusType.TENTATIVE, BookingScenarioType = BookingScenarioTypeEnumDto.OnAccountBooking }; var orderMock = new Order { Id = bookingDto.OrderId }; var bookingManager = new Mock<IBookingManager>(); var orderManager = new Mock<IOrderManager>(); orderManager.Setup(o => o.GetByKey(It.Is<int>(i => i == bookingDto.OrderId), It.IsAny<string>())).Returns(orderMock); bookingManager.Setup(x => x.CreateBooking(It.IsAny<Booking>(), It.Is<Order>(o => o.Id == orderMock.Id))); PropertyManagementSystemService.BookingManager = bookingManager.Object; PropertyManagementSystemService.OrderManager = orderManager.Object; // Act PropertyManagementSystemService.CreateBooking(BUSINESS_ID, bookingDto); // Assert bookingManager.VerifyAll(); orderManager.VerifyAll(); // Reassign the Dao on the cache to discard the stub assigned on the StubBusinessCacheSingleBusiness method CacheHelper.ReAssignBusinessDaoToBusinessCache(); }
public void CreateBookingInvalidBusinessIdThrowsValidationException() { // Arrange // businessId that we know will never exist const long BUSINESS_ID = -100011110010000; var bookingDto = new BookingDto { BusinessId = BUSINESS_ID, Guest = new GuestDto { Id = 1, BusinessId = BUSINESS_ID, Surname = "Test Guest", Email = "*****@*****.**" }, StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(1), NumberOfAdults = 2, RoomTypeId = 1, RoomId = 1, RatePlanId = 1, BookingStatusCode = BookingStatusType.TENTATIVE, BookingScenarioType = BookingScenarioTypeEnumDto.OnAccountBooking, }; try { // Act PropertyManagementSystemService.CreateBooking(BUSINESS_ID, bookingDto); // 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"); } }
public decimal? GetCancellationCharge(BookingDto booking) { Booking modelBooking = DataTransferObjectsConverter.ConvertBookingDtoToBooking(booking); return bookingManager.GetCancellationChargeByBooking(modelBooking); }
public BookingDto ModifyBooking(long businessId, bool forceModify, BookingDto bookingDto) { // Make sure the current user has access to this business CheckAccessRights(bookingDto.BusinessId); //Validate that the business exists if (Cache.Business.TryGetValue(bookingDto.BusinessId) == null) { throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30001, "PropertyManagementSystemService.ModifyBooking", additionalDescriptionParameters: (new object[] { bookingDto.BusinessId }))); } // Validate if the business matches the business on the booking if (businessId != bookingDto.BusinessId) { throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30000, "PropertyManagementSystemService.ModifyBooking", additionalDescriptionParameters: (new object[] { businessId, bookingDto.BusinessId }), arguments: new object[] { businessId, bookingDto })); } Booking modifyBooking = DataTransferObjectsConverter.ConvertBookingDtoToBooking(bookingDto); Booking modifiedBooking = bookingManager.ModifyBooking(forceModify, modifyBooking); return modifiedBooking != null ? Mapper.Map<BookingDto>(modifiedBooking) : null; }
public BookingDto CreateBooking(long businessId, BookingDto booking) { // Make sure the current user has access to this business CheckAccessRights(businessId); if (Cache.Business.TryGetValue(businessId) == null) { throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30001, "PropertyManagementSystemService.CreateBooking", additionalDescriptionParameters: (new object[] { businessId }))); } // Validate if the business matches the business on the booking if (businessId != booking.BusinessId) { throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30000, "PropertyManagementSystemService.CreateBooking", additionalDescriptionParameters: (new object[] { businessId, booking.BusinessId }), arguments: new object[] { businessId, booking })); } // get the order, if not present throw validation exception if (booking.OrderId.HasValue == false) { throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30018, "PropertyManagementSystemService.CreateBooking", additionalDescriptionParameters: (new object[] { businessId, booking.BusinessId }), arguments: new object[] { businessId, booking })); } Order order = orderManager.GetByKey(booking.OrderId.Value); // Convert to Model Booking internalBooking = DataTransferObjectsConverter.ConvertBookingDtoToBooking(booking); internalBooking.CheckinStatus = new EnumEntity { Code = CheckinStatusOptions.NOTCHECKEDIN }; //Create the booking, order will be present already bookingManager.CreateBooking(internalBooking, order); if (internalBooking.Id != null) { // Return the updated bookingDto (make sure to get the full object from database since the BookingReference is only generated in SQL code) return Mapper.Map<BookingDto>(bookingManager.GetByKey((int) internalBooking.Id)); } return null; }
/// <summary> /// Converts CancellationDetailDto to CancellationDetail /// </summary> /// <param name="bookingDto">Booking with the cancellation Details</param> /// <returns>CancellationDetailDto</returns> public static CancellationDetail ConvertBookingCancellationDetailDtoToModel(BookingDto bookingDto) { return new CancellationDetail { CancellationType = Mapper.Map<CancellationTypeEnumDto, CancellationTypeEnum>(bookingDto.CancellationType), CancellationChargeType = Mapper.Map<CancellationChargeTypeEnumDto, CancellationChargeTypeEnum>(bookingDto.CancellationChargeType), CancellationChargeValue = bookingDto.CancellationChargeValue, CancellationCharge = bookingDto.CancellationCharge, CancellationWindowHours = bookingDto.CancellationWindowHours, DefaultCheckinDateTime = bookingDto.DefaultCheckinDatetime, DefaultCheckoutDateTime = bookingDto.DefaultCheckoutDatetime }; }
/// <summary> /// Converts Booking object to Booking DTO /// </summary> /// <param name="booking">Booking to convert</param> /// <returns>Converted Booking DTO</returns> public static Booking ConvertBookingDtoToBooking(BookingDto booking) { return new Booking { Id = booking.Id, BusinessId = booking.BusinessId, BookingReferenceNumber = booking.BookingReferenceNumber, StartDate = booking.StartDate, EndDate = booking.EndDate, NumberOfAdults = booking.NumberOfAdults, NumberOfChildren = booking.NumberOfChildren, PreCancellationCost = booking.PreCancellationCost, Cost = booking.Cost, RoomTypeId = booking.RoomTypeId, RoomTypeDescription = booking.RoomTypeDescription, RoomId = booking.RoomId, RatePlanId = booking.RatePlanId, CheckinStatus = ConvertCodeAndNameToEnumEntity(booking.CheckinStatusCode), EffectiveCheckInDateLT = booking.CheckInDateLT, EffectiveCheckOutDateLT = booking.CheckOutDateLT, EstimatedTimeOfArrival = booking.EstimatedTimeOfArrival, BookingScenarioType = (BookingScenarioTypeEnum)booking.BookingScenarioType, Notes = booking.Notes, Guest = Mapper.Map<Guest>(booking.Guest), BookingStatus = ConvertCodeAndNameToEnumEntity(booking.BookingStatusCode), CreatedByUserId = booking.CreatedByUserId, CreatedDateTime = booking.CreatedDateTime, RateType = ConvertCodeAndNameToEnumEntity(booking.RateTypeCode), BoardBasis = EnumExtensions.ParseEnumFromCode<BoardBasisTypeEnum>(booking.BoardBasisCode), IsOverBooking = booking.IsOverBooking, CancellationDetails = ConvertBookingCancellationDetailDtoToModel(booking), IsAvailabilityIgnored = booking.IsAvailabilityIgnored, OrderId = booking.OrderId.HasValue ? booking.OrderId.Value : 0, Order = booking.Order != null ? ConvertOrderDtoToOrder(booking.Order) : null }; }