public void ShouldStopTransferItemsIfStopTransferIsForced()
        {
            var taskCompletetionSource = new TaskCompletionSource <bool>();

            Mock.Arrange(() => _target.SendAsync(null)).IgnoreArguments().Returns(() =>
            {
                taskCompletetionSource.Task.Wait();
                return(Task.FromResult(true));
            });
            Mock.Arrange(() => _exceptionHandler.Handle(null)).IgnoreArguments().Returns(false);

            var itemsTransfer = new SimpleTransmitter <string>(_source, _target, _exceptionHandler);

            _sourceQueue.Enqueue("1");
            _sourceQueue.Enqueue("2");

            var transferTask = Task.Run(() => itemsTransfer.StartAsync());

            SpinWait.SpinUntil(() => _sourceQueue.Count == 1);

            itemsTransfer.Stop();
            taskCompletetionSource.SetResult(true);
            transferTask.Wait();

            Assert.AreEqual(new[] { "2" }, _sourceQueue);
        }
        public void ShouldTransferItemsWhileSourceNotReturnEmptyResponse()
        {
            var itemsTransfer = new SimpleTransmitter <string>(_source, _target, _exceptionHandler);

            _sourceQueue.Enqueue("1");
            _sourceQueue.Enqueue("2");

            itemsTransfer.StartAsync();

            SpinWait.SpinUntil(() => _sourceQueue.Count == 0);

            Assert.AreEqual(new[] { "1", "2" }, _targetQueue);
        }
        public void ShouldStopTransferItemsIfExceptionWasNotHandled()
        {
            Mock.Arrange(() => _target.SendAsync(null)).IgnoreArguments().Returns(() => { throw new Exception(); });
            Mock.Arrange(() => _exceptionHandler.Handle(null)).IgnoreArguments().Returns(false);

            var itemsTransfer = new SimpleTransmitter <string>(_source, _target, _exceptionHandler);

            _sourceQueue.Enqueue("1");
            _sourceQueue.Enqueue("2");

            itemsTransfer.StartAsync();

            SpinWait.SpinUntil(() => _sourceQueue.Count == 1);

            Assert.AreEqual(new[] { "2" }, _sourceQueue);
        }