public void ShouldAppendDomainEventToEndOfStream()
            {
                TestAggregateRoot aggregateRoot = new TestAggregateRoot(Guid.NewGuid());

                var stream = new DomainEventStream(aggregateRoot.Id);

                stream.Should().HaveCount(0);

                var aggregateRootDomainEvent = new AggregateRootChangedDomainEvent(aggregateRoot.Id, Guid.NewGuid());
                IDomainEventStream result    = stream.AppendDomainEvent(aggregateRootDomainEvent);

                result.Should().HaveCount(1);
            }
            public void ShouldThrowIfAggregateRootIdDoesNotMatch()
            {
                TestAggregateRoot aggregateRoot1 = new TestAggregateRoot(Guid.NewGuid());
                TestAggregateRoot aggregateRoot2 = new TestAggregateRoot(Guid.NewGuid());

                var aggregateRoot1Stream = new DomainEventStream(aggregateRoot1.Id);

                aggregateRoot1Stream.Should().HaveCount(0);

                var aggregateRoot2DomainEvent = new AggregateRootChangedDomainEvent(aggregateRoot2.Id, Guid.NewGuid());

                // Append domain event of aggregate 2 to stream of aggregate 1.
                aggregateRoot1Stream.Invoking(s => s.AppendDomainEvent(aggregateRoot2DomainEvent)).Should().Throw <InvalidOperationException>();
            }
            public void ShouldBeEqualToNumberOfDomainEvents()
            {
                TestAggregateRoot aggregateRoot = new TestAggregateRoot(Guid.NewGuid());

                // 3 domain events.
                var domainEvent1 = new AggregateRootChangedDomainEvent(aggregateRoot.Id, Guid.NewGuid());
                var domainEvent2 = new AggregateRootChangedDomainEvent(aggregateRoot.Id, Guid.NewGuid());
                var domainEvent3 = new AggregateRootChangedDomainEvent(aggregateRoot.Id, Guid.NewGuid());

                DomainEventStream stream = new DomainEventStream(aggregateRoot.Id, new[]
                {
                    domainEvent1, domainEvent2, domainEvent3
                });

                stream.DomainEventCount.Should().Be(3);
            }