public void Throws_exception_when_applying_unknown_event_on_aggregate_root()
        {
            var entity = new SomeDomainEntity();
            var domainEvent = new SomeDomainEvent();

            entity.Apply(domainEvent);
        }
        public void Event_handler_invoked_when_applying_domain_event_to_aggregate_root()
        {
            var entity = new SomeDomainEntityWithEvents();
            var domainEvent = new SomeDomainEvent();

            entity.Apply(domainEvent);

            entity.DomainEventHandlerInvoked.ShouldBeTrue("the eventhandler for the event was not invoked");
        }
        public void Other_handlers_not_invoked_when_publishing_event()
        {
            SomeOtherDomainEvent handledEvent = null;

            Action<SomeOtherDomainEvent> handler = e => { handledEvent = e; };
            var domainEvent = new SomeDomainEvent();

            _kernel.Bind<IDomainEventHandler<SomeOtherDomainEvent>>().ToConstant(new ActionEventHandler<SomeOtherDomainEvent>(handler));

            _bus.Publish(domainEvent);

            handledEvent.ShouldBeNull("The event handler was unexpectedly invoked");
        }
        public void Can_apply_domain_events_to_entity()
        {
            var entity = new SomeDomainEntityWithEvents();
            var domainEvent = new SomeDomainEvent();

            entity.Apply(domainEvent);

            var changes = entity.GetChanges();

            changes.ShouldNotBeNull();
            changes.Count().ShouldBeEqualTo(1, "Only one event should have been applied to aggregate");
            changes.First().ShouldBeSameAs(domainEvent, "The event applied to aggregate was not the one expected");
        }
        public void Create_sets_EventType_correctly()
        {
            IFixture        fixture     = new Fixture();
            SomeDomainEvent domainEvent = fixture.Create <SomeDomainEvent>();

            fixture.Inject <IDomainEvent>(domainEvent);

            var actual = PersistentEvent.Create(
                fixture.Create <Type>(),
                fixture.Create <Envelope <IDomainEvent> >(),
                new JsonMessageSerializer());

            actual.EventType.Should().Be(typeof(SomeDomainEvent).FullName);
        }
        public void Create_sets_RowKey_correctly()
        {
            IFixture        fixture     = new Fixture();
            SomeDomainEvent domainEvent = fixture.Create <SomeDomainEvent>();

            TestContext.WriteLine($"Version: {domainEvent.Version}");
            fixture.Inject <IDomainEvent>(domainEvent);

            var actual = PersistentEvent.Create(
                fixture.Create <Type>(),
                fixture.Create <Envelope <IDomainEvent> >(),
                new JsonMessageSerializer());

            actual.RowKey.Should().Be(PersistentEvent.GetRowKey(domainEvent.Version));
        }
        public void Handler_invoked_when_publishing_event()
        {
            SomeDomainEvent handledEvent = null;

            Action<SomeDomainEvent> actionHandler = e => { handledEvent = e; };

            _kernel.Bind<IDomainEventHandler<SomeDomainEvent>>().ToConstant(new ActionEventHandler<SomeDomainEvent>(actionHandler));

            var domainEvent = new SomeDomainEvent();

            _bus.Publish(domainEvent);

            handledEvent.ShouldNotBeNull("The event handler was not invoked");
            handledEvent.ShouldBeSameAs(domainEvent, "The event passed to the event handler was not the one expected");
        }
        public TextReader GetReader(Guid aId)
        {
            var ev = new SomeDomainEvent();

            var stream = new MemoryStream();

            var writer = new StreamWriter(stream);

            writer.Write(DomainEventSerializer.Serialize(ev));
            writer.Flush();

            stream.Position = 0;

            return new StreamReader(stream);
        }
Beispiel #9
0
        public void Events_are_published_to_bus_on_commit()
        {
            var session = new Session(this, this);
            var aggregate = new SomeDomainEntityWithEvents();

            session.Track(aggregate);

            var domainEvent = new SomeDomainEvent();
            aggregate.Apply(domainEvent);

            session.CommitChanges();

            PublishedEvents.Count().ShouldBeEqualTo(1);
            PublishedEvents.Pop().ShouldBeSameAs(domainEvent);
        }
Beispiel #10
0
        public void Can_commit_changes()
        {
            var session = new Session(this, this);
            var aggregate = new SomeDomainEntityWithEvents();

            session.Track(aggregate);

            var domainEvent = new SomeDomainEvent();
            aggregate.Apply(domainEvent);

            session.CommitChanges();

            _savedId.ShouldBeEqualTo(aggregate.Id);
            _savedEvents.Count().ShouldBeEqualTo(1);
            _savedEvents.First().ShouldBeSameAs(domainEvent);
        }
        public void FromEnvelope_generates_PendingEvent_correctly()
        {
            var domainEvent               = new SomeDomainEvent();
            var messageId                 = Guid.NewGuid();
            var correlationId             = Guid.NewGuid();
            var envelope                  = new Envelope(messageId, domainEvent, correlationId: correlationId);
            IMessageSerializer serializer = new JsonMessageSerializer();

            var actual = PendingEvent.FromEnvelope(envelope, serializer);

            actual.AggregateId.Should().Be(domainEvent.SourceId);
            actual.Version.Should().Be(domainEvent.Version);
            actual.MessageId.Should().Be(messageId);
            actual.CorrelationId.Should().Be(correlationId);
            actual.EventJson.Should().Be(serializer.Serialize(domainEvent));
        }
        public void Create_sets_PartitionKey_correctly()
        {
            IFixture        fixture     = new Fixture();
            Type            sourceType  = fixture.Create <Type>();
            SomeDomainEvent domainEvent = fixture.Create <SomeDomainEvent>();

            TestContext.WriteLine($"SourceId: {domainEvent.SourceId}");
            fixture.Inject <IDomainEvent>(domainEvent);

            var actual = PersistentEvent.Create(
                sourceType,
                fixture.Create <Envelope <IDomainEvent> >(),
                new JsonMessageSerializer());

            actual.PartitionKey.Should().Be(AggregateEntity.GetPartitionKey(sourceType, domainEvent.SourceId));
        }
        public void Create_sets_Contributor_correctly()
        {
            IFixture        fixture     = new Fixture();
            SomeDomainEvent domainEvent = fixture.Create <SomeDomainEvent>();

            fixture.Inject <IDomainEvent>(domainEvent);
            Envelope <IDomainEvent> envelope = fixture.Create <Envelope <IDomainEvent> >();

            TestContext.WriteLine($"Contributor: {envelope.Contributor}");

            var actual = PersistentEvent.Create(
                fixture.Create <Type>(),
                envelope,
                new JsonMessageSerializer());

            actual.Contributor.Should().Be(envelope.Contributor);
        }
Beispiel #14
0
        public void Create_sets_OperationId_correctly()
        {
            IFixture        fixture     = new Fixture();
            SomeDomainEvent domainEvent = fixture.Create <SomeDomainEvent>();

            fixture.Inject <IDomainEvent>(domainEvent);
            Envelope <IDomainEvent> envelope = fixture.Create <Envelope <IDomainEvent> >();

            TestContext.WriteLine($"OperationId: {envelope.OperationId}");

            var actual = PendingEvent.Create(
                fixture.Create <Type>(),
                envelope,
                new JsonMessageSerializer());

            actual.OperationId.Should().Be(envelope.OperationId);
        }
 public void ReadSetup()
 {
     using (var stream = _eventStore.OpenStream(StreamId, 0, int.MaxValue))
     {
         // add XXX commits to the stream
         for (int i = 0; i < 500; i++)
         {
             var @event = new SomeDomainEvent {
                 Value = i.ToString()
             };
             stream.Add(new EventMessage {
                 Body = @event
             });
             stream.CommitChanges(Guid.NewGuid());
         }
     }
 }
        public void Create_sets_EventJson_correctly()
        {
            IFixture        fixture     = new Fixture();
            SomeDomainEvent domainEvent = fixture.Create <SomeDomainEvent>();

            fixture.Inject <IDomainEvent>(domainEvent);
            var serializer = new JsonMessageSerializer();

            var actual = PersistentEvent.Create(
                fixture.Create <Type>(),
                fixture.Create <Envelope <IDomainEvent> >(),
                serializer);

            object restored = serializer.Deserialize(actual.EventJson);

            restored.Should().BeOfType <SomeDomainEvent>();
            restored.ShouldBeEquivalentTo(domainEvent);
        }
Beispiel #17
0
        public void ReadSetup()
        {
            _eventStore.Advanced.Purge();

            using (var stream = _eventStore.CreateStream(StreamId))
            {
                // add XXX commits to the stream
                for (int i = 0; i < CommitsToWrite; i++)
                {
                    var @event = new SomeDomainEvent {
                        Value = i.ToString()
                    };
                    stream.Add(new EventMessage {
                        Body = @event
                    });
                    stream.CommitChanges(Guid.NewGuid());
                }
            }
        }
 public void WriteToStream()
 {
     // we can call CreateStream(StreamId) if we know there isn't going to be any data.
     // or we can call OpenStream(StreamId, 0, int.MaxValue) to read all commits,
     // if no commits exist then it creates a new stream for us.
     using (var stream = _eventStore.OpenStream(StreamId, 0, int.MaxValue))
     {
         // add XXX commits to the stream
         for (int i = 0; i < CommitsToWrite; i++)
         {
             var @event = new SomeDomainEvent {
                 Value = i.ToString()
             };
             stream.Add(new EventMessage {
                 Body = @event
             });
             stream.CommitChanges(Guid.NewGuid());
         }
     }
 }
        public void Multiple_handlers_invoked_when_publishing_event()
        {
            SomeDomainEvent handledEvent = null;
            SomeDomainEvent secondHandledEvent = null;

            Action<SomeDomainEvent> handler = e => { handledEvent = e; };
            Action<SomeDomainEvent> secondHandler = e => { secondHandledEvent = e; };

            var domainEvent = new SomeDomainEvent();

            _kernel.Bind<IDomainEventHandler<SomeDomainEvent>>().ToConstant(new ActionEventHandler<SomeDomainEvent>(handler));
            _kernel.Bind<IDomainEventHandler<SomeDomainEvent>>().ToConstant(new ActionEventHandler<SomeDomainEvent>(secondHandler));

            _bus.Publish(domainEvent);

            handledEvent.ShouldNotBeNull("The first event handler was not invoked");
            secondHandledEvent.ShouldNotBeNull("The second event handler was not invoked");

            handledEvent.ShouldBeSameAs(domainEvent, "The event passed to the first event handler was not the one expected");
            secondHandledEvent.ShouldBeSameAs(domainEvent, "The event passed to the second event handler was not the one expected");
        }
 private void Handle(SomeDomainEvent domainEvent)
 {
     Property = domainEvent.Property;
 }