public void UpdatingAnAggregateAfterPersistingMigrations()
{
var emptyMigrationsArray = new IEventMigration[0];
IReadOnlyList<IEventMigration> migrations = emptyMigrationsArray;
using(var container = CreateContainerForEventStoreType(() => migrations, EventStoreType))
{
var id = Guid.Parse("00000000-0000-0000-0000-000000000001");
container.Resolve<DummyTimeSource>().UtcNow = DateTime.Parse("2001-01-01 12:00");
var initialAggregate = TestAggregate.FromEvents(container.Resolve<IUtcTimeTimeSource>(), id, Seq.OfTypes<Ec1, E1>());
var initialHistory = initialAggregate.History;
Func<IEventStoreSession> session = () => container.Resolve<IEventStoreSession>();
Func<IEventStore> eventStore = () => container.Resolve<IEventStore>();
container.ExecuteUnitOfWorkInIsolatedScope(() => session().Save(initialAggregate));
migrations = Seq.Create(Replace<E1>.With<E5>()).ToList();
container.ExecuteUnitOfWorkInIsolatedScope(() => eventStore().PersistMigrations());
migrations = Seq.Create<IEventMigration>().ToList();
container.ExecuteUnitOfWorkInIsolatedScope(() => session().Get<TestAggregate>(id).RaiseEvents(new E2()));
var aggregate = container.ExecuteInIsolatedScope(() => session().Get<TestAggregate>(id));
var expected = TestAggregate.FromEvents(container.Resolve<IUtcTimeTimeSource>(), id, Seq.OfTypes<Ec1, E5, E2>()).History;
AssertStreamsAreIdentical(expected: expected, migratedHistory: aggregate.History, descriptionOfHistory: "migrated history");
var completeEventHistory =container.ExecuteInIsolatedScope(() => eventStore().ListAllEventsForTestingPurposesAbsolutelyNotUsableForARealEventStoreOfAnySize()).Cast<AggregateRootEvent>();
AssertStreamsAreIdentical(expected: expected, migratedHistory: completeEventHistory, descriptionOfHistory: "streamed persisted history");
Console.WriteLine($"Version");
Console.WriteLine("Aggregate Effective Inserted Manual");
Console.WriteLine("A E I M");
completeEventHistory.ForEach(@event => Console.WriteLine($"{@event.AggregateRootVersion} {@event.EffectiveVersion} {@event.InsertedVersion} {@event.ManualVersion}"));
ClearEventstoreCache(container);
completeEventHistory = container.ExecuteInIsolatedScope(() => eventStore().ListAllEventsForTestingPurposesAbsolutelyNotUsableForARealEventStoreOfAnySize()).Cast<AggregateRootEvent>();
AssertStreamsAreIdentical(expected: expected, migratedHistory: completeEventHistory, descriptionOfHistory: "streamed persisted history");
}
}