From fb9e18b59453b249bae9b31531ff9bd39f23adfb Mon Sep 17 00:00:00 2001 From: Albert Tugushev Date: Fri, 1 Jan 2016 12:09:59 +0300 Subject: [PATCH] Convert doctests to django unittests Resolve issue #30 --- linaro_django_pagination/tests/__init__.py | 1 + linaro_django_pagination/tests/runner.py | 24 +- linaro_django_pagination/tests/settings.py | 12 + linaro_django_pagination/tests/test_main.py | 575 ++++++++++++-------- 4 files changed, 354 insertions(+), 258 deletions(-) create mode 100644 linaro_django_pagination/tests/settings.py diff --git a/linaro_django_pagination/tests/__init__.py b/linaro_django_pagination/tests/__init__.py index e69de29..7ac2628 100644 --- a/linaro_django_pagination/tests/__init__.py +++ b/linaro_django_pagination/tests/__init__.py @@ -0,0 +1 @@ +from .test_main import * diff --git a/linaro_django_pagination/tests/runner.py b/linaro_django_pagination/tests/runner.py index 44c6f69..8ef3ab9 100755 --- a/linaro_django_pagination/tests/runner.py +++ b/linaro_django_pagination/tests/runner.py @@ -1,36 +1,22 @@ #!/usr/bin/env python + import django -import doctest +import os import sys -from django.conf import settings +from django.core.management import call_command def runtests(): - if not settings.configured: - # Configure test environment - settings.configure( - SECRET_KEY='fake-key', - INSTALLED_APPS=( - 'linaro_django_pagination', - ), - ) + os.environ['DJANGO_SETTINGS_MODULE'] = 'linaro_django_pagination.tests.settings' try: django.setup() except AttributeError: # for Django 1.6 compatible pass - from django.test.utils import get_runner - - TestRunner = get_runner(settings) - test_runner = TestRunner() - failures = test_runner.run_tests( - ["linaro_django_pagination.tests"], - extra_tests=[doctest.DocTestSuite('linaro_django_pagination.tests.test_main')] - ) + failures = call_command('test', 'linaro_django_pagination') sys.exit(bool(failures)) - if __name__ == '__main__': runtests() diff --git a/linaro_django_pagination/tests/settings.py b/linaro_django_pagination/tests/settings.py new file mode 100644 index 0000000..1572dfc --- /dev/null +++ b/linaro_django_pagination/tests/settings.py @@ -0,0 +1,12 @@ +DATABASES = { + 'default': { + 'NAME': ':memory:', + 'ENGINE': 'django.db.backends.sqlite3', + } +} + +SECRET_KEY = 'fake-key' + +INSTALLED_APPS = ( + 'linaro_django_pagination', +) diff --git a/linaro_django_pagination/tests/test_main.py b/linaro_django_pagination/tests/test_main.py index ba1baa1..1dc6d2c 100644 --- a/linaro_django_pagination/tests/test_main.py +++ b/linaro_django_pagination/tests/test_main.py @@ -28,243 +28,340 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from django.core.paginator import Paginator +from django.http import HttpRequest as DjangoHttpRequest +from django.template import Template, Context + +try: + from django.test import SimpleTestCase +except ImportError: # Django 1.2 compatible + from django.test import TestCase as SimpleTestCase + +from linaro_django_pagination.paginator import InfinitePaginator, FinitePaginator +from linaro_django_pagination.templatetags.pagination_tags import paginate +from linaro_django_pagination.middleware import PaginationMiddleware + + +class HttpRequest(DjangoHttpRequest): + page = lambda self, suffix: 1 + + +class CommonTestCase(SimpleTestCase): + def test_records_for_the_first_page(self): + p = Paginator(range(15), 2) + pg = paginate({'paginator': p, 'page_obj': p.page(1)}) + self.assertListEqual(pg['pages'], [1, 2, 3, 4, 5, 6, 7, 8]) + self.assertEqual(pg['records']['first'], 1) + self.assertEqual(pg['records']['last'], 2) + + def test_records_for_the_last_page(self): + p = Paginator(range(15), 2) + pg = paginate({'paginator': p, 'page_obj': p.page(8)}) + self.assertListEqual(pg['pages'], [1, 2, 3, 4, 5, 6, 7, 8]) + self.assertEqual(pg['records']['first'], 15) + self.assertEqual(pg['records']['last'], 15) + + def test_pages_list(self): + p = Paginator(range(17), 2) + self.assertEqual(paginate({'paginator': p, 'page_obj': p.page(1)})['pages'], [1, 2, 3, 4, 5, 6, 7, 8, 9]) + + def test_page_with_empty_objects_list(self): + p = Paginator(range(0), 2) + self.assertListEqual(paginate({'paginator': p, 'page_obj': p.page(1)})['pages'], [1]) + + +class DefaultWindowTestCase(SimpleTestCase): + """ + Test paginate using default window setting + moving the window from 1 ... to end + window size = 2, margin = 2 + window = 2 -> show 5 pages + """ + def setUp(self): + self.p = Paginator(range(31), 2) + + def test_on_start_page_1(self): + # [1] 2 3 4 5 ... 15, 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(1)}, 2, 2)['pages'], + [1, 2, 3, 4, 5, None, 15, 16] + ) + + def test_on_start_page_2(self): + # 1 [2] 3 4 5 ... 15, 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(2)}, 2, 2)['pages'], + [1, 2, 3, 4, 5, None, 15, 16] + ) + + def test_on_start_page_3(self): + # 1 2 [3] 4 5 ... 15, 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(3)}, 2, 2)['pages'], + [1, 2, 3, 4, 5, None, 15, 16] + ) + + def test_on_start_page_4(self): + # 1 2 3 [4] 5 6 ... 15, 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(4)}, 2, 2)['pages'], + [1, 2, 3, 4, 5, 6, None, 15, 16]) + + def test_on_start_page_5(self): + # 1 2 3 4 [5] 6 7 ... 15, 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(5)}, 2, 2)['pages'], + [1, 2, 3, 4, 5, 6, 7, None, 15, 16] + ) + + def test_in_middle(self): + # 1 2 ... 5 6 [7] 8 9 ... 15, 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(7)}, 2, 2)['pages'], + [1, 2, None, 5, 6, 7, 8, 9, None, 15, 16] + ) + + def test_on_end_page_13(self): + # 1 2 ... 12 [13] 14 15 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(13)}, 2, 2)['pages'], + [1, 2, None, 11, 12, 13, 14, 15, 16], + ) + + def test_on_end(self): + # 1 2 ... 12 13 14 15 [16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(16)}, 2, 2)['pages'], + [1, 2, None, 12, 13, 14, 15, 16] + ) + + +class NoMarginTestCase(SimpleTestCase): + def setUp(self): + self.p = Paginator(range(31), 2) + + def test_on_start(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(3)}, 2, 0)['pages'], + [1, 2, 3, 4, 5, None], + ) + + def test_in_middle(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(5)}, 2, 0)['pages'], + [None, 3, 4, 5, 6, 7, None], + ) + + def test_on_end(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(16)}, 2, 0)['pages'], + [None, 12, 13, 14, 15, 16], + ) + + +class ZeroWindowZeroMarginTestCase(SimpleTestCase): + """ + Test paginate using window=0 and margin=0 + """ + def setUp(self): + self.p = Paginator(range(31), 2) + + def test_on_start_page_1(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(1)}, 0, 0)['pages'], + [1, None], + ) + + def test_in_middle_page_2(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(2)}, 0, 0)['pages'], + [None, 2, None], + ) + + def test_in_middle_page_3(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(3)}, 0, 0)['pages'], + [None, 3, None], + ) + + def test_in_middle_page_10(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(10)}, 0, 0)['pages'], + [None, 10, None], + ) + + def test_in_middle_page_14(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(14)}, 0, 0)['pages'], + [None, 14, None], + ) + + def test_in_middle_page_15(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(15)}, 0, 0)['pages'], + [None, 15, None], + ) + + def test_on_end_page_16(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(16)}, 0, 0)['pages'], + [None, 16], + ) + + +class SpecialTestCase(SimpleTestCase): + def test_middle_with_no_window_and_margin_1(self): + p = Paginator(range(31), 2) + self.assertListEqual( + paginate({'paginator': p, 'page_obj': p.page(5)}, 0, 1)['pages'], + [1, None, 5, None, 16], + ) + + def test_middle_with_no_window_and_margin_4(self): + p = Paginator(range(21), 2, 1) + self.assertListEqual( + paginate({'paginator': p, 'page_obj': p.page(1)}, 0, 4)['pages'], + [1, 2, 3, 4, None, 7, 8, 9, 10], + ) + + +class TemplateRenderingTestCase(SimpleTestCase): + def test_default_tag_options(self): + t = Template("{% load pagination_tags %}{% autopaginate var %}{% paginate %}") + self.assertIn( + '