public void CanMigrateEvents()
        {
            // Arrange
            var container = CreateContainer();
            var eventStore = container.Resolve<EventStore>();
            var aggregate = new Aggregate();
            aggregate.Change();
            WithEventStore(container, session => session.Store(aggregate));

            // Act
            var eventMigrators = new List<IEventMigrator>
                                     {
                                         // deliberately wrong order here
                                         new SecondEventMigrator(),
                                         new FirstEventMigrator()
                                     };
            eventStore.MigrateEvents(eventMigrators);

            // Assert
            History history = null;
            WithEventStore(container, session => history = session.Load<History>(aggregate.Id));
            Assert.That(history.Events, Is.Not.Null);
            Assert.That(history.Events.Count, Is.EqualTo(4));
            Assert.That(history.Events[0], Is.EqualTo("Created1A"));
            Assert.That(history.Events[1], Is.EqualTo("Created2"));
            Assert.That(history.Events[2], Is.EqualTo("Changed1A"));
            Assert.That(history.Events[3], Is.EqualTo("Changed2"));
        }
        public void CanSaveChangesSeveralTimes()
        {
            // Arrange
            var handler = new AggregateHandler();
            var container = CreateContainer(new[] { handler });
            var aggregate = new Aggregate();
            aggregate.Change();
            var eventStore = container.Resolve<EventStore>();
            var eventStoreSession = eventStore.OpenSession(
                container.Resolve<IDocumentStore>(), container.Resolve<IDocumentSession>());
            eventStoreSession.Store(aggregate);

            // Act
            eventStoreSession.SaveChanges();
            Assert.That(aggregate.GetUncommittedChanges().Length, Is.EqualTo(0));
            Assert.That(handler.Changes, Is.EqualTo(1));
            aggregate.Change();
            eventStoreSession.SaveChanges();

            // Assert
            Assert.That(handler.Changes, Is.EqualTo(2));
        }