public void Extracting_ValidInput_ValidOutput()
        {
            // Arrange
            IInputQueue<string> inputQueue = new StringInputQueue();
            IOutputQueue<string> outputQueue = new StringOutputQueue();
            inputQueue.Enqueue("https://www.google.sk/");

            IExtractor<string, string> extractor = new SyncStringToStringExtractor(new MockWebClient());
            bool finished = false;

            // Act
            extractor.Extract(inputQueue, outputQueue, () => finished = true);

            // Assert
            string output = outputQueue.Dequeue();
            Assert.IsNotNull(output);
            Assert.IsTrue(finished);
        }
        public void StartProcessing_WebException_DoNotPropagateException()
        {
            // Arrange
            IInputQueue<string> inputQueue = new StringInputQueue();
            inputQueue.Enqueue("https://en.wikipedia.org/wiki/Web_scraping");
            inputQueue.Enqueue("https://en.wikipedia.org/wiki/Foxfire");

            IOutputQueue<string> outputQueue = new StringOutputQueue();
            // Use ExceptionWebClient to simulate Web Exception
            IExtractor<string, string> extractor = new SyncStringToStringExtractor(new ExceptionWebClient());
            IProducerUnit producer = new ProducerUnit(inputQueue, outputQueue, extractor);

            // Act
            producer.StartProcessing();

            // Assert
            int outputQueueLength = 0;
            while (outputQueue.Dequeue() != null)
            {
                outputQueueLength++;
            }
            Assert.AreEqual(0, outputQueueLength);
        }
        public void StartProcessing_ValidInput_GetCorrectOutput()
        {
            // Arrange
            IInputQueue<string> inputQueue = new StringInputQueue();
            inputQueue.Enqueue("https://en.wikipedia.org/wiki/Web_scraping");
            inputQueue.Enqueue("https://en.wikipedia.org/wiki/Firefox");
            inputQueue.Enqueue("https://en.wikipedia.org/wiki/Foxfire");

            IOutputQueue<string> outputQueue = new StringOutputQueue();
            IExtractor<string, string> extractor = new SyncStringToStringExtractor(new MockWebClient());
            IProducerUnit producer = new ProducerUnit(inputQueue, outputQueue, extractor);

            // Act
            producer.StartProcessing();

            // Assert
            int outputQueueLength = 0;
            while (outputQueue.Dequeue() != null)
            {
                outputQueueLength++;
            }
            Assert.AreEqual(3, outputQueueLength);
        }