예제 #1
0
        public void Should_set_snapshot_version_on_save()
        {
            //Arrange
            var domainEvent = new TestDomainEvent();
            var sut         = new TestSnapshotAggregateRoot(Guid.NewGuid());

            sut.LoadFromHistory(new [] { domainEvent, domainEvent });

            //Act
            var(_, snapshotVersion) = ((ISnapshotableEntity)sut).TakeSnapshot();

            //Assert
            sut.Version.Should().Be(snapshotVersion);
        }
예제 #2
0
        public void Should_set_aggregate_version_on_load()
        {
            //Arrange
            var sut      = new TestSnapshotAggregateRoot(Guid.NewGuid());
            var snapshot = new TestSnapshot {
                Prop = "EEE"
            };
            var snapshotVersion = 5;

            //Act
            ((ISnapshotableEntity)sut).ApplySnapshot(snapshot, snapshotVersion);

            //Assert
            sut.Version.Should().Be(snapshotVersion);
        }
예제 #3
0
        public void Should_support_serialization()
        {
            //Arrange
            var sut      = new TestSnapshotAggregateRoot(Guid.NewGuid());
            var snapshot = new TestSnapshot();

            ((ISnapshotableEntity)sut).ApplySnapshot(snapshot, 5);

            //Act
            var serializedObject   = JsonConvert.SerializeObject(sut);
            var deserializedObject = JsonConvert.DeserializeObject <TestSnapshotAggregateRoot>(serializedObject);

            //Assert
            deserializedObject.Should().Be(sut);
        }
예제 #4
0
        public async Task Should_save_snapshot_in_snapshot_store_when_aggregate_is_saved()
        {
            //Arrange
            var snapshotStore = Mock.Of <ISnapshotStore>();
            var sut           = new EventSourcedRepository <TestSnapshotAggregateRoot>(Mock.Of <IEventStore>(), snapshotStore, Mock.Of <IMediator>(), new EventSourcingOptions {
                DefaultSnapshotVersionFrequency = 1
            }, Mock.Of <ILogger <EventSourcedRepository <TestSnapshotAggregateRoot> > >());

            var domainEvent  = Mock.Of <IDomainEvent>();
            var domainEvents = new List <IDomainEvent> {
                domainEvent
            };
            var testAggregate = new TestSnapshotAggregateRoot(Guid.NewGuid(), 1000, 1, 10, domainEvents);

            //Act
            await sut.SaveAsync(testAggregate, CancellationToken.None);

            //Assert
            Mock.Get(snapshotStore)
            .Verify(
                x => x.StoreSnapshotAsync(It.IsAny <SnapshotEnvelope>(), It.IsAny <CancellationToken>()),
                Times.Once);
        }
예제 #5
0
        public async Task Should_not_take_snapshot_below_custom_frequency()
        {
            //Arrange
            var snapshotStore = Mock.Of <ISnapshotStore>();
            var options       = new EventSourcingOptions {
                DefaultSnapshotVersionFrequency = 10
            };
            var sut = new EventSourcedRepository <TestSnapshotAggregateRoot>(Mock.Of <IEventStore>(), snapshotStore, Mock.Of <IMediator>(), options, Mock.Of <ILogger <EventSourcedRepository <TestSnapshotAggregateRoot> > >());

            var domainEvent  = Mock.Of <IDomainEvent>();
            var domainEvents = new List <IDomainEvent> {
                domainEvent
            };
            var testAggregate = new TestSnapshotAggregateRoot(Guid.NewGuid(), 2, 1, 2, domainEvents);

            //Act
            await sut.SaveAsync(testAggregate, CancellationToken.None);

            //Assert
            Mock.Get(snapshotStore)
            .Verify(
                x => x.StoreSnapshotAsync(It.IsAny <SnapshotEnvelope>(), It.IsAny <CancellationToken>()),
                Times.Never);
        }