Ejemplo n.º 1
0
        public async void GivenAnIntervalStrategy_ShouldSaveSnapshotAccordingly()
        {
            var state       = 1;
            var provider    = new InMemoryProvider();
            var actorId     = Guid.NewGuid().ToString();
            var persistence = Persistence.WithEventSourcingAndSnapshotting(provider, provider, actorId,
                                                                           @event => { state = state * (@event.Data as Multiplied).Amount; },
                                                                           snapshot => { state = (int)snapshot.State; },
                                                                           new IntervalStrategy(1), () => state);

            await persistence.PersistEventAsync(new Multiplied { Amount = 2 });

            await persistence.PersistEventAsync(new Multiplied { Amount = 2 });

            await persistence.PersistEventAsync(new Multiplied { Amount = 2 });

            var snapshots = provider.GetSnapshots(actorId);

            Assert.Equal(3, snapshots.Count);
            Assert.Equal(2, snapshots[1]);
            Assert.Equal(4, snapshots[2]);
            Assert.Equal(8, snapshots[3]);
        }