Browse Source

missingnotice: Implement article selection

Issue #64 (https://git.golderweb.de/wiki/jogobot-red/issues/64)
tags/v1.2^2
Jonathan Golder 1 year ago
parent
commit
95af95aca6
2 changed files with 57 additions and 0 deletions
  1. +22
    -0
      bots/missingnotice.py
  2. +35
    -0
      tests/missingnotice_tests.py

+ 22
- 0
bots/missingnotice.py View File

@@ -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 ):
"""


+ 35
- 0
tests/missingnotice_tests.py View File

@@ -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()

Loading…
Cancel
Save