From 95af95aca6089792869245aba6a99e5d904d7beb Mon Sep 17 00:00:00 2001 From: Jonathan Golder Date: Tue, 18 Sep 2018 13:27:46 +0200 Subject: [PATCH] missingnotice: Implement article selection Issue #64 (https://git.golderweb.de/wiki/jogobot-red/issues/64) --- bots/missingnotice.py | 22 ++++++++++++++++++++++ tests/missingnotice_tests.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/bots/missingnotice.py b/bots/missingnotice.py index 84a3772..3006a6b 100644 --- a/bots/missingnotice.py +++ b/bots/missingnotice.py @@ -51,6 +51,28 @@ ON `cl_from` = `page_id` def run( self ): print(type(self).get_categorized_articles() ) + def treat_articles(self, articles): + """ + Iterates over given articles and checks weather them are included in + self.categorized_articles (contain the notice) + + @param articles Articles to check + @type articles iterable of pywikibot.page() objects + + @returns Possibly empty list of wikitext links ("[[article]]") + @rtype list + """ + links = list() + + for article in articles: + + if article.title(underscore=True, with_section=False ) not in \ + self.categorized_articles: + + links.append( article.title(as_link=True, textlink=True) ) + + return links + @classmethod def get_categorized_articles( cls ): """ diff --git a/tests/missingnotice_tests.py b/tests/missingnotice_tests.py index 2e3c1b4..957a850 100644 --- a/tests/missingnotice_tests.py +++ b/tests/missingnotice_tests.py @@ -29,6 +29,8 @@ Test module bot/missingnotice.py import unittest from unittest import mock # noqa +import pywikibot + import context # noqa from bots.missingnotice import MissingNoticeBot # noqa @@ -38,6 +40,13 @@ class TestMissingNoticeBot(unittest.TestCase): Test class MissingNoticeBot """ + def setUp(self): + genFactory = pywikibot.pagegenerators.GeneratorFactory() + self.MissingNoticeBot = MissingNoticeBot(genFactory) + self.MissingNoticeBot.categorized_articles = [ "Deutschland", + "Max_Schlee", + "Hodeng-Hodenger" ] + @mock.patch( 'sqlalchemy.engine.Engine.execute', return_value=( { "page_title": b"a", }, { "page_title": b"b", }, @@ -54,6 +63,32 @@ class TestMissingNoticeBot(unittest.TestCase): self.assertTrue(execute_mock.called) self.assertEqual(result, ["a", "b", "c", "d"] ) + def test_treat_articles( self ): + """ + Test method treat_articles() + """ + + # articles with notice + a = pywikibot.Page(pywikibot.Site(), "Deutschland" ) + b = pywikibot.Page(pywikibot.Site(), "Max_Schlee" ) + c = pywikibot.Page(pywikibot.Site(), "Hodeng-Hodenger#Test" ) + # articles without notice + x = pywikibot.Page(pywikibot.Site(), "Quodvultdeus" ) + y = pywikibot.Page(pywikibot.Site(), "Zoo_Bremen" ) + z = pywikibot.Page(pywikibot.Site(), "Nulka#Test" ) + + cases = ( ( ( a, b, c ), list() ), + ( ( x, y, z ), [ "[[Quodvultdeus]]", + "[[Zoo Bremen]]", + "[[Nulka#Test]]" ]), + ( ( a, b, y, z ), [ "[[Zoo Bremen]]", + "[[Nulka#Test]]" ]), ) + + for case in cases: + res = self.MissingNoticeBot.treat_articles( case[0] ) + + self.assertEqual( res, case[1] ) + if __name__ == '__main__': unittest.main()