Skip to content
This repository was archived by the owner on Jun 27, 2023. It is now read-only.

Commit a248863

Browse files
author
staticdev
committed
Test improvements
1 parent 15552b7 commit a248863

13 files changed

+139
-97
lines changed

.pre-commit-config.yaml

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ repos:
77
- id: end-of-file-fixer
88
- id: trailing-whitespace
99
- id: check-added-large-files
10-
- repo: https://github.com/prettier/prettier
11-
rev: 2.0.5
12-
hooks:
13-
- id: prettier
10+
# - repo: https://github.com/prettier/prettier
11+
# rev: 2.0.5
12+
# hooks:
13+
# - id: prettier
1414
- repo: https://github.com/psf/black
1515
rev: 19.10b0
1616
hooks:

codecov.yml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
comment: false
2+
coverage:
3+
status:
4+
project:
5+
default:
6+
target: "30"
7+
patch:
8+
default:
9+
target: "30"

noxfile.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
package = "django_pagination_bootstrap"
1313
python_versions = ["3.8", "3.7", "3.6"]
14-
nox.options.sessions = "pre-commit", "safety", "mypy" # , "tests"
14+
nox.options.sessions = "pre-commit", "safety", "mypy", "tests"
1515
locations = "src", "tests", "noxfile.py"
1616

1717

@@ -139,9 +139,11 @@ def mypy(session: Session) -> None:
139139
def tests(session: Session) -> None:
140140
"""Run the test suite."""
141141
install_package(session)
142-
install(session, "coverage[toml]", "pytest")
143-
session.run("coverage", "run", "--parallel", "-m", "pytest", *session.posargs)
144-
session.notify("coverage")
142+
install(session, "coverage[toml]", "pytest", "pytest-django")
143+
try:
144+
session.run("coverage", "run", "--parallel", "-m", "pytest", *session.posargs)
145+
finally:
146+
session.notify("coverage")
145147

146148

147149
@nox.session

poetry.lock

+21-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ pytest = "^5.4.2"
3939
coverage = {extras = ["toml"], version = "^5.1"}
4040
safety = "^1.9.0"
4141
mypy = "^0.770"
42+
pytest-django = "^3.9.0"
4243

4344
[tool.coverage.paths]
4445
source = ["src", "*/site-packages"]

pytest.ini

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[pytest]
2+
DJANGO_SETTINGS_MODULE = tests.testapp.settings

runtests.py

+3-36
Original file line numberDiff line numberDiff line change
@@ -7,43 +7,10 @@
77
from django.conf import settings
88
from django.test.utils import get_runner
99

10-
APP_NAME = "django_pagination_bootstrap"
1110

12-
# set TEMPLATE_CONTEXT_PROCESSORS or TEMPLATES, based on django version
13-
# http://stackoverflow.com/a/16805125/4126114
14-
settings.configure(
15-
DEBUG=True,
16-
DATABASES={"default": {"ENGINE": "django.db.backends.sqlite3"}},
17-
USE_TZ=True,
18-
MIDDLEWARE=["pagination_bootstrap.middleware.PaginationMiddleware"],
19-
SITE_ID=1,
20-
INSTALLED_APPS=(
21-
"django.contrib.auth",
22-
"django.contrib.contenttypes",
23-
"django.contrib.sessions",
24-
"django.contrib.sites",
25-
APP_NAME,
26-
),
27-
TEMPLATES=[
28-
{
29-
"BACKEND": "django.template.backends.django.DjangoTemplates",
30-
"DIRS": [os.path.join(os.path.dirname(__file__), "templates")],
31-
"OPTIONS": {
32-
"context_processors": [
33-
"django.template.context_processors.debug",
34-
"django.template.context_processors.request",
35-
"django.contrib.auth.context_processors.auth",
36-
"django.template.context_processors.i18n",
37-
"django.template.context_processors.media",
38-
],
39-
"loaders": [
40-
"django.template.loaders.filesystem.Loader",
41-
"django.template.loaders.app_directories.Loader",
42-
],
43-
},
44-
}
45-
],
46-
)
11+
sys.path.insert(0, "tests")
12+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testapp.settings")
13+
APP_NAME = "django_pagination_bootstrap"
4714

4815
django.setup()
4916
TestRunner = get_runner(settings)

src/django_pagination_bootstrap/paginator.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def __init__(
3030
try:
3131
# no count or num pages
3232
del self._num_pages, self._count
33-
except NameError:
33+
except AttributeError:
3434
pass
3535
# bonus links
3636
self.link_template = link_template
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,29 @@
1-
{% if is_paginated %} {% load i18n %}
1+
{% if is_paginated %}
2+
{% load i18n %}
23

34
<nav aria-label="Page pagination">
45
<ul class="pagination">
5-
{% if page_obj.has_previous %}
6-
<li class="page-item">
7-
<a
8-
class="page-link"
9-
href="?page={{ page_obj.previous_page_number }}{{ getvars }}{{ hashtag }}"
10-
>&laquo;</a
11-
>
12-
</li>
13-
{% else %}
14-
<li class="page-item disabled">
15-
<a class="page-link" href="#" onclick="javascript: return false;"
16-
>&laquo;</a
17-
>
18-
</li>
19-
{% endif %} {% for page in pages %} {% if page %} {% ifequal page
20-
page_obj.number %}
21-
<li class="page-item active">
22-
<a class="page-link" href="#" onclick="javascript: return false;"
23-
>{{ page }}</a
24-
>
25-
</li>
26-
{% else %}
27-
<li class="page-item">
28-
<a class="page-link" href="?page={{ page }}{{ getvars }}{{ hashtag }}"
29-
>{{ page }}</a
30-
>
31-
</li>
32-
{% endifequal %} {% else %}
33-
<li class="page-item disabled">
34-
<a class="page-link" href="#" onclick="javascript: return false;">...</a>
35-
</li>
36-
{% endif %} {% endfor %} {% if page_obj.has_next %}
37-
<li class="page-item">
38-
<a
39-
class="page-link"
40-
href="?page={{ page_obj.next_page_number }}{{ getvars }}{{ hashtag }}"
41-
>&raquo;</a
42-
>
43-
</li>
6+
{% if page_obj.has_previous %}
7+
<li class="page-item"><a class="page-link" href="?page={{ page_obj.previous_page_number }}{{ getvars }}{{ hashtag }}">&laquo;</a></li>
8+
{% else %}
9+
<li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">&laquo;</a></li>
10+
{% endif %}
11+
{% for page in pages %}
12+
{% if page %}
13+
{% ifequal page page_obj.number %}
14+
<li class="page-item active"><a class="page-link" href="#" onclick="javascript: return false;">{{ page }}</a></li>
15+
{% else %}
16+
<li class="page-item"><a class="page-link" href="?page={{ page }}{{ getvars }}{{ hashtag }}">{{ page }}</a></li>
17+
{% endifequal %}
4418
{% else %}
45-
<li class="page-item disabled">
46-
<a class="page-link" href="#" onclick="javascript: return false;"
47-
>&raquo;</a
48-
>
49-
</li>
19+
<li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">...</a></li>
5020
{% endif %}
21+
{% endfor %}
22+
{% if page_obj.has_next %}
23+
<li class="page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}{{ getvars }}{{ hashtag }}">&raquo;</a></li>
24+
{% else %}
25+
<li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">&raquo;</a></li>
26+
{% endif %}
5127
</ul>
5228
{% endif %}
5329
</nav>

tests/manage.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env python
2+
"""Django's command-line utility for administrative tasks."""
3+
import os
4+
import sys
5+
6+
7+
def main():
8+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tests.settings")
9+
try:
10+
from django.core.management import execute_from_command_line
11+
except ImportError as exc:
12+
raise ImportError(
13+
"Couldn't import Django. Are you sure it's installed and "
14+
"available on your PYTHONPATH environment variable? Did you "
15+
"forget to activate a virtual environment?"
16+
) from exc
17+
execute_from_command_line(sys.argv)
18+
19+
20+
if __name__ == "__main__":
21+
main()

tests/test_paginator.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,15 @@ def test_render_range_by_two(self):
8080
c = Context({"var": range(21), "request": TestHttpRequest()})
8181
self.assertEqual(
8282
t.render(c),
83-
u'\n\n\n<nav aria-label="Page pagination">\n <ul class="pagination">\n \n <li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">&laquo;</a></li>\n \n \n \n \n <li class="page-item active"><a class="page-link" href="#" onclick="javascript: return false;">1</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">2</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=3">3</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=4">4</a></li>\n \n \n \n \n <li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">...</a></li>\n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=8">8</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=9">9</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=10">10</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=11">11</a></li>\n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">&raquo;</a></li>\n \n </ul>\n \n</nav>\n',
83+
'\n\n\n<nav aria-label="Page pagination">\n <ul class="pagination">\n \n <li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">&laquo;</a></li>\n \n \n \n \n <li class="page-item active"><a class="page-link" href="#" onclick="javascript: return false;">1</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">2</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=3">3</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=4">4</a></li>\n \n \n \n \n <li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">...</a></li>\n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=8">8</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=9">9</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=10">10</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=11">11</a></li>\n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">&raquo;</a></li>\n \n </ul>\n \n</nav>\n',
8484
)
8585

8686
def test_render_range_by_one(self):
8787
t = Template("{% load pagination_tags %}{% autopaginate var %}{% paginate %}")
8888
c = Context({"var": range(21), "request": TestHttpRequest()})
8989
self.assertEqual(
9090
t.render(c),
91-
u'\n\n\n<nav aria-label="Page pagination">\n <ul class="pagination">\n \n <li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">&laquo;</a></li>\n \n \n \n \n <li class="page-item active"><a class="page-link" href="#" onclick="javascript: return false;">1</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">2</a></li>\n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">&raquo;</a></li>\n \n </ul>\n \n</nav>\n',
91+
'\n\n\n<nav aria-label="Page pagination">\n <ul class="pagination">\n \n <li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">&laquo;</a></li>\n \n \n \n \n <li class="page-item active"><a class="page-link" href="#" onclick="javascript: return false;">1</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">2</a></li>\n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">&raquo;</a></li>\n \n </ul>\n \n</nav>\n',
9292
)
9393

9494
def test_render_range_by_twenty(self):
@@ -98,7 +98,7 @@ def test_render_range_by_twenty(self):
9898
c = Context({"var": range(21), "request": TestHttpRequest()})
9999
self.assertEqual(
100100
t.render(c),
101-
u'\n\n\n<nav aria-label="Page pagination">\n <ul class="pagination">\n \n <li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">&laquo;</a></li>\n \n \n \n \n <li class="page-item active"><a class="page-link" href="#" onclick="javascript: return false;">1</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">2</a></li>\n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">&raquo;</a></li>\n \n </ul>\n \n</nav>\n',
101+
'\n\n\n<nav aria-label="Page pagination">\n <ul class="pagination">\n \n <li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">&laquo;</a></li>\n \n \n \n \n <li class="page-item active"><a class="page-link" href="#" onclick="javascript: return false;">1</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">2</a></li>\n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">&raquo;</a></li>\n \n </ul>\n \n</nav>\n',
102102
)
103103

104104
def test_render_range_by_var(self):
@@ -108,7 +108,7 @@ def test_render_range_by_var(self):
108108
c = Context({"var": range(21), "by": 20, "request": TestHttpRequest()})
109109
self.assertEqual(
110110
t.render(c),
111-
u'\n\n\n<nav aria-label="Page pagination">\n <ul class="pagination">\n \n <li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">&laquo;</a></li>\n \n \n \n \n <li class="page-item active"><a class="page-link" href="#" onclick="javascript: return false;">1</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">2</a></li>\n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">&raquo;</a></li>\n \n </ul>\n \n</nav>\n',
111+
'\n\n\n<nav aria-label="Page pagination">\n <ul class="pagination">\n \n <li class="page-item disabled"><a class="page-link" href="#" onclick="javascript: return false;">&laquo;</a></li>\n \n \n \n \n <li class="page-item active"><a class="page-link" href="#" onclick="javascript: return false;">1</a></li>\n \n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">2</a></li>\n \n \n \n \n <li class="page-item"><a class="page-link" href="?page=2">&raquo;</a></li>\n \n </ul>\n \n</nav>\n',
112112
)
113113

114114
def test_render_range_by_var_as_name(self):
@@ -118,7 +118,7 @@ def test_render_range_by_var_as_name(self):
118118
c = Context({"var": list(range(21)), "by": 20, "request": TestHttpRequest()})
119119
self.assertEqual(
120120
t.render(c),
121-
u"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]",
121+
"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]",
122122
)
123123

124124

tests/testapp/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Test app for the django-pagination-bootstrap package."""

tests/testapp/settings.py

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
"""Django test settings."""
2+
import os
3+
4+
SECRET_KEY = "$%ffv#zpca%a#bdxtl&)&=5k20egnwcwjdg665r-lsr+s5zdw#"
5+
6+
APP_NAME = "django_pagination_bootstrap"
7+
8+
DEBUG = True
9+
10+
DATABASES = {"default": {"ENGINE": "django.db.backends.sqlite3"}}
11+
12+
USE_TZ = True
13+
14+
MIDDLEWARE = ["pagination_bootstrap.middleware.PaginationMiddleware"]
15+
16+
SITE_ID = 1
17+
18+
INSTALLED_APPS = (
19+
"django.contrib.auth",
20+
"django.contrib.contenttypes",
21+
"django.contrib.sessions",
22+
"django.contrib.sites",
23+
APP_NAME,
24+
)
25+
26+
TEMPLATES = [
27+
{
28+
"BACKEND": "django.template.backends.django.DjangoTemplates",
29+
"DIRS": [os.path.join(os.path.dirname(__file__), "templates")],
30+
"OPTIONS": {
31+
"context_processors": [
32+
"django.template.context_processors.debug",
33+
"django.template.context_processors.request",
34+
"django.contrib.auth.context_processors.auth",
35+
"django.template.context_processors.i18n",
36+
"django.template.context_processors.media",
37+
],
38+
"loaders": [
39+
"django.template.loaders.filesystem.Loader",
40+
"django.template.loaders.app_directories.Loader",
41+
],
42+
},
43+
}
44+
]

0 commit comments

Comments
 (0)