コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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));
        }
コード例 #4
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);
            }
        }