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()); }
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); }
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()); }