Пример #1
0
        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");
        }