public void Should_be_able_to_remove_an_existing_event_stream()
        {
            IEventStore store = new EventStore();
            var aggregate = new Aggregate(Guid.NewGuid());
            var eventStream = store.Get(aggregate.Id);

            for (var i = 0; i < 100000; i++)
            {
                var moveCommand = new MoveCommand
                {
                    Address = string.Format("Address-{0}", i),
                    DateMoved = DateTime.Now
                };

                eventStream.AddEvent(aggregate.Move(moveCommand));

                if (eventStream.ShouldSnapshot(100))
                {
                    eventStream.AddSnapshot(aggregate.State);
                }
            }

            store.SaveEventStream(eventStream);

            eventStream = store.Get(aggregate.Id);

            Assert.IsFalse(eventStream.IsEmpty);

            store.Remove(aggregate.Id);

            eventStream = store.Get(aggregate.Id);

            Assert.IsTrue(eventStream.IsEmpty);
        }
        public void Should_be_able_to_use_event_stream()
        {
            IEventStore store = new EventStore();
            var aggregate = new Aggregate(Guid.NewGuid());
            var eventStream = store.Get(aggregate.Id);

            var moveCommand = new MoveCommand();

            for (var i = 0; i < 100000; i++)
            {
                moveCommand = new MoveCommand
                {
                    Address = string.Format("Address-{0}", i),
                    DateMoved = DateTime.Now
                };

                eventStream.AddEvent(aggregate.Move(moveCommand));
            }

            store.SaveEventStream(eventStream);

            aggregate = new Aggregate(aggregate.Id);
            eventStream = store.Get(aggregate.Id);

            eventStream.Apply(aggregate);

            Assert.AreEqual(moveCommand.Address, aggregate.State.Location.Address);
            Assert.AreEqual(moveCommand.DateMoved, aggregate.State.Location.DateMoved);
        }