public void capture_events_to_a_new_stream_and_fetch_the_events_back()
        {
            var schema = _container.GetInstance<IDocumentSchema>();
            var quest = schema.Events.StreamMappingFor<Quest>();

            quest.AddEvent(typeof(MembersJoined));
            quest.AddEvent(typeof(MembersDeparted));


            _container.GetInstance<IDocumentCleaner>().CompletelyRemoveAll();

            _container.GetInstance<IManagedConnection>().Execute(SchemaBuilder.GetText("mt_stream"));

            var events = _container.GetInstance<Marten.Events.EventStore>();


            var joined = new MembersJoined { Members = new string[] { "Rand", "Matt", "Perrin", "Thom" } };
            var departed = new MembersDeparted { Members = new[] { "Thom" } };

            var id = events.StartStream<Quest>(joined, departed);

            var streamEvents = events.FetchStream<Quest>(id);

            streamEvents.Count().ShouldBe(2);
            streamEvents.ElementAt(0).ShouldBeOfType<MembersJoined>();
            streamEvents.ElementAt(1).ShouldBeOfType<MembersDeparted>();
        }
Exemple #2
0
        public void capture_events_to_an_existing_stream_and_fetch_the_events_back(DocumentTracking sessionType)
        {
            var store = InitStore();

            var id = Guid.NewGuid();
            var started = new QuestStarted();

            using (var session = store.OpenSession(sessionType))
            {
                session.Events.StartStream<Quest>(id, started);
                session.SaveChanges();
            }

            using (var session = store.OpenSession(sessionType))
            {
                var joined = new MembersJoined { Members = new string[] { "Rand", "Matt", "Perrin", "Thom" } };
                var departed = new MembersDeparted { Members = new[] { "Thom" } };

                session.Events.Append(id, joined);
                session.Events.Append(id, departed);

                session.SaveChanges();

                var streamEvents = session.Events.FetchStream(id);

                streamEvents.Count().ShouldBe(3);
                streamEvents.ElementAt(0).Data.ShouldBeOfType<QuestStarted>();
                streamEvents.ElementAt(0).Version.ShouldBe(1);
                streamEvents.ElementAt(1).Data.ShouldBeOfType<MembersJoined>();
                streamEvents.ElementAt(1).Version.ShouldBe(2);
                streamEvents.ElementAt(2).Data.ShouldBeOfType<MembersDeparted>();
                streamEvents.ElementAt(2).Version.ShouldBe(3);
            }
        }
        public async Task capture_events_to_a_new_stream_and_fetch_the_events_back_async(DocumentTracking sessionType)
        {
            var store = InitStore();


            using (var session = store.OpenSession(sessionType))
            {
                // SAMPLE: start-stream-with-aggregate-type
                var joined = new MembersJoined { Members = new[] { "Rand", "Matt", "Perrin", "Thom" } };
                var departed = new MembersDeparted { Members = new[] { "Thom" } };

                var id = session.Events.StartStream<Quest>(joined, departed);
                await session.SaveChangesAsync();
                // ENDSAMPLE

                var streamEvents = await session.Events.FetchStreamAsync(id);

                streamEvents.Count().ShouldBe(2);
                streamEvents.ElementAt(0).Data.ShouldBeOfType<MembersJoined>();
                streamEvents.ElementAt(0).Version.ShouldBe(1);
                streamEvents.ElementAt(1).Data.ShouldBeOfType<MembersDeparted>();
                streamEvents.ElementAt(1).Version.ShouldBe(2);

                streamEvents.Each(e => e.Timestamp.ShouldNotBe(default(DateTimeOffset)));
            }
        }
        public void running_synchronously()
        {
            var logger = new RecordingSessionLogger();

            Guid streamId = Guid.NewGuid();

            using (var session = theStore.OpenSession())
            {
                session.Logger = logger;

                var joined = new MembersJoined { Members = new[] { "Rand", "Matt", "Perrin", "Thom" } };
                var departed = new MembersDeparted { Members = new[] { "Thom" } };

                session.Events.StartStream<Quest>(streamId, joined, departed);
                session.SaveChanges();

                var events = logger.LastCommit.GetEvents().ToArray();
                events.Select(x => x.Version)
                    .ShouldHaveTheSameElementsAs(1, 2);

                events.Each(x => x.Sequence.ShouldBeGreaterThan(0L));

                events.Select(x => x.Sequence).Distinct().Count().ShouldBe(2);
            }

            using (var session = theStore.OpenSession())
            {
                session.Logger = logger;

                var joined2 = new MembersJoined { Members = new[] { "Egwene" } };
                var departed2 = new MembersDeparted { Members = new[] { "Perrin" } };

                session.Events.Append(streamId, joined2, departed2);
                session.SaveChanges();

                logger.LastCommit.GetEvents().Select(x => x.Version)
                    .ShouldHaveTheSameElementsAs(3, 4);
            }

            using (var session = theStore.OpenSession())
            {
                session.Logger = logger;

                var joined3 = new MembersJoined { Members = new[] { "Egwene" } };
                var departed3 = new MembersDeparted { Members = new[] { "Perrin" } };

                session.Events.Append(streamId, joined3, departed3);
                session.SaveChanges();

                logger.LastCommit.GetEvents().Select(x => x.Version)
                    .ShouldHaveTheSameElementsAs(5, 6);
            }
        }
        public void should_not_append_events_when_unexpected_max_version()
        {
            var joined = new MembersJoined {
                Members = new string[] { "Rand", "Matt", "Perrin", "Thom" }
            };
            var departed = new MembersDeparted {
                Members = new[] { "Thom" }
            };

            var stream = theSession.Events.StartStream <Quest>(joined);

            theSession.SaveChanges();

            theSession.Events.Append(stream, 2, departed);

            using (var session = theStore.OpenSession())
            {
                var joined3 = new MembersJoined {
                    Members = new[] { "Egwene" }
                };
                var departed3 = new MembersDeparted {
                    Members = new[] { "Perrin" }
                };

                session.Events.Append(stream, joined3, departed3);
                session.SaveChanges();
            }

            Assert.Throws <EventStreamUnexpectedMaxEventIdException>(() => theSession.SaveChanges());

            using (var session = theStore.OpenSession())
            {
                var state = session.Events.FetchStreamState(stream);

                state.Id.ShouldBe(stream);
                state.Version.ShouldBe(3);
            }
        }
        public async Task delete_stream_by_guid_id_async(TenancyStyle tenancyStyle)
        {
            StoreOptions(_ => _.Events.TenancyStyle = tenancyStyle);

            var stream1 = Guid.NewGuid();
            var stream2 = Guid.NewGuid();

            using (var session = theStore.LightweightSession())
            {
                var joined = new MembersJoined {
                    Members = new[] { "Rand", "Matt", "Perrin", "Thom" }
                };
                var departed = new MembersDeparted {
                    Members = new[] { "Thom" }
                };

                session.Events.Append(stream1, joined, departed);

                var joined2 = new MembersJoined {
                    Members = new[] { "Rand", "Matt", "Perrin", "Thom" }
                };
                var departed2 = new MembersDeparted {
                    Members = new[] { "Thom" }
                };

                session.Events.Append(stream2, joined2, departed2);

                await session.SaveChangesAsync();
            }

            await theStore.Advanced.Clean.DeleteSingleEventStreamAsync(stream1);

            using (var session = theStore.LightweightSession())
            {
                session.Events.QueryAllRawEvents().ToList().All(x => x.StreamId == stream2)
                .ShouldBeTrue();
            }
        }
Exemple #7
0
        public void capture_events_to_an_existing_stream_and_fetch_the_events_back(DocumentTracking sessionType)
        {
            var store = InitStore();

            var id      = Guid.NewGuid();
            var started = new QuestStarted();

            using (var session = store.OpenSession(sessionType))
            {
                session.Events.StartStream <Quest>(id, started);
                session.SaveChanges();
            }

            using (var session = store.OpenSession(sessionType))
            {
                var joined = new MembersJoined {
                    Members = new[] { "Rand", "Matt", "Perrin", "Thom" }
                };
                var departed = new MembersDeparted {
                    Members = new[] { "Thom" }
                };

                session.Events.Append(id, joined);
                session.Events.Append(id, departed);

                session.SaveChanges();

                var streamEvents = session.Events.FetchStream(id);

                streamEvents.Count().ShouldBe(3);
                streamEvents.ElementAt(0).Data.ShouldBeOfType <QuestStarted>();
                streamEvents.ElementAt(0).Version.ShouldBe(1);
                streamEvents.ElementAt(1).Data.ShouldBeOfType <MembersJoined>();
                streamEvents.ElementAt(1).Version.ShouldBe(2);
                streamEvents.ElementAt(2).Data.ShouldBeOfType <MembersDeparted>();
                streamEvents.ElementAt(2).Version.ShouldBe(3);
            }
        }
Exemple #8
0
        public void should_check_max_event_id_on_append_with_string_identifier()
        {
            StoreOptions(_ => _.Events.StreamIdentity = StreamIdentity.AsString);

            var joined = new MembersJoined {
                Members = new string[] { "Rand", "Matt", "Perrin", "Thom" }
            };
            var departed = new MembersDeparted {
                Members = new[] { "Thom" }
            };

            var stream = "First";

            theSession.Events.Append(stream, joined);
            theSession.Events.Append(stream, 2, departed);

            theSession.SaveChanges();

            var state = theSession.Events.FetchStreamState(stream);

            state.Key.ShouldBe(stream);
            state.Version.ShouldBe(2);
        }
Exemple #9
0
        public void capture_events_to_an_existing_stream_and_fetch_the_events_back_in_another_database_schema()
        {
            var store = InitStore("event_store");

            var id      = "Fifteen";
            var started = new QuestStarted();

            using (var session = store.OpenSession())
            {
                session.Events.StartStream <Quest>(id, started);
                session.SaveChanges();
            }

            using (var session = store.OpenSession())
            {
                var joined = new MembersJoined {
                    Members = new[] { "Rand", "Matt", "Perrin", "Thom" }
                };
                var departed = new MembersDeparted {
                    Members = new[] { "Thom" }
                };

                session.Events.Append(id, joined, departed);

                session.SaveChanges();

                var streamEvents = session.Events.FetchStream(id);

                streamEvents.Count().ShouldBe(3);
                streamEvents.ElementAt(0).Data.ShouldBeOfType <QuestStarted>();
                streamEvents.ElementAt(0).Version.ShouldBe(1);
                streamEvents.ElementAt(1).Data.ShouldBeOfType <MembersJoined>();
                streamEvents.ElementAt(1).Version.ShouldBe(2);
                streamEvents.ElementAt(2).Data.ShouldBeOfType <MembersDeparted>();
                streamEvents.ElementAt(2).Version.ShouldBe(3);
            }
        }
        public void delete_stream_by_guid_id()
        {
            var stream1 = Guid.NewGuid();
            var stream2 = Guid.NewGuid();

            using (var session = theStore.LightweightSession())
            {
                var joined = new MembersJoined {
                    Members = new[] { "Rand", "Matt", "Perrin", "Thom" }
                };
                var departed = new MembersDeparted {
                    Members = new[] { "Thom" }
                };

                session.Events.Append(stream1, joined, departed);

                var joined2 = new MembersJoined {
                    Members = new[] { "Rand", "Matt", "Perrin", "Thom" }
                };
                var departed2 = new MembersDeparted {
                    Members = new[] { "Thom" }
                };

                session.Events.Append(stream2, joined2, departed2);

                session.SaveChanges();
            }

            theStore.Advanced.Clean.DeleteSingleEventStream(stream1);


            using (var session = theStore.LightweightSession())
            {
                session.Events.QueryAllRawEvents().ToList().All(x => x.StreamId == stream2)
                .ShouldBeTrue();
            }
        }
        public void capture_events_to_a_new_stream_and_fetch_the_events_back()
        {
            var store = DocumentStore.For(_ =>
            {
                _.AutoCreateSchemaObjects = true;

                _.Connection(ConnectionSource.ConnectionString);

                _.Events.EventMappingFor(typeof(MembersJoined));
                _.Events.EventMappingFor(typeof(MembersDeparted));
            });

            store.Advanced.Clean.CompletelyRemoveAll();

            // TODO -- REMOVE THIS WHEN IT IS SMARTER!
            store.EventStore.RebuildEventStoreSchema();

            using (var session = store.OpenSession())
            {
                var joined = new MembersJoined {
                    Members = new string[] { "Rand", "Matt", "Perrin", "Thom" }
                };
                var departed = new MembersDeparted {
                    Members = new[] { "Thom" }
                };

                var id = session.Events.StartStream <Quest>(joined, departed);
                session.SaveChanges();

                var streamEvents = session.Events.FetchStream <Quest>(id);

                streamEvents.Count().ShouldBe(2);
                streamEvents.ElementAt(0).ShouldBeOfType <MembersJoined>();
                streamEvents.ElementAt(1).ShouldBeOfType <MembersDeparted>();
            }
        }
        public void capture_events_to_a_new_stream_and_fetch_the_events_back(DocumentTracking sessionType)
        {
            var store = InitStore();


            using (var session = store.OpenSession(sessionType))
            {
                // SAMPLE: start-stream-with-aggregate-type
                var joined = new MembersJoined { Members = new[] { "Rand", "Matt", "Perrin", "Thom" } };
                var departed = new MembersDeparted { Members = new[] { "Thom" } };

                var id = session.Events.StartStream<Quest>(joined, departed);
                session.SaveChanges();
                // ENDSAMPLE

                var streamEvents = session.Events.FetchStream(id);

                streamEvents.Count().ShouldBe(2);
                streamEvents.ElementAt(0).Data.ShouldBeOfType<MembersJoined>();
                streamEvents.ElementAt(0).Version.ShouldBe(1);
                streamEvents.ElementAt(1).Data.ShouldBeOfType<MembersDeparted>();
                streamEvents.ElementAt(1).Version.ShouldBe(2);
            }
        }
Exemple #13
0
 public void Apply(MembersDeparted departed)
 {
     _members.RemoveAll(x => departed.Members.Contains(x));
 }
Exemple #14
0
        public void capture_events_to_a_new_stream_and_fetch_the_events_back_with_stream_id_provided_in_another_database_schema(DocumentTracking sessionType)
        {
            var store = InitStore("event_store");

            using (var session = store.OpenSession(sessionType))
            {
                var joined = new MembersJoined { Members = new string[] { "Rand", "Matt", "Perrin", "Thom" } };
                var departed = new MembersDeparted { Members = new[] { "Thom" } };

                var id = Guid.NewGuid();
                session.Events.StartStream<Quest>(id, joined, departed);
                session.SaveChanges();

                var streamEvents = session.Events.FetchStream(id);

                streamEvents.Count().ShouldBe(2);
                streamEvents.ElementAt(0).Data.ShouldBeOfType<MembersJoined>();
                streamEvents.ElementAt(0).Version.ShouldBe(1);
                streamEvents.ElementAt(1).Data.ShouldBeOfType<MembersDeparted>();
                streamEvents.ElementAt(1).Version.ShouldBe(2);
            }
        }
 public void MembersDepartedAt(string[] names, int day, string location)
 {
     var @event = new MembersDeparted {Day = day, Members = names, Location = location};
     _events.Add(@event);
 }
        public void running_synchronously()
        {
            var logger = new RecordingSessionLogger();

            Guid streamId = Guid.NewGuid();

            using (var session = theStore.OpenSession())
            {
                session.Logger = logger;

                var joined = new MembersJoined {
                    Members = new[] { "Rand", "Matt", "Perrin", "Thom" }
                };
                var departed = new MembersDeparted {
                    Members = new[] { "Thom" }
                };

                session.Events.StartStream <Quest>(streamId, joined, departed);
                session.SaveChanges();

                var events = logger.LastCommit.GetEvents().ToArray();
                events.Select(x => x.Version)
                .ShouldHaveTheSameElementsAs(1, 2);

                events.Each(x => x.Sequence.ShouldBeGreaterThan(0L));

                events.Select(x => x.Sequence).Distinct().Count().ShouldBe(2);
            }

            using (var session = theStore.OpenSession())
            {
                session.Logger = logger;

                var joined2 = new MembersJoined {
                    Members = new[] { "Egwene" }
                };
                var departed2 = new MembersDeparted {
                    Members = new[] { "Perrin" }
                };

                session.Events.Append(streamId, joined2, departed2);
                session.SaveChanges();

                logger.LastCommit.GetEvents().Select(x => x.Version)
                .ShouldHaveTheSameElementsAs(3, 4);
            }

            using (var session = theStore.OpenSession())
            {
                session.Logger = logger;

                var joined3 = new MembersJoined {
                    Members = new[] { "Egwene" }
                };
                var departed3 = new MembersDeparted {
                    Members = new[] { "Perrin" }
                };

                session.Events.Append(streamId, joined3, departed3);
                session.SaveChanges();

                logger.LastCommit.GetEvents().Select(x => x.Version)
                .ShouldHaveTheSameElementsAs(5, 6);
            }
        }
        public void assert_on_max_event_id_on_event_stream_append(
            DocumentTracking sessionType)
        {
            var store = InitStore("event_store");

            var id = Guid.NewGuid();
            var started = new QuestStarted();
            
            using (var session = store.OpenSession(sessionType))
            {
                // SAMPLE: append-events-assert-on-eventid
                session.Events.StartStream<Quest>(id, started);
                session.SaveChanges();

                var joined = new MembersJoined { Members = new[] { "Rand", "Matt", "Perrin", "Thom" } };
                var departed = new MembersDeparted { Members = new[] { "Thom" } };

                // Events are appended into the stream only if the maximum event id for the stream
                // would be 3 after the append operation.
                session.Events.Append(id, 3, joined, departed);

                session.SaveChanges();
                // ENDSAMPLE
            }
        }
        public void capture_events_to_a_new_stream_and_fetch_the_events_back_sync_with_linq(DocumentTracking sessionType)
        {
            var store = InitStore();


            using (var session = store.OpenSession(sessionType))
            {
                // SAMPLE: start-stream-with-aggregate-type
                var joined = new MembersJoined { Members = new[] { "Rand", "Matt", "Perrin", "Thom" } };
                var departed = new MembersDeparted { Members = new[] { "Thom" } };

                var id = session.Events.StartStream<Quest>(joined, departed);
                session.SaveChanges();
                // ENDSAMPLE

                var streamEvents = session.Events.QueryAllRawEvents()
                    .Where(x => x.StreamId == id).OrderBy(x => x.Version).ToList();


                streamEvents.Count().ShouldBe(2);
                streamEvents.ElementAt(0).Data.ShouldBeOfType<MembersJoined>();
                streamEvents.ElementAt(0).Version.ShouldBe(1);
                streamEvents.ElementAt(1).Data.ShouldBeOfType<MembersDeparted>();
                streamEvents.ElementAt(1).Version.ShouldBe(2);

                streamEvents.Each(e => e.Timestamp.ShouldNotBe(default(DateTimeOffset)));
            }
        }
Exemple #19
0
        public void get_correct_events_from_single_stream()
        {
            var listener = new StubDocumentSessionListener();
            var store = InitStore(listener);

            var id = Guid.NewGuid();
            var started = new QuestStarted();

            using (var session = store.LightweightSession())
            {
                session.Events.StartStream<Quest>(id, started);
                session.SaveChanges();

                var events = listener.AfterCommitSession.LastCommit
                    .GetEvents()
                    .ToList();

                events.Count.ShouldBe(1);
                events.ElementAt(0).Data.ShouldBeOfType<QuestStarted>();
            }

            using (var session = store.LightweightSession())
            {
                var joined = new MembersJoined { Members = new string[] { "Rand", "Matt", "Perrin", "Thom" } };
                var departed = new MembersDeparted { Members = new[] { "Thom" } };

                session.Events.Append(id, joined, departed);

                session.SaveChanges();

                var events = listener.AfterCommitSession.LastCommit
                    .GetEvents()
                    .ToList();

                events.Count.ShouldBe(2);
                events.ElementAt(0).Data.ShouldBeOfType<MembersJoined>();
                events.ElementAt(1).Data.ShouldBeOfType<MembersDeparted>();
            }
        }