private async Task OnFinishRemoteComputing(Guid sequenceId, FibonacciNumberMessage numberMessage)
        {
            logger.LogInformation("Message {numberMessageId} with number {numberMessageValue} is received", numberMessage.Id, numberMessage.Data.Value);

            var nextNumber = fibonacciLocalComputingProvider.ComputingNextNumber(numberMessage.Data);

            logger.LogInformation("Next number is calculated - {nextNumberValue}", nextNumber.Value);

            await fibonacciRemoteComputingProvider.StartComputingNextNumberAsync(sequenceId, nextNumber).ConfigureAwait(false);
        }
        public void PublishNextAsync_ValidCase(Guid sequenceId, FibonacciNumber number, string expectedTopic, FibonacciNumberMessage expectedMessage)
        {
            string actualTopic = null;
            FibonacciNumberMessage actualMessage = null;

            publisherMoq
            .Setup(x => x.PublishAsync(It.IsAny <string>(), It.IsAny <FibonacciNumberMessage>()))
            .Callback <string, FibonacciNumberMessage>((topic, message) =>
            {
                actualTopic   = topic;
                actualMessage = message;
            });

            service.PublishNextAsync(sequenceId, number).GetAwaiter().GetResult();

            using (new AssertionScope())
            {
                actualTopic.Should().Be(expectedTopic);
                actualMessage.Should().BeEquivalentTo(expectedMessage);
            }
        }