public async Task SaveEvents_inserts_pending_event_entities_correctly() { // Arrange var created = fixture.Create <FakeUserCreated>(); var usernameChanged = fixture.Create <FakeUsernameChanged>(); var events = new DomainEvent[] { created, usernameChanged }; var correlationId = Guid.NewGuid(); RaiseEvents(userId, events); // Act await sut.SaveEvents <FakeUser>(events, correlationId); // Assert string partitionKey = PendingEventTableEntity.GetPartitionKey(typeof(FakeUser), userId); var query = new TableQuery <PendingEventTableEntity>().Where($"PartitionKey eq '{partitionKey}'"); IEnumerable <PendingEventTableEntity> pendingEvents = s_eventTable.ExecuteQuery(query); foreach (var t in pendingEvents.Zip(events, (pending, source) => new { Pending = pending, Source = source })) { var actual = new { t.Pending.RowKey, t.Pending.PersistentPartition, t.Pending.Version, t.Pending.CorrelationId, Message = serializer.Deserialize(t.Pending.EventJson) }; actual.ShouldBeEquivalentTo(new { RowKey = PendingEventTableEntity.GetRowKey(t.Source.Version), PersistentPartition = EventTableEntity.GetPartitionKey(typeof(FakeUser), userId), t.Source.Version, CorrelationId = correlationId, Message = t.Source }, opts => opts.RespectingRuntimeTypes()); } }
public void SaveEvents_fails_if_events_contains_null() { IFixture fixture = new Fixture().Customize(new AutoMoqCustomization()); IEnumerable <IDomainEvent> events = Enumerable .Repeat(fixture.Create <IDomainEvent>(), 10) .Concat(new[] { default(IDomainEvent) }) .OrderBy(_ => fixture.Create <int>()); Func <Task> action = () => _sut.SaveEvents <FakeUser>(events); action.ShouldThrow <ArgumentException>().Where(x => x.ParamName == "events"); }