示例#1
0
        public async Task SnapshotGetSavedAfterThirdEvent(PersistenceLayerProvider layerProvider)
        {
            BsonMapRegistrationHelpers.AddBsonMapFor <Event1>();
            BsonMapRegistrationHelpers.AddBsonMapFor <Event2>();
            BsonMapRegistrationHelpers.AddBsonMapFor <Event3>();

            var snapShotRepository = layerProvider.SnapShotRepository;
            var eventStore         = new EventStore(layerProvider.EventRepository, snapShotRepository
                                                    , new SnapShotConfig(new
                                                                         List <ISnapShot> {
                new SnapShot <User>(3)
            }));

            var entityId = Guid.NewGuid();
            await eventStore.AppendAsync(new List <IDomainEvent>
            {
                new Event1(entityId),
                new Event2(entityId, "Peter")
            }, 0);

            await eventStore.LoadAsync <User>(entityId.ToString());

            var snapShotDboOld = await snapShotRepository.LoadSnapShot <User>(entityId.ToString());

            Assert.IsNull(snapShotDboOld.Value.Id);
            Assert.IsNull(snapShotDboOld.Value.Name);

            await eventStore.AppendAsync(new List <IDomainEvent>
            {
                new Event3(entityId, 14),
                new Event2(entityId, "PeterNeu")
            }, 2);

            var eventstoreResult = await eventStore.LoadAsync <User>(entityId.ToString());

            var user = eventstoreResult;

            Assert.AreEqual(4, eventstoreResult.Version);
            Assert.AreEqual(14, user.Value.Age);
            Assert.AreEqual("PeterNeu", user.Value.Name);
            Assert.AreEqual(entityId.ToString(), user.Value.Id);

            var snapShotDbo = await snapShotRepository.LoadSnapShot <User>(entityId.ToString());

            Assert.AreEqual(4, snapShotDbo.Version);
            Assert.AreEqual(entityId.ToString(), snapShotDbo.Value.Id);
            var userSnapShot = snapShotDbo.Value;

            Assert.AreEqual(14, userSnapShot.Age);
            Assert.AreEqual("PeterNeu", userSnapShot.Name);
            Assert.AreEqual(entityId.ToString(), userSnapShot.Id);
        }
示例#2
0
        public async Task AddEvents_ForeachMethod()
        {
            BsonMapRegistrationHelpers.AddBsonMapFor <TestEventAllOk>();

            var eventRepository = new EventRepositoryMongoDb(EventMongoDb, new VersionCache(EventMongoDb));
            var snapShotRepo    = new Mock <ISnapShotRepository>();

            snapShotRepo.Setup(re => re.LoadSnapShot <TestEntity>(It.IsAny <string>()))
            .ReturnsAsync(SnapShotResult <TestEntity> .Default());

            var eventStore = new EventStore(eventRepository, snapShotRepo.Object, new SnapShotConfig());

            var newGuid = Guid.NewGuid();

            await eventStore.AppendAsync(
                new List <IDomainEvent> {
                new TestEventAllOk(newGuid, "Simon")
            },
                0);

            var result = await eventRepository.LoadEvents();

            Assert.AreEqual(1, result.Value.Count());
            Assert.AreEqual(newGuid.ToString(), result.Value.Single().DomainEvent.EntityId);
            Assert.AreEqual("Simon", ((TestEventAllOk)result.Value.Single().DomainEvent).Name);
        }
        public async Task IntegrationWithRepo()
        {
            BsonMapRegistrationHelpers.AddBsonMapFor <TestEventEventStore>();
            var snapShotRepo = new Mock <ISnapShotRepository>();

            snapShotRepo.Setup(re => re.LoadSnapShot <TestEntity>(It.IsAny <string>()))
            .ReturnsAsync(SnapShotResult <TestEntity> .Default());
            var entityId   = Guid.NewGuid();
            var eventStore = new EventStore(
                new EventRepositoryMongoDb(EventMongoDb,
                                           new VersionCache(EventMongoDb)),
                snapShotRepo.Object, new SnapShotConfig());

            await eventStore.AppendAsync(new List <IDomainEvent> {
                new TestEventEventStore(entityId, "Test")
            }, 0);

            var loadAsync = await eventStore.LoadAsync <TestEntity>(entityId.ToString());

            var loadAsync2 = await eventStore.LoadAsync <TestEntity>(entityId.ToString());

            Assert.AreEqual(entityId, loadAsync.Value.Id);
            Assert.AreEqual("Test", loadAsync.Value.Name);

            Assert.AreEqual(entityId, loadAsync2.Value.Id);
            Assert.AreEqual("Test", loadAsync2.Value.Name);
        }
示例#4
0
        public async Task AddEvents_AutoProperty_NotNamedEntityId()
        {
            BsonMapRegistrationHelpers.AddBsonMapFor <TestEvent_BsonBug_AutoProperty_NotWithEntityIdName>();

            var eventRepository = new EventRepositoryMongoDb(EventMongoDb, new VersionCache(EventMongoDb));
            var snapShotRepo    = new Mock <ISnapShotRepository>();

            snapShotRepo.Setup(re => re.LoadSnapShot <TestEntity>(It.IsAny <string>()))
            .ReturnsAsync(SnapShotResult <TestEntity> .Default());

            var eventStore = new EventStore(eventRepository, snapShotRepo.Object, new SnapShotConfig());

            await eventStore.AppendAsync(new List <IDomainEvent> {
                new TestEvent_BsonBug_AutoProperty_NotWithEntityIdName("whatever", "Peter")
            },
                                         0);

            var result = await eventRepository.LoadEvents();

            Assert.AreEqual(1, result.Value.Count());
            var domainEvent = result.Value.Single().DomainEvent as TestEvent_BsonBug_AutoProperty_NotWithEntityIdName;

            Assert.AreEqual("whatever", domainEvent.EntityId);
            Assert.AreEqual("Peter", domainEvent.Name);
        }
示例#5
0
        public async Task SnapshotExactlyOnSnapShotTime_DoesNotReturnNotFoundBug(PersistenceLayerProvider layerProvider)
        {
            BsonMapRegistrationHelpers.AddBsonMapFor <Event1>();
            BsonMapRegistrationHelpers.AddBsonMapFor <Event2>();

            var eventStore = new EventStore(layerProvider.EventRepository, layerProvider.SnapShotRepository, new
                                            SnapShotConfig(new List <ISnapShot> {
                new SnapShot <User>(1)
            }));

            var entityId = Guid.NewGuid();
            await eventStore.AppendAsync(new List <IDomainEvent>
            {
                new Event1(entityId),
                new Event2(entityId, "Peter"),
                new Event2(entityId, "Peterneu")
            }, 0);

            await eventStore.LoadAsync <User>(entityId.ToString());

            var result = await eventStore.LoadAsync <User>(entityId.ToString());

            Assert.AreEqual("Peterneu", result.Value.Name);
            Assert.AreEqual(3, result.Version);
        }
示例#6
0
        public async Task Append_1_Test()
        {
            var streamId = Guid.NewGuid();
            var created  = DateTimeOffset.Now;

            await EventStore.AppendAsync(new[] { new UncommittedEvent(streamId, 1, new Guid(), Payload(1), 1, created) });

            var e = EventStore.GetEnumerable().Single();

            Assert.That.Event(e).IsEqualTo(1, streamId, 1, new Guid(), Payload(1), 1, created);
        }
        public async Task IntegrationWithRepo_NotFound()
        {
            var snapShotRepo = new Mock <ISnapShotRepository>();

            snapShotRepo.Setup(re => re.LoadSnapShot <TestEntity>(It.IsAny <string>()))
            .ReturnsAsync(SnapShotResult <TestEntity> .Default());
            var entityId   = Guid.NewGuid();
            var eventStore = new EventStore(new EventRepositoryMongoDb(EventMongoDb, new VersionCache(EventMongoDb)), snapShotRepo.Object, new SnapShotConfig());

            await eventStore.AppendAsync(new List <IDomainEvent> {
                new TestEventEventStore(entityId, "Test")
            }, 0);

            var loadAsync = await eventStore.LoadAsync <TestEntity>(Guid.NewGuid().ToString());

            Assert.IsTrue(loadAsync.Is <NotFound>());
        }
示例#8
0
        public async Task Append_3_Test()
        {
            var streamId = Guid.NewGuid();
            var created  = DateTimeOffset.Now;

            var es = new[] {
                new UncommittedEvent(streamId, 1, new Guid(), Payload(1), 1, created),
                new UncommittedEvent(streamId, 2, new Guid(), Payload(2), 2, created),
                new UncommittedEvent(streamId, 3, new Guid(), Payload(3), 3, created),
            };

            await EventStore.AppendAsync(es);

            var e = EventStore.GetEnumerable().ToList();

            Assert.That.Event(e[0]).IsEqualTo(1, streamId, 1, new Guid(), Payload(1), 1, created);
            Assert.That.Event(e[1]).IsEqualTo(2, streamId, 2, new Guid(), Payload(2), 2, created);
            Assert.That.Event(e[2]).IsEqualTo(3, streamId, 3, new Guid(), Payload(3), 3, created);
        }
示例#9
0
        public async Task SnapshotIsChangedAfterSavingIt_InMemoryBug(PersistenceLayerProvider layerProvider)
        {
            BsonMapRegistrationHelpers.AddBsonMapFor <Event1>();
            BsonMapRegistrationHelpers.AddBsonMapFor <Event2>();
            if (layerProvider.SnapShotRepository.GetType() == typeof(SnapShotRepositoryInMemory))
            {
                return;                                                                                   // this is not supported in memory
            }
            var eventStore = new EventStore(layerProvider.EventRepository, layerProvider.SnapShotRepository, new
                                            SnapShotConfig(new List <ISnapShot> {
                new SnapShot <UserWithAutoAply>(2)
            }));

            var event1           = UserWithAutoAply.Create();
            var userWithAutoAply = new UserWithAutoAply();

            userWithAutoAply.Apply(event1);
            var changeNameEvent1 = userWithAutoAply.AppendName("neuer Name");
            var changeNameEvent2 = userWithAutoAply.AppendName("neuer Name");
            var changeNameEvent3 = userWithAutoAply.AppendName("neuer Name");

            var entityId = event1.Id;
            await eventStore.AppendAsync(new List <IDomainEvent>
            {
                event1, changeNameEvent1, changeNameEvent2, changeNameEvent3
            }, 0);

            var result = await eventStore.LoadAsync <UserWithAutoAply>(entityId.ToString());

            var userLoaded = result.Value;

            Assert.AreEqual(3, userLoaded.Names.Count());
            Assert.AreEqual(4, result.Version);

            userLoaded.AppendName("new stuff");

            Assert.AreEqual(4, userLoaded.Names.Count());

            var resultLoadedAgain = await eventStore.LoadAsync <UserWithAutoAply>(entityId.ToString());

            Assert.AreEqual(3, resultLoadedAgain.Value.Names.Count());
        }
示例#10
0
        public async Task DifferentIdsInEventsDefined()
        {
            var snapShotRepo = new Mock <ISnapShotRepository>();

            snapShotRepo.Setup(re => re.LoadSnapShot <TestEntity>(It.IsAny <string>()))
            .ReturnsAsync(SnapShotResult <TestEntity> .Default());
            var entityId   = Guid.NewGuid();
            var entityId2  = Guid.NewGuid();
            var eventStore = new EventStore(new EventRepositoryMongoDb(EventMongoDb, new VersionCache(EventMongoDb)), snapShotRepo.Object, new SnapShotConfig());

            await Assert.ThrowsExceptionAsync <DifferentIdsException>(async() => await eventStore.AppendAsync(new
                                                                                                              List <IDomainEvent> {
                new
                TestEventEventStore(entityId, "Test"), new
                TestEventEventStore(entityId2, "Test")
            }, 0));
        }