public async Task Upon_product_changed_message_received_and_an_error_occur_should_log()
        {
            //Arrange
            MessageHandlerOptions messageHandlerOptions = null;

            _subscriptionClient.When(q => q.RegisterMessageHandler(Arg.Any <Func <Message, CancellationToken, Task> >(), Arg.Any <MessageHandlerOptions>()))
            .Do(c => messageHandlerOptions = c.Arg <MessageHandlerOptions>());


            var productChangedSubscriber = new ProductChangedSubscriber(_mapper, _mergeService, _subscriptionClient, _unitOfWork);

            //Act
            await messageHandlerOptions.ExceptionReceivedHandler(_fixture.Create <ExceptionReceivedEventArgs>());

            //Assert
            await _unitOfWork.LogRepository.Received().SaveAsync(Arg.Any <string>());
        }
        public async Task Upon_product_changed_message_received_should_call_merge_service()
        {
            //Arrange
            Func <Message, CancellationToken, Task> call = null;

            _subscriptionClient.When(q => q.RegisterMessageHandler(Arg.Any <Func <Message, CancellationToken, Task> >(), Arg.Any <MessageHandlerOptions>()))
            .Do(c => call = c.Arg <Func <Message, CancellationToken, Task> >());


            var productChangedSubscriber = new ProductChangedSubscriber(_mapper, _mergeService, _subscriptionClient, _unitOfWork);

            var messageObject = _fixture.Create <ProductChangedMessage>();

            messageObject.State = ProductState.Added | ProductState.Modified;
            var messageBody = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messageObject));

            //Act
            await call(new Message(messageBody), new CancellationToken());

            //Assert
            await _mergeService.Received().MergeProductWithIngredientsAsync(Arg.Any <ProductToGet>());
        }
        public async Task Upon_product_changed_message_with_delete_state_should_call_method_product_resository_deletion_method()
        {
            //Arrange
            Func <Message, CancellationToken, Task> call = null;

            _subscriptionClient.When(q => q.RegisterMessageHandler(Arg.Any <Func <Message, CancellationToken, Task> >(), Arg.Any <MessageHandlerOptions>()))
            .Do(c => call = c.Arg <Func <Message, CancellationToken, Task> >());


            var productChangedSubscriber = new ProductChangedSubscriber(_mapper, _mergeService, _subscriptionClient, _unitOfWork);

            var messageObject = _fixture.Create <ProductChangedMessage>();

            messageObject.State = ProductState.Deleted;

            var messageBody = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messageObject));

            //Act
            await call(new Message(messageBody), new CancellationToken());

            //Assert
            await _unitOfWork.MergedProductsRepository.Received().DeleteAsync(Arg.Any <Guid>());
        }