Exemple #1
0
        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
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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();
        }