From a46facb352ef747e8f15ecf813ad0d6d3c8821e1 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Tue, 6 Sep 2016 18:27:58 +0300 Subject: [PATCH] Add pytest-django and test things --- .gitignore | 1 + manage.py | 0 setup.cfg | 4 ++++ tests/__init__.py | 0 tests/settings.py | 23 +++++++++++++++++++++++ tests/templates/test.txt | 11 +++++++++++ tests/test_render.py | 26 ++++++++++++++++++++++++++ tests/urls.py | 18 ++++++++++++++++++ tox.ini | 1 + 9 files changed, 84 insertions(+) create mode 100644 manage.py create mode 100644 tests/__init__.py create mode 100644 tests/settings.py create mode 100644 tests/templates/test.txt create mode 100644 tests/test_render.py create mode 100644 tests/urls.py diff --git a/.gitignore b/.gitignore index b4c2573..5ba10f3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ dist *.pyc django_babel.egg-info .tox +htmlcov diff --git a/manage.py b/manage.py new file mode 100644 index 0000000..e69de29 diff --git a/setup.cfg b/setup.cfg index 5e40900..6993de8 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,2 +1,6 @@ [wheel] universal = 1 + +[tool:pytest] +DJANGO_SETTINGS_MODULE = tests.settings +norecursedirs = .git .tox .eggs .cache htmlcov venv* diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/settings.py b/tests/settings.py new file mode 100644 index 0000000..decc0d4 --- /dev/null +++ b/tests/settings.py @@ -0,0 +1,23 @@ +SECRET_KEY = 'x' +USE_I18N = True +ROOT_URLCONF = 'tests.urls' +INSTALLED_APPS = [ + 'django_babel', + 'tests', +] +MIDDLEWARE_CLASSES = [ + 'django.middleware.locale.LocaleMiddleware', + 'django_babel.middleware.LocaleMiddleware', +] +TEMPLATES = [ + { + 'NAME': 'default', + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.i18n', + ], + }, + }, +] diff --git a/tests/templates/test.txt b/tests/templates/test.txt new file mode 100644 index 0000000..0283a6c --- /dev/null +++ b/tests/templates/test.txt @@ -0,0 +1,11 @@ +{% load babel %} +language_code={{ LANGUAGE_CODE }} +language_name={{ locale.language_name }} +date={{ date|datefmt }} +datetime={{ date|datetimefmt }} +time={{ date|timefmt }} +number={{ number|numberfmt }} +decimal={{ number|decimalfmt }} +currency={{ number|currencyfmt:"EUR" }} +percent={{ number|percentfmt }} +scientificfmt={{ number|scientificfmt }} diff --git a/tests/test_render.py b/tests/test_render.py new file mode 100644 index 0000000..61d8ddb --- /dev/null +++ b/tests/test_render.py @@ -0,0 +1,26 @@ +# -- encoding: utf-8 -- +from __future__ import unicode_literals + +import pytest + + +@pytest.mark.parametrize('locale', ('en', 'fi', 'sv', 'pt-BR')) +def test_babel_render(client, locale): + """ + Test the middleware and the rendery bits. + """ + response = client.get('/', HTTP_ACCEPT_LANGUAGE=locale) + # "Parse" the key-value format + lines = response.content.decode('utf-8').strip().splitlines() + content = dict(kv.split('=', 1) for kv in lines) + # See that we're rendering in the locale we expect + assert content['language_code'] == locale.lower() + # check that we could access `babel.Locale.language_name` + assert content['language_name'] == { + 'en': 'English', + 'fi': 'suomi', + 'sv': 'svenska', + 'pt-BR': 'português', + }[locale] + # The rest are not really tested (aside from smoke tests) further; + # the Babel test suite has taken care of that. diff --git a/tests/urls.py b/tests/urls.py new file mode 100644 index 0000000..2bf2501 --- /dev/null +++ b/tests/urls.py @@ -0,0 +1,18 @@ +import time + +from django.conf.urls import url +from django.shortcuts import render +from django.utils.timezone import now + + +def test_view(request): + return render(request, 'test.txt', { + 'date': now(), + 'number': time.time(), + 'locale': request.locale, + }) + + +urlpatterns = [ + url('^$', test_view), +] diff --git a/tox.ini b/tox.ini index fe5926c..4e341ea 100644 --- a/tox.ini +++ b/tox.ini @@ -6,6 +6,7 @@ deps = coverage pytest pytest-cov + pytest-django python-coveralls django15: Django>=1.5,<1.6 django16: Django>=1.6,<1.7