Exemplo n.º 1
0
        public void Inserting_E2_After_E1_Persisting_and_then_Inserting_E3_after_E1()
        {
            var firstMigration  = Seq.Create(After <E1> .Insert <E2>()).ToArray();
            var secondMigration = Seq.Create(After <E1> .Insert <E3>()).ToArray();
            IReadOnlyList <IEventMigration> migrations = new List <IEventMigration>();

            using (var container = CreateContainerForEventStoreType(() => migrations, EventStoreType))
            {
                container.Resolve <DummyTimeSource>().UtcNow = DateTime.Parse("2001-01-01 12:00");

                var id = Guid.Parse("00000000-0000-0000-0000-000000000001");
                var initialAggregate = TestAggregate.FromEvents(container.Resolve <IUtcTimeTimeSource>(), id, Seq.OfTypes <Ec1, E1>());
                var expectedHistoryAfterFirstMigration  = TestAggregate.FromEvents(container.Resolve <IUtcTimeTimeSource>(), id, Seq.OfTypes <Ec1, E1, E2>()).History;
                var expectedHistoryAfterSecondMigration = TestAggregate.FromEvents(container.Resolve <IUtcTimeTimeSource>(), id, Seq.OfTypes <Ec1, E1, E3, E2>()).History;

                Func <IEventStoreSession> session    = () => container.Resolve <IEventStoreSession>();
                Func <IEventStore>        eventStore = () => container.Resolve <IEventStore>();

                container.ExecuteUnitOfWorkInIsolatedScope(() => session().Save(initialAggregate));
                migrations = firstMigration;
                var historyWithFirstMigrationUnPersisted = container.ExecuteUnitOfWorkInIsolatedScope(() => session().Get <TestAggregate>(id).History);

                container.ExecuteUnitOfWorkInIsolatedScope(() => eventStore().PersistMigrations());
                var historyAfterPersistingFirstMigration = container.ExecuteUnitOfWorkInIsolatedScope(() => session().Get <TestAggregate>(id).History);
                AssertStreamsAreIdentical(expectedHistoryAfterFirstMigration, historyWithFirstMigrationUnPersisted, nameof(historyWithFirstMigrationUnPersisted));
                AssertStreamsAreIdentical(expectedHistoryAfterFirstMigration, historyAfterPersistingFirstMigration, nameof(historyAfterPersistingFirstMigration));

                migrations = secondMigration;
                ClearEventstoreCache(container);
                var historyWithSecondMigrationUnPersisted = container.ExecuteUnitOfWorkInIsolatedScope(() => session().Get <TestAggregate>(id).History);

                container.ExecuteUnitOfWorkInIsolatedScope(() => eventStore().PersistMigrations());
                var historyAfterPersistingSecondMigration = container.ExecuteUnitOfWorkInIsolatedScope(() => session().Get <TestAggregate>(id).History);
                AssertStreamsAreIdentical(expectedHistoryAfterSecondMigration, historyWithSecondMigrationUnPersisted, nameof(historyWithSecondMigrationUnPersisted));
                AssertStreamsAreIdentical(expectedHistoryAfterSecondMigration, historyAfterPersistingSecondMigration, nameof(historyAfterPersistingSecondMigration));
            }
        }