public async Task SaveChanges_PublishedEventsHaveMetadata() { TestAggregate testAggregate = new TestAggregate(Guid.NewGuid()); sut.Add(testAggregate); testAggregate.Do(); var event1 = testAggregate.UncommittedEvents.First(); List <IEventMessage> publishedMessages = new List <IEventMessage>(); publishEventBuffer.WhenForAnyArgs(x => x.PushEvent(null)) .Do(ci => publishedMessages.Add(ci.ArgAt <IEventMessage>(0))); await sut.SaveChangesAsync(); publishedMessages.Should().HaveCount(1); publishedMessages[0].Event.Should().Be(event1); publishedMessages[0].Metadata.Should().Contain(x => x.Key == BasicEventMetadataNames.EventId && Guid.Parse(x.Value) != Guid.Empty); publishedMessages[0].Metadata.Should().Contain(x => x.Key == BasicEventMetadataNames.AggregateVersion && int.Parse(x.Value) == 1); publishedMessages[0].Metadata.Should().Contain(x => x.Key == BasicEventMetadataNames.AggregateClassId && Guid.Parse(x.Value) == Guid.Parse(TestAggregateClassIdString)); // TODO TenantId }
public async Task SaveChanges_RemovesDeleted() { TestAggregate testAggregate = new TestAggregate(Guid.NewGuid()); crudRepository.Add(testAggregate); await crudRepository.SaveChangesAsync(); testAggregate = await sut.GetAsync <TestAggregate>(testAggregate.Id); testAggregate.Do(); var event1 = testAggregate.UncommittedEvents.First(); testAggregate.Remove(); await sut.SaveChangesAsync(); Received.InOrder(() => { crudRepository.SaveChangesAsync(); crudRepository.Remove(testAggregate); crudRepository.SaveChangesAsync(); }); publishEventBuffer.Received(1).PushEvent(Arg.Is <IEventMessage>(x => x.Event == event1)); crudRepository.GetEntityState(testAggregate).Should().Be(EntityState.Detached); }
public void Publish_ThrowsIfDeleted() { TestAggregate sut = new TestAggregate(Guid.NewGuid()); sut.Delete(); Assert.Throws <InvalidOperationException>(() => { sut.Do(); }); }
public async Task SaveChanges_PushesEventsForPublishing() { TestAggregate testAggregate = new TestAggregate(Guid.NewGuid()); sut.Add(testAggregate); testAggregate.Do(); var event1 = testAggregate.UncommittedEvents.First(); await sut.SaveChangesAsync(); publishEventBuffer.Received(1).PushEvent(Arg.Is <IEventMessage>(x => x.Event == event1)); }
public async Task SaveChanges_CommitsAggregates() { TestAggregate testAggregate = Substitute.ForPartsOf <TestAggregate>(new object[] { Guid.NewGuid() }); domainClasses.Add(new DomainClassInfo(TestAggregateClassId, null, testAggregate.GetType())); sut.Add(testAggregate); testAggregate.Do(); await sut.SaveChangesAsync(); testAggregate.Received(1).Commit(); }