public void GetSearchedArticlesTest() { var conn = new WebApiConnection("https://hacker-news.firebaseio.com/v0/"); var client = new HackerNewsClient(conn); var request = new GetSearchedArticlesRequest { ArticleCount = 500, SearchTerm = "the" // we are assuming at least one article will include the word "the", which may not always be the case }; var response = client.GetSearchedArticles(request); response.Articles.Where(x => x.Headline.Contains(request.SearchTerm)).Count().ShouldBe(response.Articles.Count()); }
public IEnumerable <Article> Get(int source, string searchTerm) { var factory = new NewsClientFactory(_configuration); var client = factory.GetClient((NewsClientSource)source); var request = new GetSearchedArticlesRequest { ArticleCount = int.Parse(_configuration["ArticleCount"]), SearchTerm = searchTerm }; var response = client.GetSearchedArticles(request); return(response.Articles); }
/// <summary> /// Returns a collection of the latest articles that match a search string /// </summary> public GetSearchedArticlesResponse GetSearchedArticles(GetSearchedArticlesRequest request) { var apiClient = new WebApiClient(new Uri(Connection.BaseUrl)); var taskGetIds = apiClient.Get <List <int> >("newstories.json"); var dataIds = taskGetIds.Result; var searchTerm = request.SearchTerm.ToLower(); var articles = new List <Article>(); foreach (var id in dataIds) { var taskGetItem = apiClient.Get <HackerNewsItem>($"item/{id}.json"); var item = taskGetItem.Result; if (item.Title.ToLower().Contains(searchTerm)) { var article = new Article { Headline = item.Title, Url = item.Url }; articles.Add(article); } if (request.ArticleCount > 0 && articles.Count() >= request.ArticleCount) { break; } } return(new GetSearchedArticlesResponse { Articles = articles }); }