public async Task A_null_subscriber_causes_an_ArgumentNullException() { var dispatcher = Substitute.For <IDispatcher>(); var eventAggregator = new MessageAggregator(); Assert.ThrowsAsync <ArgumentNullException>(async() => await eventAggregator.SubscribeAsync(null)); }
public async Task A_valid_message_is_published_to_all_handlers() { var dispatcher = new XamlDispatcher(); var eventAggregator = new MessageAggregator(); var handler1 = Substitute.For <IHandleAsync <object> >(); var handler2 = Substitute.For <IHandleAsync <object> >(); var handler3 = Substitute.For <IHandle <object> >(); handler1.HandleAsync(Arg.Any <object>()).Returns(async(c) => { Console.WriteLine( $"{DateTime.Now} - Starting handler 1..."); await Task.Delay(3000); Console.WriteLine( $"{DateTime.Now} - Finished handler 1..."); }); handler3.When(c => c.Handle(Arg.Any <object>())) .Do((c) => { Thread.Sleep(500); Console.WriteLine($"{DateTime.Now} - executing handler 3..."); }); handler2.HandleAsync(Arg.Any <object>()).Returns(async(c) => { Console.WriteLine( $"{DateTime.Now} - Starting handler 2..."); await Task.Delay(3000); Console.WriteLine( $"{DateTime.Now} - Finished handler 2..."); }); await eventAggregator.SubscribeAsync(handler1); await eventAggregator.SubscribeAsync(handler2); await eventAggregator.SubscribeAsync(handler3); var message = new object(); await eventAggregator.PublishAsync(message); #pragma warning disable 4014 handler1.Received().HandleAsync(message); handler2.Received().HandleAsync(message); handler3.Received().Handle(message); #pragma warning restore 4014 }
public async Task True_returned_when_a_handler_exists_for_a_given_message() { var dispatcher = Substitute.For <IDispatcher>(); var handlerStub = Substitute.For <IHandle <object> >(); var eventAggregator = new MessageAggregator(); await eventAggregator.SubscribeAsync(handlerStub); Assert.True(eventAggregator.HandlerExistsFor(typeof(object))); }
public async Task A_valid_subscriber_is_assigned_as_a_handler_for_its_message_type() { var dispatcher = Substitute.For <IDispatcher>(); var handlerStub = Substitute.For <IHandleAsync <object> >(); var eventAggregator = new MessageAggregator(); Assert.False(eventAggregator.HandlerExistsFor(typeof(object))); await eventAggregator.SubscribeAsync(handlerStub); Assert.True(eventAggregator.HandlerExistsFor(typeof(object))); }
public async Task A_valid_subscriber_gets_removed_from_the_handler_list() { var dispatcher = Substitute.For <IDispatcher>(); var handlerStub = Substitute.For <IHandleAsync <object> >(); var eventAggregator = new MessageAggregator(); await eventAggregator.SubscribeAsync(handlerStub); Assert.True(eventAggregator.HandlerExistsFor(typeof(object))); await eventAggregator.UnsubscribeAsync(handlerStub); Assert.False(eventAggregator.HandlerExistsFor(typeof(object))); }