public void GetThreads_ReturnUniqueObjectsWithPropertiesParsedCorrectly() { var provider = new MarkupProvider(); var crawler = new ForumsCrawler(provider); var threads = crawler.GetThreads(); Assert.IsTrue(threads.Count() > 0); foreach (var t in threads) { Assert.IsTrue(!string.IsNullOrEmpty(t.Link)); Assert.IsTrue(threads.Count(x => x.Link == t.Link) == 1); Assert.IsTrue(t.PostsCount > 0); Assert.IsTrue(!string.IsNullOrEmpty(t.Title)); } }
private IMarkupProvider GetMarkupProviderMock(IDictionary <int, List <IElement> > pagesWithThreads) { var markupProviderMock = new Mock <IMarkupProvider>(MockBehavior.Strict); var sut = new ForumsCrawler(markupProviderMock.Object); foreach (var key in pagesWithThreads.Keys) { var docMock = this.GetDoc(pagesWithThreads[key]); AddPager(pagesWithThreads.Keys.Count, docMock); markupProviderMock .Setup(x => x.GetDomDocument(It.Is <string>(s => s.EndsWith(key.ToString())))) .Returns(docMock.Object); } return(markupProviderMock.Object); }
public Task Execute(IJobExecutionContext context) { var forumsCrawler = new ForumsCrawler(new MarkupProvider()); var threads = forumsCrawler.GetThreads(); // get only threads that are not answered and are new threads = threads.Where(x => !x.IsAnswered && x.PostsCount == 1); Console.WriteLine($"Threads count: {threads.Count()}"); var azureDevOpsService = new AzureDevOpsService(vstsCollectionUrl, pat); WorkItem rfaWorkItem = null; try { rfaWorkItem = azureDevOpsService.GetWorkItem("RFA"); } catch (Exception e) { Console.WriteLine(e.Message); throw; } if (rfaWorkItem != null) { Console.WriteLine($"Found RFA"); var childrenWorkItems = azureDevOpsService.GetChildrenWorkItems(rfaWorkItem); var childrenWorkItemsTitles = childrenWorkItems.Select(x => x.Fields[Constants.Title].ToString()).ToList(); foreach (var thread in threads) { var threadTitle = $"Forum: {thread.Title}"; var isAlreadyLogged = childrenWorkItemsTitles.Contains(threadTitle) || threadTitle == "Forum: Test thread 01"; if (!isAlreadyLogged) { Console.WriteLine($"Logs thread: {threadTitle}"); azureDevOpsService.CreateAndLinkToWorkItem(rfaWorkItem, threadTitle, $"<a href='{thread.Link}'>{thread.Link}</a>"); } } } return(Task.FromResult(0)); }
public void MarkupWithThreads_ReturnsCorrectNumberOfThreads() { var testPagesWithThreads = GetPagesWithThreads(5, 2); var provider = GetMarkupProviderMock(testPagesWithThreads); var sut = new ForumsCrawler(provider); var result = sut.GetThreads(); Assert.IsTrue(result.Count() == 10); var threads = result.ToList(); for (int i = 1; i <= threads.Count; i++) { var thread = threads[i - 1]; Assert.IsTrue(thread.Link == "id" + i); Assert.IsTrue(thread.Title == "title" + i); Assert.IsTrue(thread.IsAnswered == (i % 2 == 0)); Assert.IsTrue(thread.PostsCount == i); } }