From c4de706925684bac2b540bef0b54f72821d0fdc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20Michael=20O=2E=20Hegg=C3=B8?= <danmichaelo@gmail.com> Date: Tue, 23 Aug 2016 23:50:25 +0200 Subject: [PATCH] Add test that would have caught #135 --- tests/test_listing.py | 116 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 tests/test_listing.py diff --git a/tests/test_listing.py b/tests/test_listing.py new file mode 100644 index 0000000..749649e --- /dev/null +++ b/tests/test_listing.py @@ -0,0 +1,116 @@ +# encoding=utf-8 +from __future__ import print_function + +import unittest +import pytest +import logging +import requests +import responses +import mock +import mwclient +from mwclient.listing import List, GeneratorList + +try: + import json +except ImportError: + import simplejson as json + +if __name__ == "__main__": + print() + print("Note: Running in stand-alone mode. Consult the README") + print(" (section 'Contributing') for advice on running tests.") + print() + + +class TestList(unittest.TestCase): + + def setUp(self): + pass + + def setupDummyResponses(self, mock_site, result_member, ns=None): + if ns is None: + ns = [0, 0, 0] + mock_site.api.side_effect = [ + { + 'continue': { + 'apcontinue': 'Kre_Mbaye', + 'continue': '-||' + }, + 'query': { + result_member: [ + { + "pageid": 19839654, + "ns": ns[0], + "title": "Kre'fey", + }, + { + "pageid": 19839654, + "ns": ns[1], + "title": "Kre-O", + } + ] + } + }, + { + 'query': { + result_member: [ + { + "pageid": 30955295, + "ns": ns[2], + "title": "Kre-O Transformers", + } + ] + } + }, + ] + + @mock.patch('mwclient.client.Site') + def test_list_continuation(self, mock_site): + # Test that the list fetches all three responses + # and yields dicts when return_values not set + + lst = List(mock_site, 'allpages', 'ap', limit=2) + self.setupDummyResponses(mock_site, 'allpages') + vals = [x for x in lst] + + assert len(vals) == 3 + assert type(vals[0]) == dict + + @mock.patch('mwclient.client.Site') + def test_list_with_str_return_value(self, mock_site): + # Test that the List yields strings when return_values is string + + lst = List(mock_site, 'allpages', 'ap', limit=2, return_values='title') + self.setupDummyResponses(mock_site, 'allpages') + vals = [x for x in lst] + + assert len(vals) == 3 + assert type(vals[0]) == str + + @mock.patch('mwclient.client.Site') + def test_list_with_tuple_return_value(self, mock_site): + # Test that the List yields tuples when return_values is tuple + + lst = List(mock_site, 'allpages', 'ap', limit=2, + return_values=('title', 'ns')) + self.setupDummyResponses(mock_site, 'allpages') + vals = [x for x in lst] + + assert len(vals) == 3 + assert type(vals[0]) == tuple + + @mock.patch('mwclient.client.Site') + def test_generator_list(self, mock_site): + # Test that the GeneratorList yields Page objects + + lst = GeneratorList(mock_site, 'pages', 'p') + self.setupDummyResponses(mock_site, 'pages', ns=[0, 6, 14]) + vals = [x for x in lst] + + assert len(vals) == 3 + assert type(vals[0]) == mwclient.page.Page + assert type(vals[1]) == mwclient.image.Image + assert type(vals[2]) == mwclient.listing.Category + +if __name__ == '__main__': + unittest.main() -- GitLab