public void verify_projection_up_to_certain_event()
        {
            var id = new TestEventUnfolderId(Interlocked.Increment(ref progressive));

            using (var stream = _eventStore.OpenStream("BLAH", id.AsString(), 0, Int32.MaxValue))
            {
                CommitOneValue(stream, 1);
                CommitOneValue(stream, 2);
                CommitOneValue(stream, 3);
            }

            var unfolder = sut.GetById <TestProjector, TestAggregateQueryModel>(id, 1);
            var rm       = unfolder.GetProjection();

            Assert.That(rm.Sum, Is.EqualTo(1));
            Assert.That(rm.ListOfInt, Is.EquivalentTo(new[] { 1 }));

            unfolder = sut.GetById <TestProjector, TestAggregateQueryModel>(id, 2);
            rm       = unfolder.GetProjection();
            Assert.That(rm.Sum, Is.EqualTo(3));
            Assert.That(rm.ListOfInt, Is.EquivalentTo(new[] { 1, 2 }));

            unfolder = sut.GetById <TestProjector, TestAggregateQueryModel>(id, 3);
            rm       = unfolder.GetProjection();
            Assert.That(rm.Sum, Is.EqualTo(6));
            Assert.That(rm.ListOfInt, Is.EquivalentTo(new[] { 1, 2, 3 }));
        }
        public void verify_snapshot_usage()
        {
            var id = new TestEventUnfolderId(Interlocked.Increment(ref progressive));

            using (var stream = _eventStore.OpenStream("BLAH", id.AsString(), 0, Int32.MaxValue))
            {
                CommitOneValue(stream, 1);
                CommitOneValue(stream, 2);
            }

            var      unfolder = sut.GetById <TestProjector, TestAggregateQueryModel>(id, 1);
            var      memento  = unfolder.GetSnapshot();
            Snapshot s        = new Snapshot(id.AsString(), 2, memento);

            using (var stream = _eventStore.OpenStream("BLAH", id.AsString(), 0, Int32.MaxValue))
            {
                CommitOneValue(stream, 3);
            }
            _persister.Load(null, 1, null).ReturnsForAnyArgs(s);

            unfolder = sut.GetById <TestProjector, TestAggregateQueryModel>(id, Int32.MaxValue);
            var rm = unfolder.GetProjection();

            Assert.That(rm.Sum, Is.EqualTo(6));
            Assert.That(rm.ListOfInt, Is.EquivalentTo(new[] { 1, 2, 3 }));
        }
        public void verify_snapshot_wrong_version_gets_deleted()
        {
            var id       = new TestEventUnfolderId(1);
            var unfolder = new TestProjector();
            var memento  = (EventUnfolderMemento)unfolder.GetSnapshot();

            memento.Signature = "OTHER"; //change the version of the memento.
            Snapshot s = new Snapshot(id, 2, memento);

            _persister.Load("", 1, "").ReturnsForAnyArgs(s);
            sut.GetById <TestProjector, TestAggregateQueryModel>(id, 200);
            _persister.Received().Clear(id, memento.Version, typeof(TestProjector).Name);
        }
        public void verify_snapshot_check_version()
        {
            var id       = new TestEventUnfolderId(1);
            var unfolder = new TestProjector();
            var memento  = (EventUnfolderMemento)unfolder.GetSnapshot();

            memento.Signature = "OTHER"; //change the version of the memento.
            Snapshot s = new Snapshot(id, 2, memento);

            _persister.Load("", 1, "").ReturnsForAnyArgs(s);
            sut.GetById <TestProjector, TestAggregateQueryModel>(id, 200);
            _eventStore.Received().OpenStream("BLAH", id, 0, 200);
        }
        public void verify_use_snapshot_strategy()
        {
            var id = new TestEventUnfolderId(Interlocked.Increment(ref progressive));

            using (var stream = _eventStore.OpenStream(id.AsString()))
            {
                CommitOneValue(stream, 42);
            }
            TestProjector.ShouldSnapshotReturn = true;
            sut.GetById <TestProjector, TestAggregateQueryModel>(id, Int32.MaxValue);
            TestProjector.ShouldSnapshotReturn = false;
            _persister.Received().Persist(Arg.Any <ISnapshot>(), Arg.Any <String>());
        }
        public void verify_basic_in_memory_projection()
        {
            var id = new TestEventUnfolderId(Interlocked.Increment(ref progressive));

            using (var stream = _eventStore.OpenStream("BLAH", id.AsString(), 0, Int32.MaxValue))
            {
                CommitOneValue(stream, 42);
            }

            var unfolder = sut.GetById <TestProjector, TestAggregateQueryModel>(id, Int32.MaxValue);
            var rm       = unfolder.GetProjection();

            Assert.That(rm.Sum, Is.EqualTo(42));
            Assert.That(rm.ListOfInt, Is.EquivalentTo(new[] { 42 }));
        }