Hello community,
here is the log from the commit of package python-pytest-django for
openSUSE:Factory checked in at 2019-11-03 11:39:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest-django (Old)
and /work/SRC/openSUSE:Factory/.python-pytest-django.new.2990 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pytest-django"
Sun Nov 3 11:39:21 2019 rev:8 rq:744143 version:3.6.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-pytest-django/python-pytest-django.changes
2019-08-23 11:08:01.286471160 +0200
+++
/work/SRC/openSUSE:Factory/.python-pytest-django.new.2990/python-pytest-django.changes
2019-11-03 11:39:22.634007607 +0100
@@ -1,0 +2,7 @@
+Wed Oct 30 11:54:08 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Update to 3.6.0:
+ * Rename test databases when running parallel Tox (#678, #680)
+ * Django unittests: restore "debug" function (#769, #771)
+
+-------------------------------------------------------------------
Old:
----
pytest-django-3.5.1.tar.gz
New:
----
pytest-django-3.6.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pytest-django.spec ++++++
--- /var/tmp/diff_new_pack.pfsLgA/_old 2019-11-03 11:39:23.090008177 +0100
+++ /var/tmp/diff_new_pack.pfsLgA/_new 2019-11-03 11:39:23.094008182 +0100
@@ -18,11 +18,10 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-pytest-django
-Version: 3.5.1
+Version: 3.6.0
Release: 0
Summary: A Django plugin for py.test
License: BSD-3-Clause
-Group: Development/Languages/Python
URL: https://github.com/pytest-dev/pytest-django
Source:
https://files.pythonhosted.org/packages/source/p/pytest-django/pytest-django-%{version}.tar.gz
BuildRequires: %{python_module Django}
++++++ pytest-django-3.5.1.tar.gz -> pytest-django-3.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/.gitignore
new/pytest-django-3.6.0/.gitignore
--- old/pytest-django-3.5.1/.gitignore 2019-06-29 18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/.gitignore 2019-10-17 03:07:43.000000000 +0200
@@ -9,6 +9,7 @@
.env
/.coverage.*
/.coverage
+/coverage.xml
/htmlcov/
.cache
.pytest_cache/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/.travis.yml
new/pytest-django-3.6.0/.travis.yml
--- old/pytest-django-3.5.1/.travis.yml 2019-06-29 18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/.travis.yml 2019-10-17 03:07:43.000000000 +0200
@@ -6,7 +6,10 @@
include:
- stage: baseline
python: 3.6
- env: TOXENV=py36-dj20-postgres-xdist-coverage
+ env:
+ - TOXENV=py36-dj20-postgres-xdist-coverage
+ # Test in verbose mode.
+ - PYTEST_ADDOPTS=-vv
services:
- postgresql
- python: 3.6
@@ -23,6 +26,8 @@
env: TOXENV=py37-dj21-sqlite-coverage
- python: 3.7
env: TOXENV=py37-dj22-sqlite-xdist-coverage
+ - python: 3.8-dev
+ env: TOXENV=py38-dj30-sqlite-xdist-coverage
# Explicitly test (older) pytest 4.1.
- python: 3.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/PKG-INFO
new/pytest-django-3.6.0/PKG-INFO
--- old/pytest-django-3.5.1/PKG-INFO 2019-06-29 18:28:42.000000000 +0200
+++ new/pytest-django-3.6.0/PKG-INFO 2019-10-17 03:07:59.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: pytest-django
-Version: 3.5.1
+Version: 3.6.0
Summary: A Django plugin for pytest.
Home-page: https://pytest-django.readthedocs.io/
Author: Andreas Pelme
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/codecov.yml
new/pytest-django-3.6.0/codecov.yml
--- old/pytest-django-3.5.1/codecov.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/pytest-django-3.6.0/codecov.yml 2019-10-17 03:07:43.000000000 +0200
@@ -0,0 +1,6 @@
+coverage:
+ status:
+ project: true
+ patch: true
+ changes: true
+comment: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/docs/changelog.rst
new/pytest-django-3.6.0/docs/changelog.rst
--- old/pytest-django-3.5.1/docs/changelog.rst 2019-06-29 18:28:26.000000000
+0200
+++ new/pytest-django-3.6.0/docs/changelog.rst 2019-10-17 03:07:43.000000000
+0200
@@ -1,6 +1,25 @@
Changelog
=========
+3.6.0 (2019-10-17)
+------------------
+
+Features
+^^^^^^^^
+
+* Rename test databases when running parallel Tox (#678, #680)
+
+Bugfixes
+^^^^^^^^
+
+* Django unittests: restore "debug" function (#769, #771)
+
+Misc
+^^^^
+
+* Improve/harden internal tests / infrastructure.
+
+
3.5.1 (2019-06-29)
------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/docs/database.rst
new/pytest-django-3.6.0/docs/database.rst
--- old/pytest-django-3.5.1/docs/database.rst 2019-06-29 18:28:26.000000000
+0200
+++ new/pytest-django-3.6.0/docs/database.rst 2019-10-17 03:07:43.000000000
+0200
@@ -191,21 +191,43 @@
fixture you want to override.
The default implementation of this fixture requests the
-:fixture:`django_db_modify_db_settings_xdist_suffix` to provide compatibility
+:fixture:`django_db_modify_db_settings_parallel_suffix` to provide
compatibility
with pytest-xdist.
This fixture is by default requested from :fixture:`django_db_setup`.
+django_db_modify_db_settings_parallel_suffix
+""""""""""""""""""""""""""""""""""""""""""""
+
+.. fixture:: django_db_modify_db_settings_parallel_suffix
+
+Requesting this fixture will add a suffix to the database name when the tests
+are run via `pytest-xdist`, or via `tox` in parallel mode.
+
+This fixture is by default requested from
+:fixture:`django_db_modify_db_settings`.
+
+django_db_modify_db_settings_tox_suffix
+"""""""""""""""""""""""""""""""""""""""
+
+.. fixture:: django_db_modify_db_settings_tox_suffix
+
+Requesting this fixture will add a suffix to the database name when the tests
+are run via `tox` in parallel mode.
+
+This fixture is by default requested from
+:fixture:`django_db_modify_db_settings_parallel_suffix`.
+
django_db_modify_db_settings_xdist_suffix
"""""""""""""""""""""""""""""""""""""""""
.. fixture:: django_db_modify_db_settings_xdist_suffix
Requesting this fixture will add a suffix to the database name when the tests
-are run via pytest-xdist.
+are run via `pytest-xdist`.
This fixture is by default requested from
-:fixture:`django_db_modify_db_settings`.
+:fixture:`django_db_modify_db_settings_parallel_suffix`.
django_db_use_migrations
""""""""""""""""""""""""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/docs/tutorial.rst
new/pytest-django-3.6.0/docs/tutorial.rst
--- old/pytest-django-3.5.1/docs/tutorial.rst 2019-06-29 18:28:26.000000000
+0200
+++ new/pytest-django-3.6.0/docs/tutorial.rst 2019-10-17 03:07:43.000000000
+0200
@@ -19,7 +19,7 @@
* Blog post: `Django Projects to Django Apps: Converting the Unit Tests, by
John Costa
-
<http://www.johnmcostaiii.net/2013/django-projects-to-django-apps-converting-the-unit-tests/>`_.
+
<https://www.johnmcostaiii.net/post/2013-04-21-django-projects-to-django-apps-converting-the-unit-tests/>`_.
For general information and tutorials on pytest, see the `pytest tutorial page
<https://pytest.org/en/latest/getting-started.html>`_.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/pytest_django/fixtures.py
new/pytest-django-3.6.0/pytest_django/fixtures.py
--- old/pytest-django-3.5.1/pytest_django/fixtures.py 2019-06-29
18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/pytest_django/fixtures.py 2019-10-17
03:07:43.000000000 +0200
@@ -33,35 +33,35 @@
@pytest.fixture(scope="session")
-def django_db_modify_db_settings_xdist_suffix(request):
+def django_db_modify_db_settings_tox_suffix(request):
skip_if_no_django()
- from django.conf import settings
-
- for db_settings in settings.DATABASES.values():
-
- try:
- test_name = db_settings["TEST"]["NAME"]
- except KeyError:
- test_name = None
+ tox_environment = os.getenv("TOX_PARALLEL_ENV")
+ if tox_environment:
+ # Put a suffix like _py27-django21 on tox workers
+ _set_suffix_to_test_databases(suffix=tox_environment)
- if not test_name:
- if db_settings["ENGINE"] == "django.db.backends.sqlite3":
- continue
- test_name = "test_{}".format(db_settings["NAME"])
[email protected](scope="session")
+def django_db_modify_db_settings_xdist_suffix(request):
+ skip_if_no_django()
+ xdist_suffix = getattr(request.config, "slaveinput", {}).get("slaveid")
+ if xdist_suffix:
# Put a suffix like _gw0, _gw1 etc on xdist processes
- xdist_suffix = getattr(request.config, "slaveinput", {}).get("slaveid")
- if test_name != ":memory:" and xdist_suffix is not None:
- test_name = "{}_{}".format(test_name, xdist_suffix)
+ _set_suffix_to_test_databases(suffix=xdist_suffix)
- db_settings.setdefault("TEST", {})
- db_settings["TEST"]["NAME"] = test_name
+
[email protected](scope="session")
+def django_db_modify_db_settings_parallel_suffix(
+ django_db_modify_db_settings_tox_suffix,
+ django_db_modify_db_settings_xdist_suffix,
+):
+ skip_if_no_django()
@pytest.fixture(scope="session")
-def django_db_modify_db_settings(django_db_modify_db_settings_xdist_suffix):
+def django_db_modify_db_settings(django_db_modify_db_settings_parallel_suffix):
skip_if_no_django()
@@ -169,6 +169,24 @@
migrate.Command = MigrateSilentCommand
+def _set_suffix_to_test_databases(suffix):
+ from django.conf import settings
+
+ for db_settings in settings.DATABASES.values():
+ test_name = db_settings.get("TEST", {}).get("NAME")
+
+ if not test_name:
+ if db_settings["ENGINE"] == "django.db.backends.sqlite3":
+ continue
+ test_name = "test_{}".format(db_settings["NAME"])
+
+ if test_name == ":memory:":
+ continue
+
+ db_settings.setdefault("TEST", {})
+ db_settings["TEST"]["NAME"] = "{}_{}".format(test_name, suffix)
+
+
# ############### User visible fixtures ################
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/pytest_django/plugin.py
new/pytest-django-3.6.0/pytest_django/plugin.py
--- old/pytest-django-3.5.1/pytest_django/plugin.py 2019-06-29
18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/pytest_django/plugin.py 2019-10-17
03:07:43.000000000 +0200
@@ -22,6 +22,8 @@
from .fixtures import django_db_keepdb # noqa
from .fixtures import django_db_createdb # noqa
from .fixtures import django_db_modify_db_settings # noqa
+from .fixtures import django_db_modify_db_settings_parallel_suffix # noqa
+from .fixtures import django_db_modify_db_settings_tox_suffix # noqa
from .fixtures import django_db_modify_db_settings_xdist_suffix # noqa
from .fixtures import _live_server_helper # noqa
from .fixtures import admin_client # noqa
@@ -520,8 +522,9 @@
cls = request.node.cls
- # implement missing (as of 1.10) debug() method for django's TestCase
- # see pytest-dev/pytest-django#406
+ # Implement missing (as of 2.2) debug() wrapper/method for Django's
TestCase.
+ # See pytest-dev/pytest-django#406.
+ # Pending PR for Django: https://github.com/django/django/pull/7436.
def _cleaning_debug(self):
testMethod = getattr(self, self._testMethodName)
skipped = getattr(self.__class__, "__unittest_skip__", False) or
getattr(
@@ -534,6 +537,7 @@
if not skipped:
self._post_teardown()
+ orig_debug = cls.debug
cls.debug = _cleaning_debug
with django_db_blocker.unblock():
@@ -549,6 +553,8 @@
else:
yield
+ cls.debug = orig_debug
+
@pytest.fixture(scope="function", autouse=True)
def _dj_autoclear_mailbox():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/pytest_django.egg-info/PKG-INFO
new/pytest-django-3.6.0/pytest_django.egg-info/PKG-INFO
--- old/pytest-django-3.5.1/pytest_django.egg-info/PKG-INFO 2019-06-29
18:28:42.000000000 +0200
+++ new/pytest-django-3.6.0/pytest_django.egg-info/PKG-INFO 2019-10-17
03:07:59.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: pytest-django
-Version: 3.5.1
+Version: 3.6.0
Summary: A Django plugin for pytest.
Home-page: https://pytest-django.readthedocs.io/
Author: Andreas Pelme
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-django-3.5.1/pytest_django.egg-info/SOURCES.txt
new/pytest-django-3.6.0/pytest_django.egg-info/SOURCES.txt
--- old/pytest-django-3.5.1/pytest_django.egg-info/SOURCES.txt 2019-06-29
18:28:42.000000000 +0200
+++ new/pytest-django-3.6.0/pytest_django.egg-info/SOURCES.txt 2019-10-17
03:07:59.000000000 +0200
@@ -6,6 +6,7 @@
MANIFEST.in
Makefile
README.rst
+codecov.yml
requirements.txt
setup.cfg
setup.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/pytest_django_test/compat.py
new/pytest-django-3.6.0/pytest_django_test/compat.py
--- old/pytest-django-3.5.1/pytest_django_test/compat.py 2019-06-29
18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/pytest_django_test/compat.py 2019-10-17
03:07:43.000000000 +0200
@@ -1,13 +1,4 @@
try:
- from urllib2 import urlopen, HTTPError # noqa
+ from urllib2 import urlopen, HTTPError
except ImportError:
- from urllib.request import urlopen, HTTPError # noqa
-
-# Django 1.10 removes patterns, instead it is just a list
-try:
- from django.conf.urls import patterns
-except ImportError:
-
- def patterns(prefix, *urls):
- assert prefix == ""
- return urls
+ from urllib.request import urlopen, HTTPError # noqa: F401
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/pytest_django_test/urls.py
new/pytest-django-3.6.0/pytest_django_test/urls.py
--- old/pytest-django-3.5.1/pytest_django_test/urls.py 2019-06-29
18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/pytest_django_test/urls.py 2019-10-17
03:07:43.000000000 +0200
@@ -1,10 +1,8 @@
from django.conf.urls import url
from .app import views
-from .compat import patterns
-urlpatterns = patterns(
- "",
+urlpatterns = [
url(r"^item_count/$", views.item_count),
url(r"^admin-required/$", views.admin_required_view),
-)
+]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-django-3.5.1/pytest_django_test/urls_overridden.py
new/pytest-django-3.6.0/pytest_django_test/urls_overridden.py
--- old/pytest-django-3.5.1/pytest_django_test/urls_overridden.py
2019-06-29 18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/pytest_django_test/urls_overridden.py
2019-10-17 03:07:43.000000000 +0200
@@ -1,8 +1,6 @@
from django.conf.urls import url
from django.http import HttpResponse
-from .compat import patterns
-
-urlpatterns = patterns(
- "", url(r"^overridden_url/$", lambda r: HttpResponse("Overridden urlconf
works!"))
-)
+urlpatterns = [
+ url(r"^overridden_url/$", lambda r: HttpResponse("Overridden urlconf
works!"))
+]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/tests/test_db_setup.py
new/pytest-django-3.6.0/tests/test_db_setup.py
--- old/pytest-django-3.5.1/tests/test_db_setup.py 2019-06-29
18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/tests/test_db_setup.py 2019-10-17
03:07:43.000000000 +0200
@@ -288,7 +288,135 @@
assert conn_db2.vendor == 'sqlite'
db_name = conn_db2.creation._get_test_db_name()
- assert 'test_custom_db_name_gw' in db_name
+ assert db_name.startswith('test_custom_db_name_gw')
+ """
+ )
+
+ result = django_testdir.runpytest_subprocess("--tb=short", "-vv",
"-n1")
+ assert result.ret == 0
+ result.stdout.fnmatch_lines(["*PASSED*test_a*"])
+
+
+class TestSqliteWithTox:
+
+ db_settings = {
+ "default": {
+ "ENGINE": "django.db.backends.sqlite3",
+ "NAME": "db_name",
+ "TEST": {"NAME": "test_custom_db_name"},
+ }
+ }
+
+ def test_db_with_tox_suffix(self, django_testdir, monkeypatch):
+ "A test to check that Tox DB suffix works when running in parallel."
+ monkeypatch.setenv("TOX_PARALLEL_ENV", "py37-django22")
+
+ django_testdir.create_test_module(
+ """
+ import pytest
+ from django.db import connections
+
+ @pytest.mark.django_db
+ def test_inner():
+
+ (conn, ) = connections.all()
+
+ assert conn.vendor == 'sqlite'
+ db_name = conn.creation._get_test_db_name()
+ assert db_name == 'test_custom_db_name_py37-django22'
+ """
+ )
+
+ result = django_testdir.runpytest_subprocess("--tb=short", "-vv")
+ assert result.ret == 0
+ result.stdout.fnmatch_lines(["*test_inner*PASSED*"])
+
+ def test_db_with_empty_tox_suffix(self, django_testdir, monkeypatch):
+ "A test to check that Tox DB suffix is not used when suffix would be
empty."
+ monkeypatch.setenv("TOX_PARALLEL_ENV", "")
+
+ django_testdir.create_test_module(
+ """
+ import pytest
+ from django.db import connections
+
+ @pytest.mark.django_db
+ def test_inner():
+
+ (conn,) = connections.all()
+
+ assert conn.vendor == 'sqlite'
+ db_name = conn.creation._get_test_db_name()
+ assert db_name == 'test_custom_db_name'
+ """
+ )
+
+ result = django_testdir.runpytest_subprocess("--tb=short", "-vv")
+ assert result.ret == 0
+ result.stdout.fnmatch_lines(["*test_inner*PASSED*"])
+
+
+class TestSqliteWithToxAndXdist:
+
+ db_settings = {
+ "default": {
+ "ENGINE": "django.db.backends.sqlite3",
+ "NAME": "db_name",
+ "TEST": {"NAME": "test_custom_db_name"},
+ }
+ }
+
+ def test_db_with_tox_suffix(self, django_testdir, monkeypatch):
+ "A test to check that both Tox and xdist suffixes work together."
+ pytest.importorskip("xdist")
+ monkeypatch.setenv("TOX_PARALLEL_ENV", "py37-django22")
+
+ django_testdir.create_test_module(
+ """
+ import pytest
+ from django.db import connections
+
+ @pytest.mark.django_db
+ def test_inner():
+
+ (conn, ) = connections.all()
+
+ assert conn.vendor == 'sqlite'
+ db_name = conn.creation._get_test_db_name()
+ assert
db_name.startswith('test_custom_db_name_py37-django22_gw')
+ """
+ )
+
+ result = django_testdir.runpytest_subprocess("--tb=short", "-vv",
"-n1")
+ assert result.ret == 0
+ result.stdout.fnmatch_lines(["*PASSED*test_inner*"])
+
+
+class TestSqliteInMemoryWithXdist:
+
+ db_settings = {
+ "default": {
+ "ENGINE": "django.db.backends.sqlite3",
+ "NAME": ":memory:",
+ "TEST": {"NAME": ":memory:"},
+ }
+ }
+
+ def test_sqlite_in_memory_used(self, django_testdir):
+ pytest.importorskip("xdist")
+
+ django_testdir.create_test_module(
+ """
+ import pytest
+ from django.db import connections
+
+ @pytest.mark.django_db
+ def test_a():
+ (conn, ) = connections.all()
+
+ assert conn.vendor == 'sqlite'
+ db_name = conn.creation._get_test_db_name()
+ assert 'file:memorydb' in db_name or db_name == ':memory:'
"""
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-django-3.5.1/tests/test_django_configurations.py
new/pytest-django-3.6.0/tests/test_django_configurations.py
--- old/pytest-django-3.5.1/tests/test_django_configurations.py 2019-06-29
18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/tests/test_django_configurations.py 2019-10-17
03:07:43.000000000 +0200
@@ -40,7 +40,7 @@
"""
)
result = testdir.runpytest_subprocess()
- result.stdout.fnmatch_lines(["*1 passed*"])
+ result.stdout.fnmatch_lines(["* 1 passed in*"])
assert result.ret == 0
@@ -68,7 +68,7 @@
"""
)
result = testdir.runpytest_subprocess()
- result.stdout.fnmatch_lines(["*1 passed*"])
+ result.stdout.fnmatch_lines(["* 1 passed in*"])
assert result.ret == 0
@@ -96,5 +96,5 @@
"""
)
result = testdir.runpytest_subprocess("--ds=tpkg.settings_opt",
"--dc=MySettings")
- result.stdout.fnmatch_lines(["*1 passed*"])
+ result.stdout.fnmatch_lines(["* 1 passed in*"])
assert result.ret == 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-django-3.5.1/tests/test_django_settings_module.py
new/pytest-django-3.6.0/tests/test_django_settings_module.py
--- old/pytest-django-3.5.1/tests/test_django_settings_module.py
2019-06-29 18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/tests/test_django_settings_module.py
2019-10-17 03:07:43.000000000 +0200
@@ -138,7 +138,7 @@
testdir.makepyfile(settings_after_conftest="SECRET_KEY='secret'")
# testdir.makeconftest("import sys; print(sys.path)")
result = testdir.runpytest_subprocess("-v")
- result.stdout.fnmatch_lines(["*1 passed*"])
+ result.stdout.fnmatch_lines(["* 1 passed in*"])
assert result.ret == 0
@@ -226,7 +226,7 @@
"""
)
result = testdir.runpython(p)
- result.stdout.fnmatch_lines(["*4 passed*"])
+ result.stdout.fnmatch_lines(["* 4 passed in*"])
def test_settings_in_hook(testdir, monkeypatch):
@@ -275,7 +275,7 @@
"""
)
result = testdir.runpytest_subprocess()
- result.stdout.fnmatch_lines(["*1 passed*"])
+ result.stdout.fnmatch_lines(["* 1 passed in*"])
assert result.ret == 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/tests/test_environment.py
new/pytest-django-3.6.0/tests/test_environment.py
--- old/pytest-django-3.5.1/tests/test_environment.py 2019-06-29
18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/tests/test_environment.py 2019-10-17
03:07:43.000000000 +0200
@@ -58,14 +58,10 @@
django_testdir.create_app_file(
"""
from django.conf.urls import url
- from pytest_django_test.compat import patterns
from tpkg.app import views
- urlpatterns = patterns(
- '',
- url(r'invalid_template/', views.invalid_template),
- )
+ urlpatterns = [url(r'invalid_template/', views.invalid_template)]
""",
"urls.py",
)
@@ -168,14 +164,10 @@
django_testdir.create_app_file(
"""
from django.conf.urls import url
- from pytest_django_test.compat import patterns
from tpkg.app import views
- urlpatterns = patterns(
- '',
- url(r'invalid_template/', views.invalid_template),
- )
+ urlpatterns = [url(r'invalid_template/', views.invalid_template)]
""",
"urls.py",
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/tests/test_fixtures.py
new/pytest-django-3.6.0/tests/test_fixtures.py
--- old/pytest-django-3.5.1/tests/test_fixtures.py 2019-06-29
18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/tests/test_fixtures.py 2019-10-17
03:07:43.000000000 +0200
@@ -7,12 +7,12 @@
from __future__ import with_statement
import socket
+from contextlib import contextmanager
import pytest
-
-from django.db import connection, transaction
from django.conf import settings as real_settings
from django.core import mail
+from django.db import connection, transaction
from django.test.client import Client, RequestFactory
from django.test.testcases import connections_support_transactions
from django.utils.encoding import force_text
@@ -22,6 +22,18 @@
from pytest_django_test.compat import HTTPError, urlopen
+@contextmanager
+def nonverbose_config(config):
+ """Ensure that pytest's config.option.verbose is <= 0."""
+ if config.option.verbose <= 0:
+ yield
+ else:
+ saved = config.option.verbose
+ config.option.verbose = 0
+ yield
+ config.option.verbose = saved
+
+
def test_client(client):
assert isinstance(client, Client)
@@ -53,56 +65,58 @@
@pytest.mark.django_db
-def test_django_assert_num_queries_db(django_assert_num_queries):
- with django_assert_num_queries(3):
- Item.objects.create(name="foo")
- Item.objects.create(name="bar")
- Item.objects.create(name="baz")
+def test_django_assert_num_queries_db(request, django_assert_num_queries):
+ with nonverbose_config(request.config):
+ with django_assert_num_queries(3):
+ Item.objects.create(name="foo")
+ Item.objects.create(name="bar")
+ Item.objects.create(name="baz")
- with pytest.raises(pytest.fail.Exception) as excinfo:
- with django_assert_num_queries(2) as captured:
- Item.objects.create(name="quux")
- assert excinfo.value.args == (
- "Expected to perform 2 queries but 1 was done "
- "(add -v option to show queries)",
- )
- assert len(captured.captured_queries) == 1
+ with pytest.raises(pytest.fail.Exception) as excinfo:
+ with django_assert_num_queries(2) as captured:
+ Item.objects.create(name="quux")
+ assert excinfo.value.args == (
+ "Expected to perform 2 queries but 1 was done "
+ "(add -v option to show queries)",
+ )
+ assert len(captured.captured_queries) == 1
@pytest.mark.django_db
-def test_django_assert_max_num_queries_db(django_assert_max_num_queries):
- with django_assert_max_num_queries(2):
- Item.objects.create(name="1-foo")
- Item.objects.create(name="2-bar")
-
- with pytest.raises(pytest.fail.Exception) as excinfo:
- with django_assert_max_num_queries(2) as captured:
+def test_django_assert_max_num_queries_db(request,
django_assert_max_num_queries):
+ with nonverbose_config(request.config):
+ with django_assert_max_num_queries(2):
Item.objects.create(name="1-foo")
Item.objects.create(name="2-bar")
- Item.objects.create(name="3-quux")
- assert excinfo.value.args == (
- "Expected to perform 2 queries or less but 3 were done "
- "(add -v option to show queries)",
- )
- assert len(captured.captured_queries) == 3
- assert "1-foo" in captured.captured_queries[0]["sql"]
+ with pytest.raises(pytest.fail.Exception) as excinfo:
+ with django_assert_max_num_queries(2) as captured:
+ Item.objects.create(name="1-foo")
+ Item.objects.create(name="2-bar")
+ Item.objects.create(name="3-quux")
+
+ assert excinfo.value.args == (
+ "Expected to perform 2 queries or less but 3 were done "
+ "(add -v option to show queries)",
+ )
+ assert len(captured.captured_queries) == 3
+ assert "1-foo" in captured.captured_queries[0]["sql"]
@pytest.mark.django_db(transaction=True)
def test_django_assert_num_queries_transactional_db(
- transactional_db, django_assert_num_queries
+ request, transactional_db, django_assert_num_queries
):
- with transaction.atomic():
-
- with django_assert_num_queries(3):
- Item.objects.create(name="foo")
- Item.objects.create(name="bar")
- Item.objects.create(name="baz")
-
- with pytest.raises(pytest.fail.Exception):
- with django_assert_num_queries(2):
- Item.objects.create(name="quux")
+ with nonverbose_config(request.config):
+ with transaction.atomic():
+ with django_assert_num_queries(3):
+ Item.objects.create(name="foo")
+ Item.objects.create(name="bar")
+ Item.objects.create(name="baz")
+
+ with pytest.raises(pytest.fail.Exception):
+ with django_assert_num_queries(2):
+ Item.objects.create(name="quux")
def test_django_assert_num_queries_output(django_testdir):
@@ -504,13 +518,9 @@
django_testdir.create_app_file(
"""
from django.conf.urls import url
- from pytest_django_test.compat import patterns
from tpkg.app import views
- urlpatterns = patterns(
- '',
- url(r'admin-required/', views.admin_required_view),
- )
+ urlpatterns = [url(r'admin-required/', views.admin_required_view)]
""",
"urls.py",
)
@@ -529,12 +539,12 @@
)
django_testdir.makepyfile(
"""
- from django.utils.encoding import force_text
+ from django.utils.encoding import force_str
from tpkg.app.models import MyCustomUser
def test_custom_user_model(admin_client):
resp = admin_client.get('/admin-required/')
- assert force_text(resp.content) == 'You are an admin'
+ assert force_str(resp.content) == 'You are an admin'
"""
)
@@ -564,7 +574,7 @@
('password', models.CharField(max_length=128,
verbose_name='password')),
('last_login', models.DateTimeField(null=True,
verbose_name='last login', blank=True)),
('is_superuser', models.BooleanField(default=False,
help_text='Designates that this user has all permissions without explicitly
assigning them.', verbose_name='superuser status')),
- ('username', models.CharField(error_messages={'unique': 'A
user with that username already exists.'}, max_length=30,
validators=[django.core.validators.RegexValidator('^[\\w.@+-]+$', 'Enter a
valid username. This value may contain only letters, numbers and @/./+/-/_
characters.', 'invalid')], help_text='Required. 30 characters or fewer.
Letters, digits and @/./+/-/_ only.', unique=True, verbose_name='username')),
+ ('username', models.CharField(error_messages={'unique': 'A
user with that username already exists.'}, max_length=30,
validators=[django.core.validators.RegexValidator(r'^[\\w.@+-]+$', 'Enter a
valid username. This value may contain only letters, numbers and @/./+/-/_
characters.', 'invalid')], help_text='Required. 30 characters or fewer.
Letters, digits and @/./+/-/_ only.', unique=True, verbose_name='username')),
('first_name', models.CharField(max_length=30,
verbose_name='first name', blank=True)),
('last_name', models.CharField(max_length=30,
verbose_name='last name', blank=True)),
('email', models.EmailField(max_length=254,
verbose_name='email address', blank=True)),
@@ -588,7 +598,7 @@
)
result = django_testdir.runpytest_subprocess("-s")
- result.stdout.fnmatch_lines(["*1 passed*"])
+ result.stdout.fnmatch_lines(["* 1 passed in*"])
assert result.ret == 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/tests/test_initialization.py
new/pytest-django-3.6.0/tests/test_initialization.py
--- old/pytest-django-3.5.1/tests/test_initialization.py 2019-06-29
18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/tests/test_initialization.py 2019-10-17
03:07:43.000000000 +0200
@@ -54,7 +54,7 @@
"conftest",
"pytest_configure: conftest",
"pytest_configure: plugin",
- "*1 passed*",
+ "* 1 passed in*",
]
)
assert result.ret == 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/tests/test_unittest.py
new/pytest-django-3.6.0/tests/test_unittest.py
--- old/pytest-django-3.5.1/tests/test_unittest.py 2019-06-29
18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/tests/test_unittest.py 2019-10-17
03:07:43.000000000 +0200
@@ -392,7 +392,7 @@
result = django_testdir.runpytest_subprocess("-q", "-s")
result.stdout.fnmatch_lines(
- ["*FooBarTestCase.setUpClass*", "*test_noop*", "1 passed*"]
+ ["*FooBarTestCase.setUpClass*", "*test_noop*", "1 passed in*"]
)
assert result.ret == 0
@@ -456,3 +456,34 @@
result = django_testdir.runpytest_subprocess("-v", "--pdb")
assert result.ret == 0
+
+
+def test_debug_restored(django_testdir):
+ django_testdir.create_test_module(
+ """
+ from django.test import TestCase
+
+ pre_setup_count = 0
+
+
+ class TestClass1(TestCase):
+
+ def test_method(self):
+ pass
+
+
+ class TestClass2(TestClass1):
+
+ def _pre_setup(self):
+ global pre_setup_count
+ pre_setup_count += 1
+ super(TestClass2, self)._pre_setup()
+
+ def test_method(self):
+ assert pre_setup_count == 1
+ """
+ )
+
+ result = django_testdir.runpytest_subprocess("--pdb")
+ result.stdout.fnmatch_lines(["*= 2 passed in *"])
+ assert result.ret == 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/tests/test_urls.py
new/pytest-django-3.6.0/tests/test_urls.py
--- old/pytest-django-3.5.1/tests/test_urls.py 2019-06-29 18:28:26.000000000
+0200
+++ new/pytest-django-3.6.0/tests/test_urls.py 2019-10-17 03:07:43.000000000
+0200
@@ -23,12 +23,11 @@
testdir.makepyfile(
myurls="""
from django.conf.urls import url
- from pytest_django_test.compat import patterns
def fake_view(request):
pass
- urlpatterns = patterns('', url(r'first/$', fake_view, name='first'))
+ urlpatterns = [url(r'first/$', fake_view, name='first')]
"""
)
@@ -60,24 +59,22 @@
testdir.makepyfile(
myurls="""
from django.conf.urls import url
- from pytest_django_test.compat import patterns
def fake_view(request):
pass
- urlpatterns = patterns('', url(r'first/$', fake_view, name='first'))
+ urlpatterns = [url(r'first/$', fake_view, name='first')]
"""
)
testdir.makepyfile(
myurls2="""
from django.conf.urls import url
- from pytest_django_test.compat import patterns
def fake_view(request):
pass
- urlpatterns = patterns('', url(r'second/$', fake_view, name='second'))
+ urlpatterns = [url(r'second/$', fake_view, name='second')]
"""
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.5.1/tox.ini
new/pytest-django-3.6.0/tox.ini
--- old/pytest-django-3.5.1/tox.ini 2019-06-29 18:28:26.000000000 +0200
+++ new/pytest-django-3.6.0/tox.ini 2019-10-17 03:07:43.000000000 +0200
@@ -1,7 +1,8 @@
[tox]
envlist =
- py{37}-dj{22,21,20,111}-postgres
- py{35,36}-dj{22,21,20,111,110,19,18}-postgres
+ py37-dj{30,22,21,20,111}-postgres
+ py36-dj{30,22,21,20,111,110,19,18}-postgres
+ py35-dj{22,21,20,111,110,19,18}-postgres
py34-dj{20,111,110}-postgres
py27-dj{111,110}-{mysql_innodb,mysql_myisam,postgres}
py27-dj{111,110,19,18}-postgres
@@ -11,6 +12,7 @@
extras = testing
deps =
djmaster: https://github.com/django/django/archive/master.tar.gz
+ dj30: Django>=3.0a1,<3.1
dj22: Django>=2.2a1,<2.3
dj21: Django>=2.1,<2.2
dj20: Django>=2.0,<2.1
@@ -26,6 +28,7 @@
coverage: coverage-enable-subprocess
pytest41: pytest>=4.1,<4.2
+ pytest41: attrs==17.4.0
xdist: pytest-xdist>=1.15
setenv =
@@ -42,7 +45,7 @@
coverage: COVERAGE_FILE={toxinidir}/.coverage
coverage: PYTESTDJANGO_COVERAGE_SRC={toxinidir}/
-passenv = PYTEST_ADDOPTS
+passenv = PYTEST_ADDOPTS TERM
usedevelop = True
commands =
coverage: coverage erase