public void WhenWordExistsContentRequestShouldReturnAStringContainingTheWord()
        {
            var word = "realWord";

            // https://stackoverflow.com/questions/9823039/is-it-possible-to-mock-out-a-net-httpwebresponse
            var responseText   = $"blah blah blah {word} blah";
            var bytes          = Encoding.UTF8.GetBytes(responseText);
            var responseStream = new MemoryStream();

            responseStream.Write(bytes, 0, bytes.Length);
            responseStream.Seek(0, SeekOrigin.Begin);

            var myResponse = Substitute.For <HttpWebResponse>();

            myResponse.GetResponseStream().Returns(responseStream);

            var myRequest = Substitute.For <HttpWebRequest>();

            myRequest.GetResponse().Returns(myResponse);

            var webRequestHelper = Substitute.For <IWebRequestHelper>();

            webRequestHelper
            .Create(Arg.Any <string>())
            .Returns(myRequest);

            webRequestHelper
            .GetResponse(Arg.Any <WebRequest>())
            .Returns(myResponse);

            var webDictionaryRequestHelper = new WebDictionaryRequestHelper(webRequestHelper);
            var response = webDictionaryRequestHelper.MakeContentRequest(word);

            response.Should().Contain(word);
        }
        public void WhenRequestThrowsExceptionContentRequestShouldReturnEmptyString()
        {
            var url              = "https://www.collinsdictionary.com/dictionary/english";
            var word             = "not-a-word";
            var webRequestHelper = Substitute.For <IWebRequestHelper>();

            webRequestHelper
            .Create($"{url}/{word}")
            .Throws(new Exception());

            var webDictionaryRequestHelper = new WebDictionaryRequestHelper(webRequestHelper);
            var response = webDictionaryRequestHelper.MakeContentRequest(word);

            response.Should().Be("");
        }
        public void WhenWordExistsExistenceRequestShouldReturnTrue()
        {
            var url              = "https://www.dictionary.com/browse";
            var word             = "word-that-doesnt-exist";
            var webRequestHelper = Substitute.For <IWebRequestHelper>();

            webRequestHelper
            .Create($"{url}/{word}")
            .Returns(WebRequest.CreateDefault(new Uri($"{url}/{word}")));

            var webDictionaryRequestHelper = new WebDictionaryRequestHelper(webRequestHelper);
            var response = webDictionaryRequestHelper.MakeExistenceRequest(word);

            response.Should().BeTrue();
        }
        public void WhenWordDoesNotExistExistenceRequestShouldReturnFalse()
        {
            var url              = "https://www.dictionary.com/browse";
            var word             = "word-that-doesnt-exist";
            var webRequestHelper = Substitute.For <IWebRequestHelper>();

            webRequestHelper
            .Create($"{url}/{word}")
            .Throws(new Exception());

            var webDictionaryRequestHelper = new WebDictionaryRequestHelper(webRequestHelper);
            var response = webDictionaryRequestHelper.MakeExistenceRequest(word);

            response.Should().BeFalse();
        }