public async Task CreateCarousel_ThrowSocketException_ConnectionRefused()
        {
            string expectedErrorMessage = "No connection could be made because the target machine actively refused it";
            int    expectedErrorCode    = 10061;
            var    transactionData      = CreateTransactionQueueData();
            Device device = transactionData.Devices.FirstOrDefault(dev => dev.Type.Equals("Carousel"));

            _utility.Setup(x => x.BuildStorageSpaceItem(device.StorageSpaces)).Returns(Task.FromResult(new Slot()));
            _carouselManager.Setup(x => x.CreateCarousel(transactionData)).Throws(new SocketException(expectedErrorCode));
            CarouselProcess carouselProcess = new CarouselProcess(_logger.Object, _deviceResponse.Object, _carouselManager.Object, _utility.Object);
            await carouselProcess.MoveCarousel(transactionData);

            _deviceResponse.VerifySet(x => x.HasError  = true);
            _deviceResponse.VerifySet(x => x.ErrorCode = expectedErrorCode);
            _deviceResponse.VerifySet(x => x.Message   = expectedErrorMessage);
        }
        public async Task CreateCarousel_ThrowSocketException_Timeout()
        {
            string expectedErrorMessage = "A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond";
            int    expectedErrorCode    = 10060;
            var    transactionData      = CreateTransactionQueueData();
            Device device = transactionData.Devices.FirstOrDefault(dev => dev.Type.Equals("Carousel"));

            _utility.Setup(x => x.BuildStorageSpaceItem(device.StorageSpaces)).Returns(Task.FromResult(new Slot()));
            _carouselManager.Setup(x => x.CreateCarousel(transactionData)).Throws(new SocketException(expectedErrorCode));
            CarouselProcess carouselProcess = new CarouselProcess(_logger.Object, _deviceResponse.Object, _carouselManager.Object, _utility.Object);
            await carouselProcess.MoveCarousel(transactionData);

            _deviceResponse.VerifySet(x => x.HasError  = true);
            _deviceResponse.VerifySet(x => x.ErrorCode = expectedErrorCode);
            _deviceResponse.VerifySet(x => x.Message   = expectedErrorMessage);
        }
        public async Task MoveCarousel_ErrorFound_At_CreateCarousel_DeviceResponse()
        {
            IDeviceResponse deviceResponseAtCreateCarousel = new DeviceResponse()
            {
                HasError = true, Message = "Error Found at CreateCarousel."
            };
            IDeviceResponse deviceResponseMoveCarousel = new DeviceResponse();
            var             transactionData            = CreateTransactionQueueData();

            _carouselManager.Setup(x => x.CreateCarousel(transactionData)).Returns(Task.FromResult(deviceResponseAtCreateCarousel));
            _carouselManager.Setup(x => x.MoveCarousel(transactionData, new Slot())).Returns(Task.FromResult(deviceResponseMoveCarousel));
            CarouselProcess carouselProcess = new CarouselProcess(_logger.Object, _deviceResponse.Object, _carouselManager.Object, _utility.Object);
            IDeviceResponse deviceResponse  = await carouselProcess.MoveCarousel(transactionData);

            Assert.Equal(deviceResponseAtCreateCarousel.HasError, deviceResponse.HasError);
            Assert.Equal(deviceResponseAtCreateCarousel.Message, deviceResponse.Message);
        }
        public async Task MoveCarousel_ErrorFound_At_MoveCarousel_DeviceResponse()
        {
            IDeviceResponse deviceResponseAtMoveCarousel = new DeviceResponse()
            {
                HasError = true, Message = "Erro Found at MoveCarousel."
            };
            IDeviceResponse deviceResponseMoveCarousel = new DeviceResponse();
            var             transactionData            = CreateTransactionQueueData();
            Device          device = transactionData.Devices.FirstOrDefault(dev => dev.Type.Equals("Carousel"));

            Slot slot = new Slot();

            _utility.Setup(x => x.BuildStorageSpaceItem(device.StorageSpaces)).Returns(Task.FromResult(slot));
            _carouselManager.Setup(x => x.CreateCarousel(transactionData)).Returns(Task.FromResult(deviceResponseMoveCarousel));
            _carouselManager.Setup(x => x.MoveCarousel(transactionData, slot)).Returns(Task.FromResult(deviceResponseAtMoveCarousel));
            CarouselProcess carouselProcess = new CarouselProcess(_logger.Object, _deviceResponse.Object, _carouselManager.Object, _utility.Object);
            IDeviceResponse deviceResponse  = await carouselProcess.MoveCarousel(transactionData);

            Assert.Equal(deviceResponseAtMoveCarousel.HasError, deviceResponse.HasError);
            Assert.Equal(deviceResponseAtMoveCarousel.Message, deviceResponse.Message);
        }
        public async Task MoveCarousel_ThrowException()
        {
            //Arrange
            string          expectedErrorMessage = "Controller for this storage space is not found";
            var             transactionData      = CreateTransactionQueueData();
            Device          device = transactionData.Devices.FirstOrDefault(dev => dev.Type.Equals("Carousel"));
            IDeviceResponse devResponse;
            IDeviceResponse deviceResponseCreateCarousel = new DeviceResponse()
            {
                HasError = true, Message = expectedErrorMessage
            };

            _utility.Setup(x => x.BuildStorageSpaceItem(device.StorageSpaces)).Returns(Task.FromResult(new Slot()));
            _carouselManager.Setup(x => x.CreateCarousel(transactionData)).Returns(Task.FromResult(deviceResponseCreateCarousel));
            CarouselProcess carouselProcess = new CarouselProcess(_logger.Object, _deviceResponse.Object, _carouselManager.Object, _utility.Object);

            //Act
            devResponse = await carouselProcess.MoveCarousel(transactionData);

            //Assert
            Assert.True(devResponse.HasError);
            Assert.Equal(devResponse.Message, expectedErrorMessage);
        }