public When_a_commit_is_persisted() { Given(() => { UseThe((ICommit) new CommitBuilder().WithCheckpoint("123").Build()); var eventStore = A.Fake <IPersistStreams>(); A.CallTo(() => eventStore.GetFrom(A <string> .Ignored)).Returns(new[] { The <ICommit>() }); var adapter = new NEventStoreAdapter(eventStore, 11, pollingInterval, 100, () => DateTime.UtcNow); WithSubject(_ => adapter.Subscribe); }); When(() => { Subject(null, new Subscriber { HandleTransactions = (transactions, info) => { transactionHandledSource.SetResult(transactions.First()); return(Task.FromResult(0)); } }, "someId"); }); }
public When_the_persistency_engine_is_temporarily_unavailable() { Given(() => { UseThe((ICommit) new CommitBuilder().WithCheckpoint("123").Build()); var eventStore = A.Fake <IPersistStreams>(); A.CallTo(() => eventStore.GetFrom(A <string> .Ignored)).Returns(new[] { The <ICommit>() }); A.CallTo(() => eventStore.GetFrom(A <string> .Ignored)).Throws(new ApplicationException()).Once(); var adapter = new NEventStoreAdapter(eventStore, 11, pollingInterval, 100, () => DateTime.UtcNow); WithSubject(_ => adapter.Subscribe); }); When(() => { Subject(null, new Subscriber { HandleTransactions = (transactions, info) => { actualTransaction = transactions.First(); return(Task.FromResult(0)); } }, "someId"); }); }
public When_a_commit_is_already_projected() { Given(() => { ICommit projectedCommit = new CommitBuilder().WithCheckpoint("123").Build(); ICommit unprojectedCommit = new CommitBuilder().WithCheckpoint("124").Build(); var eventStore = A.Fake <IPersistStreams>(); A.CallTo(() => eventStore.GetFrom(A <string> .Ignored)).Returns(new[] { projectedCommit, unprojectedCommit }); A.CallTo(() => eventStore.GetFrom("123")).Returns(new[] { unprojectedCommit }); var adapter = new NEventStoreAdapter(eventStore, 11, 1.Seconds(), 100, () => DateTime.UtcNow); WithSubject(_ => adapter.Subscribe); }); When(() => { Subject(123, new Subscriber { HandleTransactions = (transactions, info) => { transactionHandledSource.SetResult(transactions.First()); return(Task.FromResult(0)); } }, "someId"); }); }
public When_requesting_a_subscription_beyond_the_highest_available_checkpoint() { Given(() => { var eventStore = A.Fake <IPersistStreams>(); A.CallTo(() => eventStore.GetFrom("999")).Returns(new ICommit[0]); var adapter = new NEventStoreAdapter(eventStore, 11, 1.Seconds(), 100, () => DateTime.UtcNow); WithSubject(_ => adapter.Subscribe); }); When(() => { Subject(1000, new Subscriber { HandleTransactions = (transactions, info) => { throw new InvalidOperationException("The adapter should not provide any events."); }, NoSuchCheckpoint = info => { noSuchCheckpointRaised.SetResult(true); return(Task.FromResult(0)); } }, "myIde"); }); }
public override void Create(BoundedContext boundedContext, IDependencyResolver resolver) { m_ConstructAggregates = resolver.HasService(typeof(IConstructAggregates)) ? (IConstructAggregates)resolver.GetService(typeof(IConstructAggregates)) : null; m_ConnectionFactory = resolver.HasService(typeof(IConnectionFactory)) ? (IConnectionFactory)resolver.GetService(typeof(IConnectionFactory)) : new ConfigurationConnectionFactory(null); IStoreEvents eventStore = m_ConfigureEventStore(new CommitDispatcher(boundedContext.EventsPublisher), m_ConnectionFactory).Build(); EventStoreAdapter = new NEventStoreAdapter(eventStore, m_ConstructAggregates); }
public When_there_are_no_more_commits() { Given(() => { var streamPersister = A.Fake <IPersistStreams>(); A.CallTo(() => streamPersister.GetFrom(A <string> .Ignored)).ReturnsLazily <IEnumerable <ICommit>, string>(checkpointToken => { pollingTimeStamps.Add(new PollingCall(checkpointToken, DateTime.UtcNow)); if (pollingTimeStamps.Count == 4) { pollingCompleted.SetResult(true); } long checkPoint = (checkpointToken != null) ? long.Parse(checkpointToken) : 0; long offsetToDetectAheadSubscriber = 1; if (checkPoint <= (subscriptionCheckpoint - offsetToDetectAheadSubscriber)) { return(new CommitBuilder().WithCheckpoint(checkPoint + 1).BuildAsEnumerable()); } else { return(new ICommit[0]); } }); var adapter = new NEventStoreAdapter(streamPersister, 0, pollingInterval, 100, () => DateTime.UtcNow); WithSubject(_ => adapter.Subscribe); }); When(() => { return(Subject(subscriptionCheckpoint, new Subscriber { HandleTransactions = (transactions, info) => Task.FromResult(0) }, "someId")); }); }
When_a_subscription_starts_after_zero_checkpoint_and_another_subscription_starts_after_null_checkpoint_while_the_first_subscription_is_loading_the_first_page_from_the_event_store() { Given(() => { eventStore = A.Fake <IPersistStreams>(); A.CallTo(() => eventStore.GetFrom(A <string> .Ignored)).ReturnsLazily(call => { string checkpointString = call.GetArgument <string>(0); long checkpoint = string.IsNullOrEmpty(checkpointString) ? 0 : long.Parse(checkpointString, CultureInfo.InvariantCulture); aSubscriptionStartedLoading.Set(); if (!secondSubscriptionCreated.Wait(TimeSpan.FromSeconds(10))) { throw new InvalidOperationException("The second subscription has not been created in 10 seconds."); } // Give the second subscription enough time to access the cache. Thread.Sleep(TimeSpan.FromSeconds(1)); return(checkpoint > 0 ? new ICommit[0] : new ICommit[] { new CommitBuilder().WithCheckpoint("1").Build() }); }); var adapter = new NEventStoreAdapter(eventStore, 11, pollingInterval, 100, () => DateTime.UtcNow); WithSubject(_ => adapter.Subscribe); }); When(() => { Subject( 0, new Subscriber { HandleTransactions = (transactions, info) => Task.FromResult(0) }, "firstId"); if (!aSubscriptionStartedLoading.Wait(TimeSpan.FromSeconds(10))) { throw new InvalidOperationException("The first subscription has not started loading in 10 seconds."); } Subject( null, new Subscriber { HandleTransactions = (transactions, info) => { secondSubscriptionReceivedTheTransaction.Set(); return(Task.FromResult(0)); } }, "secondId" ); secondSubscriptionCreated.Set(); }); }