Browse Source

missingnotice: Implement article selection

Issue #64 (https://git.golderweb.de/wiki/jogobot-red/issues/64)
develop
Jonathan Golder 6 years ago
parent
commit
95af95aca6
  1. 22
      bots/missingnotice.py
  2. 35
      tests/missingnotice_tests.py

22
bots/missingnotice.py

@ -51,6 +51,28 @@ ON `cl_from` = `page_id`
def run( self ): def run( self ):
print(type(self).get_categorized_articles() ) 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 @classmethod
def get_categorized_articles( cls ): def get_categorized_articles( cls ):
""" """

35
tests/missingnotice_tests.py

@ -29,6 +29,8 @@ Test module bot/missingnotice.py
import unittest import unittest
from unittest import mock # noqa from unittest import mock # noqa
import pywikibot
import context # noqa import context # noqa
from bots.missingnotice import MissingNoticeBot # noqa from bots.missingnotice import MissingNoticeBot # noqa
@ -38,6 +40,13 @@ class TestMissingNoticeBot(unittest.TestCase):
Test class MissingNoticeBot 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', @mock.patch( 'sqlalchemy.engine.Engine.execute',
return_value=( { "page_title": b"a", }, return_value=( { "page_title": b"a", },
{ "page_title": b"b", }, { "page_title": b"b", },
@ -54,6 +63,32 @@ class TestMissingNoticeBot(unittest.TestCase):
self.assertTrue(execute_mock.called) self.assertTrue(execute_mock.called)
self.assertEqual(result, ["a", "b", "c", "d"] ) 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__': if __name__ == '__main__':
unittest.main() unittest.main()

Loading…
Cancel
Save