public void AddMoreOccurrences()
        {
            // arrange
            var request = new UpdateEventOccurrenceSeriesRequest
            {
                EventId = _eventId,
                OccurrenceId = _seriesRootId,
                IsEnabled = false,
                IsNotificationListEnabled = true,
                IsRegistrationEnabled = true,
                Presenter = _newPresenter,
                MaximumAttendees = _newMaxAttendees,
                Cost = _newPrice,
                OverwriteCustomizations = false,
                AdditionalRecurrences = new ScheduleEntry[]
                {
                    new ScheduleEntry{ Date = new DateTime(2000, 10, 1), Time = new TimeRange{ Start = new Time{ Hour = 8, Minute = 30}, End = new Time{ Hour = 9, Minute = 0}}},
                    new ScheduleEntry{ Date = new DateTime(2000, 10, 2), Time = new TimeRange{ Start = new Time{ Hour = 8, Minute = 30}, End = new Time{ Hour = 9, Minute = 0}}},
                    new ScheduleEntry{ Date = new DateTime(2000, 10, 3), Time = new TimeRange{ Start = new Time{ Hour = 8, Minute = 30}, End = new Time{ Hour = 9, Minute = 0}}},
                }
            };

            // act
            HandleRequest<UpdateEventOccurrenceSeriesResponse>(_handler, request);

            // assert
            using (var context = _entityContextFactory.CreateEntityContext())
            {
                var series = context.EntitySet<EventOccurrence>()
                    .Where(e => e.SeriesEventOccurrenceId == _seriesRootId)
                    .OrderBy(e => e.Id)
                    .AsEnumerable();

                Assert.AreEqual(6, series.Count());
            }
        }
        public void NotifiesWhenCreatingAvailability()
        {
            // arrange
            var request = new UpdateEventOccurrenceSeriesRequest
            {
                EventId = _eventId,
                OccurrenceId = _seriesRootId,
                IsEnabled = false,
                IsNotificationListEnabled = true,
                IsRegistrationEnabled = true,
                Presenter = _newPresenter,
                MaximumAttendees = _newMaxAttendees,
                Cost = _newPrice,
                OverwriteCustomizations = true
            };

            // act
            HandleRequest<UpdateEventOccurrenceSeriesResponse>(_handler, request);

            // assert
            _mockEmailProcessor.Verify(m => m.ProcessBatch(It.IsAny<IEnumerable<IEmailContext>>()), Times.Once());
        }
        public void PreserveCustomizations()
        {
            // arrange
            var request = new UpdateEventOccurrenceSeriesRequest
            {
                EventId = _eventId,
                OccurrenceId = _seriesRootId,
                IsEnabled = false,
                IsNotificationListEnabled = true,
                IsRegistrationEnabled = true,
                Presenter = _newPresenter,
                MaximumAttendees = _newMaxAttendees,
                Cost = _newPrice,
                OverwriteCustomizations = false
            };

            // act
            HandleRequest<UpdateEventOccurrenceSeriesResponse>(_handler, request);

            // assert
            using (var context = _entityContextFactory.CreateEntityContext())
            {
                var set = context.EntitySet<EventOccurrence>();

                var series = set.Where(e => e.SeriesEventOccurrenceId == _seriesRootId).AsEnumerable();
                Assert.AreEqual(3, series.Count());

                var root = set.Find(_seriesRootId);

                Assert.AreEqual(false, root.IsEnabled);
                Assert.AreEqual(true, root.IsNotificationListEnabled);
                Assert.AreEqual(true, root.IsRegistrationEnabled);
                Assert.AreEqual(_newPresenter, root.Presenter);
                Assert.AreEqual(_newMaxAttendees, root.MaximumAttendees);
                Assert.AreEqual(_newPrice, root.Cost);

                var occurrence2 = set.Find(_seriesOccurrence2Id);
                Assert.AreEqual(false, occurrence2.IsEnabled);
                Assert.AreEqual(true, occurrence2.IsNotificationListEnabled);
                Assert.AreEqual(true, occurrence2.IsRegistrationEnabled);
                Assert.AreEqual(_newPresenter, occurrence2.Presenter);
                Assert.AreEqual(_newMaxAttendees, occurrence2.MaximumAttendees);
                Assert.AreEqual(_newPrice, occurrence2.Cost);

                var occurrence3 = set.Find(_customizedOccurrenceId);
                Assert.AreEqual(false, occurrence3.IsEnabled);
                Assert.AreEqual(true, occurrence3.IsNotificationListEnabled);
                Assert.AreEqual(true, occurrence3.IsRegistrationEnabled);
                Assert.AreEqual(_customPresenter, occurrence3.Presenter);
                Assert.AreEqual(_customMaxAttendees, occurrence3.MaximumAttendees);
                Assert.AreEqual(_customPrice, occurrence3.Cost);
            }
        }