public IEnumerable <SemanticCard> Producer(string url) { if (string.IsNullOrWhiteSpace(url)) { throw new ArgumentException(nameof(url)); } var nextPageUrl = url; do { _semanticSearchResults.Load(nextPageUrl); foreach (var row in _semanticSearchResults.TableRows) { var semanticCard = new SemanticCard { Title = _semanticCardSearchResults.Name(row), CorrelationId = Guid.NewGuid(), Url = _semanticCardSearchResults.Url(row, _semanticSearchResults.CurrentWebPageUri) }; if (!string.IsNullOrWhiteSpace(semanticCard.Title) && !string.IsNullOrWhiteSpace(semanticCard.Url)) { yield return(semanticCard); } } if (_semanticSearchResults.HasNextPage) { nextPageUrl = _semanticSearchResults.NextPageLink(); } } while (_semanticSearchResults.HasNextPage); }
public void Given_A_Url_With_Only_One_Page_Should_Not_Invoke_NextPageLink() { // Arrange var tableRows = new HtmlNodeCollection(new HtmlNode(HtmlNodeType.Document, new HtmlDocument(), 0)) { new (HtmlNodeType.Element, new HtmlDocument(), 1) }; _semanticSearchResultsWebPage.Load(Arg.Any <string>()); _semanticSearchResultsWebPage.TableRows.Returns(tableRows); _semanticCardSearchResultsWebPage.Name(Arg.Any <HtmlNode>()).Returns("Card Name"); _semanticCardSearchResultsWebPage.Url(Arg.Any <HtmlNode>(), Arg.Any <Uri>()).Returns("https://www.youtube.com"); // Act _sut.Producer("https://www.youtube.com").ToArray(); // Assert _semanticSearchResultsWebPage.DidNotReceive().NextPageLink(); }