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); }
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); }
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); }
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); }
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>()); }
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); }
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()); }
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)); }