Esempio n. 1
0
        public void BingSearchEngine_GetSearchResultsAsync_MultipleResults_HappyPath()
        {
            // arrange
            var searchTerm = "hello";

            var urlSelector          = "h2 > a";
            var titleSelector        = "h2 > a";
            var captionSelector      = "div.b_caption > p";
            var searchResultSelector = "li.b_algo";

            var htmlParserMock     = new AngleSharpHtmlParser();
            var queryStringEncoder = new QueryStringEncoder();

            var bingEngineSearchSelector = new BingSearchEngineSelector(urlSelector, titleSelector, captionSelector);

            var searchEngine = new SearchEngine(htmlParserMock,
                                                bingEngineSearchSelector,
                                                queryStringEncoder,
                                                "https://www.bing.com/search?q=",
                                                searchResultSelector);

            // act
            var results = searchEngine.GetSearchResults(searchTerm);

            // assert
            Assert.IsNotNull(results);
            Assert.IsTrue(results.Count() > 1);
            Assert.IsTrue(!String.IsNullOrEmpty(results.First().Url));
            Assert.IsTrue(!String.IsNullOrEmpty(results.First().Title));
        }
        public void WhitespaceEncoding()
        {
            var e = new QueryStringEncoder("/foo");

            e.AddParam("a", "b c");
            Assert.Equal("/foo?a=b%20c", e.ToString());
        }
Esempio n. 3
0
        public void YahooSearchEngine_GetSearchResultsAsync_MultipleResults_HappyPath()
        {
            // arrange
            var searchTerm = "hello";

            var urlSelector          = "div.compTitle > h3.title > a";
            var titleSelector        = "div.compTitle > h3.title > a";
            var captionSelector      = "div.compText > p";
            var searchResultSelector = "div.dd.algo";

            var htmlParser         = new AngleSharpHtmlParser();
            var queryStringEncoder = new QueryStringEncoder();

            var yahooEngineSearchSelector = new YahooSearchEngineSelector(urlSelector, titleSelector, captionSelector);

            var searchEngine = new SearchEngine(htmlParser,
                                                yahooEngineSearchSelector,
                                                queryStringEncoder,
                                                "https://uk.search.yahoo.com/search?p=",
                                                searchResultSelector);

            // act
            var results = searchEngine.GetSearchResults(searchTerm);

            // assert
            Assert.IsNotNull(results);
            Assert.IsTrue(results.Count() > 1);
            Assert.IsTrue(!String.IsNullOrEmpty(results.First().Url));
            Assert.IsTrue(!String.IsNullOrEmpty(results.First().Title));
        }
        public async Task <HttpResponseMessage> SearchCache(SearchCriteria criteria)
        {
            string qs       = new QueryStringEncoder().Encode(criteria);
            string endpoint = ApiEndpoints.SearchCache + $"?{qs}";

            var response = await api.Get(endpoint);

            return(response);
        }
Esempio n. 5
0
        public void QueryStringEncoder_Encode_HappyPath(string searchTerm, string expectedResult)
        {
            // arrange
            var queryStringEncoder = new QueryStringEncoder();

            // act
            var result = queryStringEncoder.Encode(searchTerm);

            // assert
            Assert.AreEqual(expectedResult, result);
        }
        public async Task <SearchResultsModel> Search(SearchCriteria criteria)
        {
            string qs       = new QueryStringEncoder().Encode(criteria);
            string endpoint = ApiEndpoints.Search + $"?{qs}";

            var response = await api.Get(endpoint);

            var model = new SearchResultsModel();

            switch (response.StatusCode)
            {
            case HttpStatusCode.OK:
                model.SearchCount = response.Headers.Contains("X-TOTAL-COUNT") ? int.Parse(response.Headers.First(x => x.Key == "X-TOTAL-COUNT").Value.First()) : 0;
                model.Items       = JsonConvert.DeserializeObject <Item[]>(await response.Content.ReadAsStringAsync());
                break;
            }

            return(model);
        }
        public void NonDefaultEncoding()
        {
            var e = new QueryStringEncoder("/foo/\u00A5", Encoding.BigEndianUnicode);

            e.AddParam("a", "\u00A5");

            //
            // Note that java emits endianess byte order mark results
            // automatically, therefore the result is:
            //
            // %FE%FF%00%A5.
            //
            // .NET does not do this automatically by GetPreamble() method
            // and manually write to results, therefore the result is:
            //
            // %00%A5
            //
            // URL query strings do not need to encode this

            Assert.Equal("/foo/\u00A5?a=%00%A5", e.ToString());
        }
        public void DefaultEncoding()
        {
            var e = new QueryStringEncoder("/foo");

            e.AddParam("a", "b=c");
            Assert.Equal("/foo?a=b%3Dc", e.ToString());

            e = new QueryStringEncoder("/foo/\u00A5");
            e.AddParam("a", "\u00A5");
            Assert.Equal("/foo/\u00A5?a=%C2%A5", e.ToString());

            e = new QueryStringEncoder("/foo");
            e.AddParam("a", "1");
            e.AddParam("b", "2");
            Assert.Equal("/foo?a=1&b=2", e.ToString());

            e = new QueryStringEncoder("/foo");
            e.AddParam("a", "1");
            e.AddParam("b", "");
            e.AddParam("c", null);
            e.AddParam("d", null);
            Assert.Equal("/foo?a=1&b=&c&d", e.ToString());
        }