public async Task ShouldAddNewAggregate()
        {
            // Arrange
            var aggregate = new TestAggregate();

            // Act
            await _sut.Save(aggregate);

            // Assert
            var streamId = _sut.GetStreamId(aggregate);
            var streams  = await _streamStore.ListStreams(Pattern.StartsWith(streamId));

            streams.StreamIds.Length.ShouldBe(1);
            var events = (await _streamStore.ReadStreamForwards(streamId, StreamVersion.Start, 1)).Messages;

            (await Task.WhenAll(events.Select(@event => @event.ToEvent(CancellationToken.None))))
            .All(@event => @event.GetType() == typeof(TestEvent)).ShouldBeTrue();
        }
        public async Task ShouldAddNewEventToExistingAggregate()
        {
            // Arrange
            var aggregate = new TestAggregate();
            await _sut.Save(aggregate);

            // Act
            aggregate = await _sut.GetById <TestAggregate>(aggregate.Id, CancellationToken.None);

            aggregate.SecondaryEvent();
            await _sut.Save(aggregate);

            // Assert
            var streamId = _sut.GetStreamId(aggregate);
            var events   = (await _streamStore.ReadStreamForwards(streamId, StreamVersion.Start, 100)).Messages;

            events.Length.ShouldBe(2);
            (await Task.WhenAll(events.Select(@event => @event.ToEvent(CancellationToken.None))))
            .All(@event => @event.GetType() == typeof(TestEvent) || @event.GetType() == typeof(SecondaryTestEvent)).ShouldBeTrue();
        }