/// <summary> /// Override a set of rates /// </summary> /// <param name="productType">The rate plan to override rates for</param> public void OverrideRates(ProductType productType) { string notes = string.Empty; bool eventNeeded = false; string reference = productType.RatePlanId.ToString(); BusinessEventTypesEnum eventType = BusinessEventTypesEnum.RatePlanOverrideAdded; var validRateList = productType.Rates.Where(x => x.Override && x.IsValid()).ToList(); // if we have any that are overrides if (validRateList.Any()) { using (var tx = new BusinessTransaction()) { // Override rates foreach (var rate in validRateList) { int? dateRateId = rateCacheDao.GetDateRateId(rate); notes += rate.Date.ToString(StandardDateTimeFormatProvider.GetShortDBFormat()) + ","; if (!dateRateId.HasValue) { // Create date rate record rateCacheDao.CreateDateRate(rate); } else { // Modify the existing date rate record rateCacheDao.ModifyDateRate(dateRateId.Value, rate); eventType = BusinessEventTypesEnum.RatePlanOverrideModified; } } eventTrackingManager.CreateBusinessEvent(productType.BusinessId, eventType, reference, notes.TrimEnd(',')); tx.Commit(); } } }
public void OverrideRatesNotSetToOverrideDoesNotCallMethods() { // Arrange const long BUSINESS_ID = 1; const int ROOM_TYPE_ID = 1; const int RATE_PLAN_ID = 1; var rateCacheDaoMock = MockRepository.GenerateMock<IRateCacheDao>(); var eventTrackingManagerMock = MockRepository.GenerateMock<IEventTrackingManager>(); rateCacheManager.RateCacheDao = rateCacheDaoMock; rateCacheManager.EventTrackingManager = eventTrackingManagerMock; var rate = new RateCache { RoomTypeId = ROOM_TYPE_ID, RatePlanId = RATE_PLAN_ID, Date = DateTime.UtcNow.Date, Rate = new decimal(10), MinStay = 1, Override = false }; var productType = new ProductType { BusinessId = BUSINESS_ID, Rates = new List<RateCache> { rate } }; rateCacheDaoMock.Expect(dao => dao.GetDateRateId(rate)).Repeat.Never(); rateCacheDaoMock.Expect(dao => dao.CreateDateRate(rate)).Repeat.Never(); eventTrackingManagerMock.Expect(be => be.CreateBusinessEventAsync(Arg<long>.Is.Anything, Arg<BusinessEventTypesEnum>.Is.Anything, Arg<string>.Is.Anything, Arg<string>.Is.Anything)).Repeat.Never(); // Act rateCacheManager.OverrideRates(productType); // Assert rateCacheDaoMock.VerifyAllExpectations(); eventTrackingManagerMock.VerifyAllExpectations(); }
public void OverrideRatesWithInvalidRateAndMinStayThrowsException() { // Arrange var rateCacheDaoMock = MockRepository.GenerateMock<IRateCacheDao>(); rateCacheManager.RateCacheDao = rateCacheDaoMock; var rate = new RateCache { Rate = new decimal(0), MinStay = 1, Override = true }; var productType = new ProductType { Rates = new List<RateCache> { rate } }; // Act rateCacheManager.OverrideRates(productType); Assert.Fail("No exception was thrown."); }
public void OverrideExistingRatesCallsCorrectMethods() { // Arrange const long BUSINESS_ID = 1; const int ROOM_TYPE_ID = 1; const int RATE_PLAN_ID = 1; const int DATE_RATE_ID = 1; var rateCacheDaoMock = MockRepository.GenerateMock<IRateCacheDao>(); var eventTrackingManagerMock = MockRepository.GenerateMock<IEventTrackingManager>(); rateCacheManager.RateCacheDao = rateCacheDaoMock; rateCacheManager.EventTrackingManager = eventTrackingManagerMock; var rate = new RateCache { RoomTypeId = ROOM_TYPE_ID, RatePlanId = RATE_PLAN_ID, Date = DateTime.UtcNow.Date, Rate = new decimal(10), MinStay = 1, Override = true }; var productType = new ProductType { BusinessId = BUSINESS_ID, Rates = new List<RateCache> { rate } }; rateCacheDaoMock.Expect(dao => dao.GetDateRateId(rate)).Return(DATE_RATE_ID); rateCacheDaoMock.Expect(dao => dao.ModifyDateRate(DATE_RATE_ID, rate)); eventTrackingManagerMock.Expect(be => be.CreateBusinessEvent(Arg<long>.Is.Anything, Arg<BusinessEventTypesEnum>.Matches(ev => ev == BusinessEventTypesEnum.RatePlanOverrideModified), Arg<string>.Is.Anything, Arg<string>.Is.Anything)); // Act rateCacheManager.OverrideRates(productType); // Assert rateCacheDaoMock.VerifyAllExpectations(); eventTrackingManagerMock.VerifyAllExpectations(); }