public void AutomaticallyReplaysEventsIfViewIsPurged(int numberOfCommands) { var allPotatoesView = new MongoDbViewManager <AllPotatoesView>(_mongoDatabase); _dispatcher.AddViewManager(allPotatoesView); Console.WriteLine("Processing {0} commands....", numberOfCommands); Enumerable.Range(0, numberOfCommands - 1) .ToList() .ForEach(i => _commandProcessor.ProcessCommand(new BitePotato("someid1", .01m))); var lastResult = _commandProcessor.ProcessCommand(new BitePotato("someid2", .01m)); Console.WriteLine("Waiting until {0} has been dispatched to the view...", lastResult.GetNewPosition()); allPotatoesView.WaitUntilProcessed(lastResult, TimeSpan.FromSeconds(2)).Wait(); var viewOnFirstLoad = allPotatoesView.Load(GlobalInstanceLocator.GetViewInstanceId()); Assert.That(viewOnFirstLoad, Is.Not.Null); Console.WriteLine("Purging the view!"); allPotatoesView.Purge(); Console.WriteLine("Waiting until {0} has been dispatched to the view...", lastResult.GetNewPosition()); allPotatoesView.WaitUntilProcessed(lastResult, TimeSpan.FromSeconds(4)).Wait(); var viewOnNextLoad = allPotatoesView.Load(GlobalInstanceLocator.GetViewInstanceId()); Assert.That(viewOnNextLoad, Is.Not.Null); Assert.That(viewOnNextLoad.LastGlobalSequenceNumber, Is.EqualTo(viewOnFirstLoad.LastGlobalSequenceNumber)); }
public void AutomaticallyReplaysEventsIfViewIsPurged(int numberOfCommands) { var allPotatoesView = new MongoDbViewManager<AllPotatoesView>(_mongoDatabase); _dispatcher.AddViewManager(allPotatoesView); Console.WriteLine("Processing {0} commands....", numberOfCommands); Enumerable.Range(0, numberOfCommands - 1) .ToList() .ForEach(i => _commandProcessor.ProcessCommand(new BitePotato("someid1", .01m))); var lastResult = _commandProcessor.ProcessCommand(new BitePotato("someid2", .01m)); Console.WriteLine("Waiting until {0} has been dispatched to the view...", lastResult.GetNewPosition()); allPotatoesView.WaitUntilProcessed(lastResult, TimeSpan.FromSeconds(2)).Wait(); var viewOnFirstLoad = allPotatoesView.Load(GlobalInstanceLocator.GetViewInstanceId()); Assert.That(viewOnFirstLoad, Is.Not.Null); Console.WriteLine("Purging the view!"); allPotatoesView.Purge(); Console.WriteLine("Waiting until {0} has been dispatched to the view...", lastResult.GetNewPosition()); allPotatoesView.WaitUntilProcessed(lastResult, TimeSpan.FromSeconds(4)).Wait(); var viewOnNextLoad = allPotatoesView.Load(GlobalInstanceLocator.GetViewInstanceId()); Assert.That(viewOnNextLoad, Is.Not.Null); Assert.That(viewOnNextLoad.LastGlobalSequenceNumber, Is.EqualTo(viewOnFirstLoad.LastGlobalSequenceNumber)); }
public void CanBlockUntilViewIsUpdated(BlockOption blockOption) { // arrange var slowView = new MongoDbViewManager <SlowView>(_mongoDatabase); _dispatcher.AddViewManager(slowView); _commandProcessor.ProcessCommand(new BitePotato("potato1", .1m)); _commandProcessor.ProcessCommand(new BitePotato("potato1", .1m)); _commandProcessor.ProcessCommand(new BitePotato("potato1", .1m)); _commandProcessor.ProcessCommand(new BitePotato("potato1", .1m)); var result = _commandProcessor.ProcessCommand(new BitePotato("potato1", 1)); // act switch (blockOption) { case BlockOption.BlockOnViewManager: Console.WriteLine("Waiting for {0} on the view...", result.GetNewPosition()); slowView.WaitUntilProcessed(result, TimeSpan.FromSeconds(2)).Wait(); break; case BlockOption.BlockOnEventDispatcher: Console.WriteLine("Waiting for {0} on the dispatcher...", result.GetNewPosition()); _dispatcher.WaitUntilProcessed <SlowView>(result, TimeSpan.FromSeconds(2)).Wait(); break; } // assert var instance = slowView.Load(InstancePerAggregateRootLocator.GetViewIdFromAggregateRootId("potato1")); if (blockOption == BlockOption.NoBlock) { Assert.That(instance, Is.Null); Console.WriteLine("View instance was null, just as expected"); } else { Assert.That(instance, Is.Not.Null); Console.WriteLine("View instance was properly updated, just as expected"); } }
public void CanBlockUntilViewIsUpdated(BlockOption blockOption) { // arrange var slowView = new MongoDbViewManager<SlowView>(_mongoDatabase); _dispatcher.AddViewManager(slowView); _commandProcessor.ProcessCommand(new BitePotato("potato1", .1m)); _commandProcessor.ProcessCommand(new BitePotato("potato1", .1m)); _commandProcessor.ProcessCommand(new BitePotato("potato1", .1m)); _commandProcessor.ProcessCommand(new BitePotato("potato1", .1m)); var result = _commandProcessor.ProcessCommand(new BitePotato("potato1", 1)); // act switch (blockOption) { case BlockOption.BlockOnViewManager: Console.WriteLine("Waiting for {0} on the view...", result.GetNewPosition()); slowView.WaitUntilProcessed(result, TimeSpan.FromSeconds(2)).Wait(); break; case BlockOption.BlockOnEventDispatcher: Console.WriteLine("Waiting for {0} on the dispatcher...", result.GetNewPosition()); _dispatcher.WaitUntilProcessed<SlowView>(result, TimeSpan.FromSeconds(2)).Wait(); break; } // assert var instance = slowView.Load(InstancePerAggregateRootLocator.GetViewIdFromAggregateRootId("potato1")); if (blockOption == BlockOption.NoBlock) { Assert.That(instance, Is.Null); Console.WriteLine("View instance was null, just as expected"); } else { Assert.That(instance, Is.Not.Null); Console.WriteLine("View instance was properly updated, just as expected"); } }