public void TestProjection() { var eventStore = new InMemEventStore(null) as IEventStore; var poopProjection = new PoopProjection(); eventStore.Projections.Add(poopProjection); var snoopy = new DogAggregate(Guid.NewGuid(), "Snoopy"); snoopy.Poop(200); snoopy.Poop(700); snoopy.Poop(50); eventStore.Aggregates.Store(snoopy); var pluto = new DogAggregate(Guid.NewGuid(), "Pluto"); pluto.Poop(2000); pluto.Poop(100); eventStore.Aggregates.Store(pluto); poopProjection.PoopReport.Count.Should().Be(2); poopProjection.PoopReport.Find(p => p.DogName == "Snoopy").PoopTotal.Should().Be(950); poopProjection.PoopReport.Find(p => p.DogName == "Pluto").PoopTotal.Should().Be(2100); }
public void TestProjection() { if (_connectionString == null) { return; } var eventStore = new PostgresEventStore(null, _connectionString, "TestProjection", true) as IEventStore; var poopProjection = new PoopProjection(); eventStore.Projections.Add(poopProjection); var snoopy = new DogAggregate(Guid.NewGuid(), "Snoopy"); snoopy.Poop(200); snoopy.Poop(700); snoopy.Poop(50); eventStore.Aggregates.Store(snoopy); var pluto = new DogAggregate(Guid.NewGuid(), "Pluto"); pluto.Poop(2000); pluto.Poop(100); eventStore.Aggregates.Store(pluto); poopProjection.PoopReport.Count.Should().Be(2); poopProjection.PoopReport.Find(p => p.DogName == "Snoopy").PoopTotal.Should().Be(950); poopProjection.PoopReport.Find(p => p.DogName == "Pluto").PoopTotal.Should().Be(2100); }
public void TestCatchup() { if (_connectionString == null) { return; } var eventStore = new PostgresEventStore(null, _connectionString, "TestProjection", true) as IEventStore; var poopProjection = new PoopProjection(); eventStore.Projections.Add(poopProjection); var snoopyId = Guid.NewGuid(); var snoopy = new DogAggregate(snoopyId, "Snoopy"); snoopy.Poop(100); snoopy.Poop(100); snoopy.Poop(100); eventStore.Aggregates.Store(snoopy); ((PostgresEventStore)eventStore).NumberOfInlineEventsNotCatchedUp.Should().Be(4); poopProjection.PoopReport.First().PoopTotal.Should().Be(300); // Open new event store and dehydrate events var eventStore2 = new PostgresEventStore(null, _connectionString, "TestProjection", false) as IEventStore; var poopProjection2 = new PoopProjection(); eventStore2.Projections.Add(poopProjection2); eventStore2.DehydrateProjections(); ((PostgresEventStore)eventStore2).NumberOfInlineEventsNotCatchedUp.Should().Be(0); poopProjection2.PoopReport.Count.Should().Be(1); var snoopy2 = eventStore.Aggregates.Load <DogAggregate>(snoopyId); snoopy2.Poop(100); eventStore2.Aggregates.Store(snoopy2); poopProjection2.PoopReport.First().PoopTotal.Should().Be(400); ((PostgresEventStore)eventStore2).NumberOfInlineEventsNotCatchedUp.Should().Be(1); // Check that after catchup the projection is still the same and inline event list is cleaned up eventStore2.CatchUp(); poopProjection2.PoopReport.First().PoopTotal.Should().Be(400); ((PostgresEventStore)eventStore2).NumberOfInlineEventsNotCatchedUp.Should().Be(0); }
public void TestProjectionLookupThroughIEventStore() { // Setup var poopProjection = _eventStore.Projections.Get <PoopProjection>(); // Act var snoopy = new DogAggregate(Guid.NewGuid(), "Pluto"); snoopy.Poop(500); _eventStore.Aggregates.Store(snoopy); // Assert poopProjection.PoopReport.Find(d => d.DogName == "Pluto").PoopTotal.Should().Be(500); }
public void TestThatProjectionAreAutomaticallyPickedUpInIoCByEventStore() { // Setup var poopProjection = _serviceProvider.GetServices <IProjection>().First(p => p is PoopProjection) as PoopProjection; // Act var snoopy = new DogAggregate(Guid.NewGuid(), "Snoopy"); snoopy.Poop(200); _eventStore.Aggregates.Store(snoopy); // Assert poopProjection.PoopReport.Find(d => d.DogName == "Snoopy").PoopTotal.Should().Be(200); }
public void TestAggregateHydrationAndDehydration() { var eventStore = new InMemEventStore(null) as IEventStore; var aggregateBeforeHydration = new DogAggregate(Guid.NewGuid(), "Snoopy"); aggregateBeforeHydration.Bark(100); aggregateBeforeHydration.Poop(1500); eventStore.Aggregates.Store(aggregateBeforeHydration); var dehydratedAggregate = eventStore.Aggregates.Load <DogAggregate>(aggregateBeforeHydration.Id); dehydratedAggregate.Should().BeEquivalentTo(aggregateBeforeHydration); }
public void TestDehydrateProjections() { if (_connectionString == null) { return; } // Create events store, put some events in var eventStore = new PostgresEventStore(null, _connectionString, "TestDehydrateProjections", true) as IEventStore; Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 1000; i++) { var dog = new DogAggregate(Guid.NewGuid(), "Dog name"); dog.Poop(2000); dog.Poop(1030); dog.Poop(1020); dog.Poop(1100); dog.Bark(1020); dog.Bark(1040); dog.Poop(1200); dog.Poop(1300); dog.Bark(1040); dog.Poop(1200); eventStore.Aggregates.Store(dog); } sw.Stop(); System.Diagnostics.Debug.WriteLine("Create 10000 events took: " + (sw.ElapsedMilliseconds) + " milliseconds"); // Create new instance of event store and dehydrate into in-memory projection var eventStore2 = new PostgresEventStore(null, _connectionString, "TestDehydrateProjections") as IEventStore; var poopProjection = new PoopProjection(); eventStore.Projections.Add(poopProjection); sw.Restart(); eventStore.DehydrateProjections(); sw.Stop(); System.Diagnostics.Debug.WriteLine("Dehydrate 10000 events took: " + (sw.ElapsedMilliseconds) + " milliseconds"); poopProjection.PoopReport.Count.Should().Be(1000); }
public void TestAggregateHydrationAndDehydration() { if (_connectionString == null) { return; } var eventStore = new PostgresEventStore(null, _connectionString, "TestAggregateHydrationAndDehydration", true) as IEventStore; var aggregateBeforeHydration = new DogAggregate(Guid.NewGuid(), "Snoopy"); aggregateBeforeHydration.Bark(100); aggregateBeforeHydration.Poop(1500); eventStore.Aggregates.Store(aggregateBeforeHydration); var dehydratedAggregate = eventStore.Aggregates.Load <DogAggregate>(aggregateBeforeHydration.Id); dehydratedAggregate.Should().BeEquivalentTo(aggregateBeforeHydration); }