public async Task GetIndivisualWordCount_Should_Return_Word_And_Count_For_Given_BookName()
        {
            //
            // Arrange.
            //

            Dictionary <string, int> wc = new Dictionary <string, int>();

            wc.Add("Mine", 5);
            wc.Add("Yours", 4);

            IEnumerable <WordOccurance> wordCount = this.GetWordOccurances();
            ITextProcessor textProcessor          = new TextProcessor();

            string                  BookText      = "one's,  and's two's two, three.Three/three?three///I'm Number THREE, four four four four!Five's.";
            const string            BookName      = "BookName";
            Mock <IWebApiProcessor> mockProcessor = new Mock <IWebApiProcessor>();

            mockProcessor.Object.ApiPath  = "TargetResource/";
            mockProcessor.Object.ApiPath += BookName;

            // mockTextProcessor.Setup(tp => tp.BreakIntoChunks(BookText)).Returns(textProcessor.BreakIntoChunks(BookText));

            // mockTextProcessor.Setup(tp => tp.CountWords(It.IsAny<string>())).Returns(wc);


            mockMemory.Setup(m => m.TryGetValue(BookName, out wordCount)).Returns(false);

            mockMemory.Setup(m => m.TryGetValue(mockProcessor.Object.ApiPath, out BookText)).Returns(true);

            Mock <IOptions <MyConfig> > mockconfig = new Mock <IOptions <MyConfig> >();

            mockconfig.Setup(c => c.Value.HostServerUrl).Returns("HostServerUrl");
            mockconfig.Setup(c => c.Value.ApiPath).Returns("TargetResource");

            IWebApiManager manager = new LoyalBooksWebApiParallelManager(mockProcessor.Object, mockMemory.Object, textProcessor, mockconfig.Object);

            //
            // Act.
            //

            List <WordOccurance> result = (await manager.GetIndivisualWordsCount(BookName)).ToList();

            //
            // Assert.
            //

            /*
             * Assert.AreEqual(result[0].Word, "TWO'S");
             * Assert.AreEqual(result[0].Count, 1);
             *
             * Assert.AreEqual(result[2].Word, "THREE");
             * Assert.AreEqual(result[2].Count, 5);*/
            Assert.AreEqual(result.FirstOrDefault(item => item.Word == "THREE").Count, 5);
            Assert.AreEqual(result.FirstOrDefault(item => item.Word == "TWO'S").Count, 1);
        }
        public async Task GetIndivisualWordCount_Should_Return_Word_And_Count_For_Given_BookName_From_Cache()
        {
            //
            // Arrange.
            //

            IEnumerable <WordOccurance> wordCount = this.GetWordOccurances();

            const string            BookName      = "BookName";
            Mock <IWebApiProcessor> mockProcessor = new Mock <IWebApiProcessor>();

            mockProcessor.Object.ApiPath  = "TargetResource/";
            mockProcessor.Object.ApiPath += BookName;



            string textOfTheBook = "Contents of the book";

            this.mockMemory.Setup(m => m.TryGetValue(BookName, out wordCount)).Returns(true);


            IWebApiManager manager = new LoyalBooksWebApiParallelManager(mockProcessor.Object, mockMemory.Object, mockTextProcessor.Object, null);



            //
            // Act.
            //

            IEnumerable <WordOccurance> result = await manager.GetIndivisualWordsCount(BookName);

            //
            // Assert.
            //


            Assert.AreEqual(result.Count(), wordCount.Count());
        }