public async Task ShouldMakeSubscription() { var subscription1 = Subscription.Matching <DatabaseStatus>(status => status.DatacenterName == "Paris" && status.Status == "Ko"); var subscription2 = Subscription.Any <DoSomething>(); var command = new DoSomething(); Assert.AreEqual(0, GlobalTestContext.Get()); var @event = new DatabaseStatus() { DatacenterName = "Paris", Status = "Ko" }; _bus.Start(); //registration Assert.AreEqual(1, TestBusTransportTestContext.TransportHitCounter); await _bus.Subscribe(new SubscriptionRequest(subscription1)); Assert.AreEqual(2, TestBusTransportTestContext.TransportHitCounter); await _bus.Subscribe(new SubscriptionRequest(subscription2)); Assert.AreEqual(3, TestBusTransportTestContext.TransportHitCounter); //as the transport is mocked, register manually await _directory.RegisterAsync(_bus.Self, _bus.GetSubscriptions()); //register directory transport call Assert.AreEqual(4, TestBusTransportTestContext.TransportHitCounter); _bus.Publish(@event); Assert.AreEqual(5, TestBusTransportTestContext.TransportHitCounter); await _bus.Send(command); Assert.AreEqual(6, TestBusTransportTestContext.TransportHitCounter); }
public async Task ShouldTestE2E() { GlobalTestContext.Reset(); var subscription1 = Subscription.Matching <DatabaseStatus>(status => status.DatacenterName == "Paris" && status.Status == "Ko"); var subscription2 = Subscription.Any <DoSomething>(); Assert.AreEqual(0, GlobalTestContext.Get()); await _bus.Subscribe(new SubscriptionRequest(subscription1)); await Task.Delay(50); await _bus.Subscribe(new SubscriptionRequest(subscription2)); await Task.Delay(50); //should be consumed var command = new DoSomething(); await _bus.Send(command); await Task.Delay(50); Assert.AreEqual(1, GlobalTestContext.Get()); //should be consumed var @event = new DatabaseStatus() { DatacenterName = "Paris", Status = "Ko" }; _bus.Publish(@event); await Task.Delay(50); Assert.AreEqual(2, GlobalTestContext.Get()); //should be consumed @event = new DatabaseStatus() { DatacenterName = "Paris", Status = "Ko" }; _bus.Publish(@event); await Task.Delay(50); Assert.AreEqual(3, GlobalTestContext.Get()); //should not be consumed @event = new DatabaseStatus() { DatacenterName = "Paris", Status = "Ok" }; _bus.Publish(@event); await Task.Delay(50); Assert.AreEqual(3, GlobalTestContext.Get()); }