public async Task should_batch_multiple_subscription_requests() { AddInvoker <FakeRoutableCommand>(shouldBeSubscribedOnStartup: false); var subscriptions = new List <SubscriptionsForType>(); _directoryMock.CaptureEnumerable((IBus)_bus, (x, bus, items) => x.UpdateSubscriptionsAsync(bus, items), subscriptions); _bus.Start(); var batch = new SubscriptionRequestBatch(); var requestA = new SubscriptionRequest(new[] { Subscription.ByExample(x => new FakeRoutableCommand(1, "foo")), Subscription.ByExample(x => new FakeRoutableCommand(1, "bar")) }); var requestB = new SubscriptionRequest(new[] { Subscription.ByExample(x => new FakeRoutableCommand(1, "bar")), Subscription.ByExample(x => new FakeRoutableCommand(1, "baz")) }); requestA.AddToBatch(batch); requestB.AddToBatch(batch); var taskA = _bus.SubscribeAsync(requestA); var taskB = _bus.SubscribeAsync(requestB); subscriptions.ShouldBeEmpty(); await batch.SubmitAsync(); await Task.WhenAll(taskA, taskB); subscriptions.ExpectedSingle() .ShouldEqual(new SubscriptionsForType( MessageUtil.TypeId <FakeRoutableCommand>(), new BindingKey("1", "foo", "*"), new BindingKey("1", "bar", "*"), new BindingKey("1", "baz", "*") ) ); subscriptions.Clear(); taskA.Result.Dispose(); await _bus.WhenUnsubscribeCompletedAsync(); subscriptions.ExpectedSingle() .ShouldEqual(new SubscriptionsForType( MessageUtil.TypeId <FakeRoutableCommand>(), new BindingKey("1", "bar", "*"), new BindingKey("1", "baz", "*") ) ); }
public void should_throw_when_batch_is_sent_after_bus_is_stopped() { AddInvoker <FakeCommand>(shouldBeSubscribedOnStartup: false); var batch = new SubscriptionRequestBatch(); var request = new SubscriptionRequest(Subscription.Any <FakeCommand>()); request.AddToBatch(batch); _bus.Start(); var _ = _bus.SubscribeAsync(request); _bus.Stop(); var submitTask = batch.SubmitAsync(); Assert.Throws <AggregateException>(() => submitTask.Wait()).InnerExceptions.ExpectedSingle().ShouldBe <InvalidOperationException>(); }