public async Task Send_ObeysMessageDiscriminator() { var discriminator = Mocks.Create <IMessageDiscriminator>(); discriminator.Setup(d => d.IsCompatible(typeof(Message1), It.IsAny <Type>())).Returns(true); discriminator.Setup(d => d.IsCompatible(typeof(Message2), It.IsAny <Type>())).Returns(false); discriminator.Setup(d => d.IsCompatible(typeof(Message3), It.IsAny <Type>())).Returns((Type a, Type b) => a == b); var handlers = CreateDummyHandlers(3); var executor = new Executor(); var broker = new StandardMessageBroker(executor, discriminator.Object); await broker.RegisterAsync(typeof(Message1), handlers[0]); await broker.RegisterAsync(typeof(Message2), handlers[1]); await broker.RegisterAsync(typeof(Message3), handlers[2]); await broker.SendAsync(new Message1()); await broker.SendAsync(new Message2()); await broker.SendAsync(new Message3()); Assert.Equal(2, executor.Requests.Count); TestHelper.AssertEquivalent(handlers, executor.Requests[0].Handlers); Assert.Single(executor.Requests[1].Handlers, handlers[2]); }
public async Task Send_SingleHandler_WrongMessage_DoesntExecuteHandler() { var handler = CreateDummyHandler(); var executor = new Executor(); var broker = new StandardMessageBroker(executor); var registration = await broker.RegisterAsync(typeof(Message1), handler); await broker.SendAsync(new Message2()); Assert.Empty(executor.Requests); }
public async Task Send_SingleHandler_CorrectMessage_ExecutesHandler() { var handler = CreateDummyHandler(); var executor = new Executor(); var broker = new StandardMessageBroker(executor); var registration = await broker.RegisterAsync(typeof(Message1), handler); await broker.SendAsync(new Message1()); Assert.Single(executor.Requests); Assert.Single(executor.Latest.Handlers, handler); }
public async Task RegistrationGarbageCollected_UnregistersHandler() { var handler = CreateDummyHandler(); var executor = new Executor(); var broker = new StandardMessageBroker(executor); await broker.RegisterAsync(typeof(Message1), handler); await TestHelper.ForceGarbageCollectionAsync(); await broker.SendAsync(new Message1()); Assert.Empty(executor.Requests); }
public async Task RegistrationDisposed_UnregistersHandler() { var handler = CreateDummyHandler(); var executor = new Executor(); var broker = new StandardMessageBroker(executor); var registration = await broker.RegisterAsync(typeof(Message1), handler); await registration.DisposeAsync(); await broker.SendAsync(new Message1()); Assert.Empty(executor.Requests); }
public async Task Send_MultipleHandlers_CorrectMessage_ExecutesHandlers() { var handlers = CreateDummyHandlers(3); var executor = new Executor(); var broker = new StandardMessageBroker(executor); var registrations = new List <IAsyncDisposable>(); foreach (var handler in handlers) { registrations.Add(await broker.RegisterAsync(typeof(Message1), handler)); } await broker.SendAsync(new Message1()); Assert.Single(executor.Requests); TestHelper.AssertEquivalent(handlers, executor.Latest.Handlers); }