public void ShouldAppendEventToPpenddingEventsQueue() { var expectedAggregatedId = Guid.NewGuid().ToString(); var fisrtEvent = new FakeCelebrityWasCreatedEvent(expectedAggregatedId, new { Id = expectedAggregatedId, Foo = "Bar", Bar = "Foo" }); var events = new Queue <ICelebrityEvent>(); events.Enqueue(fisrtEvent); var state = new FooBar(expectedAggregatedId); var fooBar = events.Reduce <FooBar>(state, (a, b) => { a.Foo = b.Data.Foo; a.Bar = b.Data.Bar; return(state); }); fooBar.RevertPropertyValues(); var pendingEvent = fooBar.PendingEvents.Should().HaveCount(1).And.Subject.First(); pendingEvent.AggregatedId.Should().Be(expectedAggregatedId); var data = (object)pendingEvent.Data; data.Should().Be(new { Id = expectedAggregatedId, Foo = "Foo", Bar = "Bar" }); }
public void ShouldGetStateFromEvent() { var @event = new FakeCelebrityWasCreatedEvent(Guid.NewGuid().ToString(), new { Foo = "Foo", Bar = "Bar" }); var state = @event.Data.GetState <FooBar>(); state.Foo.Should().Be("Foo"); state.Bar.Should().Be("Bar"); }
public void ShouldAppendEventToPpenddingEventsQueueA() { var expectedAggregatedId = Guid.NewGuid().ToString(); var fisrtEvent = new FakeCelebrityWasCreatedEvent(expectedAggregatedId, new { Id = expectedAggregatedId, Foo = "Bar", Bar = "Foo", Zoo = "Zoo" }); var events = new Queue <ICelebrityEvent>(); events.Enqueue(fisrtEvent); var exception = Assert.Throws <InvalidOperationException>(() => events.Reduce <FooBar>()); exception.Message.Should().Be($"The property \"Zoo\" can not be readable and writable"); }
public void ShouldReduceEventsToEntityInYourLastStateWhenExistCommitedEvents() { var expectedAggregatedId = Guid.NewGuid().ToString(); var events = new Queue <ICelebrityEvent>(); var fisrtEvent = new FakeCelebrityWasCreatedEvent(expectedAggregatedId, new { Foo = "Bar", Bar = "Foo" }); var secondEvent = new FakeCelebrityWasCreatedEvent(expectedAggregatedId, new { Foo = "Foo", Bar = "Bar" }); events.Enqueue(fisrtEvent); events.Enqueue(secondEvent); var reduced = events.Reduce <FooBar>(); reduced.Should().NotBeEquivalentTo(fisrtEvent.Data); reduced.Should().BeEquivalentTo(secondEvent.Data); }