Skip to content

Commit f396b09

Browse files
committed
Merge branch 'add-tests'
2 parents 3ccf15e + 7f95974 commit f396b09

File tree

8 files changed

+263
-30
lines changed

8 files changed

+263
-30
lines changed

.circleci/config.yml

Lines changed: 76 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,79 @@
11
version: 2.1
22

3-
jobs:
4-
build:
3+
references:
4+
install-poetry: &install-poetry
5+
run:
6+
name: Install Poetry
7+
command: |
8+
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
9+
restore-dependencies-cache: &restore-dependencies-cache
10+
restore_cache:
11+
keys:
12+
- deps-py<< parameters.python-version >>-django<< parameters.django-version >>-{{ checksum "poetry.lock" }}
13+
install-dependencies: &install-dependencies
14+
run:
15+
name: Install Dependencies
16+
command: |
17+
source $HOME/.poetry/env
18+
poetry install
19+
poetry run pip install "django~=<< parameters.django-version >>.0"
20+
save-dependencies-cache: &save-dependencies-cache
21+
save_cache:
22+
key: deps-py<< parameters.python-version >>-django<< parameters.django-version >>-{{ checksum "poetry.lock" }}
23+
paths:
24+
- /home/circleci/.cache/pypoetry/virtualenvs
25+
parametrised-python-executor: &parametrised-python-executor
26+
parameters:
27+
python-version:
28+
type: string
29+
django-version:
30+
type: string
31+
executor:
32+
name: python
33+
version: << parameters.python-version >>
34+
version-matrix: &version-matrix
35+
matrix:
36+
parameters:
37+
python-version: ["3.5.5", "3.6", "3.7", "3.8", "3.9", "3.10"]
38+
django-version: ["2.2", "3.0", "3.1", "3.2"]
39+
exclude:
40+
- python-version: "3.5.5"
41+
django-version: "3.0"
42+
- python-version: "3.5.5"
43+
django-version: "3.1"
44+
- python-version: "3.5.5"
45+
django-version: "3.2"
46+
47+
executors:
48+
python:
49+
parameters:
50+
version:
51+
type: string
552
docker:
6-
- image: circleci/python:3.5.5
53+
- image: circleci/python:<< parameters.version >>
54+
55+
jobs:
56+
build-test:
57+
<<: *parametrised-python-executor
58+
759
steps:
860
- checkout
9-
- run:
10-
name: Install Poetry
11-
command: |
12-
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
13-
- restore_cache:
14-
keys:
15-
- deps-{{ checksum "poetry.lock" }}
16-
- run:
17-
name: Install Dependencies
18-
command: |
19-
source $HOME/.poetry/env
20-
poetry install
21-
- save_cache:
22-
key: deps-{{ checksum "poetry.lock" }}
23-
paths:
24-
- /home/circleci/.cache/pypoetry/virtualenvs
61+
62+
- *install-poetry
63+
- *restore-dependencies-cache
64+
- *install-dependencies
65+
- *save-dependencies-cache
2566

2667
- run:
27-
name: Build
68+
name: Run Tests
2869
command: |
2970
source $HOME/.poetry/env
30-
poetry build
71+
poetry run ./runtests
72+
3173
deploy:
32-
docker:
33-
- image: circleci/python:3.5.5
74+
executor:
75+
name: python
76+
version: "3.7"
3477
steps:
3578
- checkout
3679
- run:
@@ -43,16 +86,21 @@ jobs:
4386
--username "${PYPI_USERNAME}" \
4487
--password "${PYPI_PASSWORD}" \
4588
--no-interaction
89+
4690
workflows:
4791
version: 2.1
4892

49-
build:
93+
build-test:
5094
jobs:
51-
- build
95+
- build-test:
96+
name: build-test-py<< matrix.python-version >>-Django<< matrix.django-version >>
97+
<<: *version-matrix
5298

53-
build-deploy:
99+
build-test-deploy:
54100
jobs:
55-
- build:
101+
- build-test:
102+
name: build-test-py<< matrix.python-version >>-Django<< matrix.django-version >>
103+
<<: *version-matrix
56104
filters:
57105
tags:
58106
only: /v[0-9]+(\.[0-9]+)*/
@@ -62,7 +110,7 @@ workflows:
62110
- deploy:
63111
context: thread-pypi
64112
requires:
65-
- build
113+
- build-test
66114
filters:
67115
tags:
68116
only: /v[0-9]+(\.[0-9]+)*/

poetry.lock

Lines changed: 61 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ packages = [
1111

1212
[tool.poetry.dependencies]
1313
python = "^3.5"
14+
Django = "<4"
15+
django-debug-toolbar = "<4"
1416

1517
[tool.poetry.dev-dependencies]
1618

runtests

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/usr/bin/env python
2+
3+
import os
4+
import sys
5+
import django
6+
7+
from django.conf import settings
8+
from django.test.utils import get_runner
9+
10+
if __name__ == '__main__':
11+
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.settings'
12+
django.setup()
13+
failures = get_runner(settings)().run_tests(sys.argv[1:])
14+
sys.exit(bool(failures))

tests/__init__.py

Whitespace-only changes.

tests/settings.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
SECRET_KEY = 'very-secret-value'
2+
3+
INSTALLED_APPS = [
4+
'django.contrib.auth',
5+
'django.contrib.contenttypes', # needed by django.auth
6+
'django.contrib.sessions',
7+
'debug_toolbar',
8+
'debug_toolbar_user_switcher',
9+
]
10+
11+
DATABASES={
12+
'default': {
13+
'ENGINE': 'django.db.backends.sqlite3',
14+
}
15+
}
16+
17+
ROOT_URLCONF = 'tests.urls'
18+
19+
MIDDLEWARE = (
20+
'django.contrib.sessions.middleware.SessionMiddleware',
21+
'django.contrib.auth.middleware.AuthenticationMiddleware',
22+
'debug_toolbar.middleware.DebugToolbarMiddleware',
23+
)
24+
25+
TEMPLATES = (
26+
{
27+
'BACKEND': 'django.template.backends.django.DjangoTemplates',
28+
'APP_DIRS': True,
29+
'DIRS': (),
30+
'OPTIONS': {
31+
'debug': True,
32+
'builtins': [],
33+
},
34+
},
35+
)
36+
37+
DEBUG_TOOLBAR_PANELS = (
38+
'debug_toolbar_user_switcher.panels.UserPanel',
39+
)
40+
41+
DEBUG_TOOLBAR_USER_DEBUG = True

tests/test_user_panel.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
from typing import Union
2+
3+
from django.contrib.auth import get_user
4+
from django.contrib.auth.models import AnonymousUser, User
5+
from django.http import HttpRequest
6+
from django.test import TestCase
7+
from django.urls import reverse
8+
9+
10+
class UserPanelTests(TestCase):
11+
def assertCurrentUser(self, expected_user: Union[User, AnonymousUser]) -> None:
12+
request = HttpRequest()
13+
request.session = self.client.session
14+
user = get_user(request)
15+
self.assertEqual(expected_user, user, "Wrong user on session")
16+
17+
@classmethod
18+
def setUpTestData(cls) -> None:
19+
cls.user = User.objects.create(
20+
21+
username='demo-example',
22+
)
23+
User.objects.create(
24+
25+
username='other-example',
26+
)
27+
28+
def test_login_form_view(self) -> None:
29+
response = self.client.post(
30+
reverse('djdt:debug-userpanel-login-form'),
31+
data={'val': self.user.email},
32+
)
33+
self.assertRedirects(
34+
response,
35+
'/',
36+
fetch_redirect_response=False,
37+
)
38+
self.assertCurrentUser(self.user)
39+
40+
def test_login_id_view(self) -> None:
41+
response = self.client.post(
42+
reverse('djdt:debug-userpanel-login', args=(self.user.pk,)),
43+
)
44+
self.assertRedirects(
45+
response,
46+
'/',
47+
fetch_redirect_response=False,
48+
)
49+
self.assertCurrentUser(self.user)
50+
51+
def test_logout_view(self) -> None:
52+
self.client.force_login(self.user)
53+
response = self.client.post(
54+
reverse('djdt:debug-userpanel-logout'),
55+
)
56+
self.assertRedirects(
57+
response,
58+
'/',
59+
fetch_redirect_response=False,
60+
)
61+
self.assertCurrentUser(AnonymousUser())

tests/urls.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import debug_toolbar
2+
from django.urls import include, path
3+
4+
app_name = 'test'
5+
6+
urlpatterns = (
7+
path('__debug__', include(debug_toolbar.urls)),
8+
)

0 commit comments

Comments
 (0)