private async Task <IEnumerable <IDomainEvent> > Load <T>( Guid sourceId, int afterVersion, CancellationToken cancellationToken) where T : class, IEventSourced { string filter = PersistentEvent.GetFilter(typeof(T), sourceId, afterVersion); var query = new TableQuery <PersistentEvent> { FilterString = filter }; IEnumerable <PersistentEvent> events = await _eventTable .ExecuteQuery(query, cancellationToken) .ConfigureAwait(false); return(new List <IDomainEvent>(events .Select(e => e.EventJson) .Select(_serializer.Deserialize) .Cast <IDomainEvent>())); }
public async Task SaveEvents_inserts_persistent_event_entities_correctly() { // Arrange var fixture = new Fixture(); var user = new FakeUser(Guid.NewGuid(), fixture.Create <string>()); user.ChangeUsername(fixture.Create <string>()); IList <IDomainEvent> domainEvents = user.FlushPendingEvents().ToList(); string operationId = fixture.Create <string>(); var correlationId = Guid.NewGuid(); string contributor = fixture.Create <string>(); // Act await _sut.SaveEvents <FakeUser>(domainEvents, operationId, correlationId, contributor); // Assert string filter = PersistentEvent.GetFilter(typeof(FakeUser), user.Id); var query = new TableQuery <PersistentEvent> { FilterString = filter }; IEnumerable <PersistentEvent> actual = await s_eventTable.ExecuteQuerySegmentedAsync(query, default); actual.ShouldAllBeEquivalentTo( from domainEvent in domainEvents let envelope = new Envelope <IDomainEvent>( Guid.NewGuid(), domainEvent, operationId, correlationId, contributor) select PersistentEvent.Create(typeof(FakeUser), envelope, _serializer), opts => opts .Excluding(e => e.MessageId) .Excluding(e => e.Timestamp) .Excluding(e => e.ETag) .WithStrictOrdering()); }