public async Task DispatchAsync_should_publish_events()
        {
            var topicFactory = new TopicClientFactory(_connStr);
            var logger       = NSubstitute.Substitute.For <ILogger <EventProducer <DummyAggregate, Guid> > >();
            var sut          = new EventProducer <DummyAggregate, Guid>(topicFactory, "test", _eventSerializer, logger);

            await CreateTopicAsync(sut.TopicName);

            int expectedMessagesCount = 3;

            var subscriptionClient = new SubscriptionClient(_connStr, sut.TopicName, SubscriptionName);

            subscriptionClient.RegisterMessageHandler(
                async(msg, tkn) =>
            {
                --expectedMessagesCount;
                await subscriptionClient.CompleteAsync(msg.SystemProperties.LockToken);
            },
                (ex) => Task.CompletedTask);

            var aggregate = new DummyAggregate(Guid.NewGuid());

            aggregate.DoSomething("lorem");
            aggregate.DoSomething("ipsum");

            await sut.DispatchAsync(aggregate);

            var timeout = 30 * 1000;
            var timer   = new Stopwatch();

            timer.Start();
            while (true)
            {
                if (expectedMessagesCount < 1 || timer.ElapsedMilliseconds > timeout)
                {
                    break;
                }
                await Task.Delay(200);
            }

            expectedMessagesCount.Should().Be(0);
        }
 public void SetUp()
 {
     _topicClientFactory = new TopicClientFactory();
 }