forked from pool/python-pytest-django
Compare commits
4 Commits
| Author | SHA256 | Date | |
|---|---|---|---|
| 900b8dc6a5 | |||
| 5946cc860f | |||
| e4e3016752 | |||
| afda1936c8 |
@@ -1,16 +0,0 @@
|
||||
---
|
||||
pytest_django/plugin.py | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/pytest_django/plugin.py
|
||||
+++ b/pytest_django/plugin.py
|
||||
@@ -502,7 +502,8 @@ def _dj_autoclear_mailbox() -> None:
|
||||
|
||||
from django.core import mail
|
||||
|
||||
- del mail.outbox[:]
|
||||
+ if hasattr(mail, "outbox"):
|
||||
+ del mail.outbox[:]
|
||||
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
998
fix-use-of-mail-outbox.patch
Normal file
998
fix-use-of-mail-outbox.patch
Normal file
@@ -0,0 +1,998 @@
|
||||
From 1fe4ef768dbad77a833a4ecc70a07207d4bda641 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Mon, 31 Mar 2025 15:34:52 -0400
|
||||
Subject: [PATCH 01/23] Update plugin.py
|
||||
|
||||
---
|
||||
pytest_django/plugin.py | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pytest_django/plugin.py b/pytest_django/plugin.py
|
||||
index 08d961a6..fc439819 100644
|
||||
--- a/pytest_django/plugin.py
|
||||
+++ b/pytest_django/plugin.py
|
||||
@@ -599,7 +599,8 @@ def _dj_autoclear_mailbox() -> None:
|
||||
|
||||
from django.core import mail
|
||||
|
||||
- del mail.outbox[:]
|
||||
+ if hasattr(main, "outbox":
|
||||
+ mail.outbox.clear()
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
|
||||
From acd9d6182b5db49e0715e76c1abc1982aa981ad0 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Mon, 31 Mar 2025 15:37:33 -0400
|
||||
Subject: [PATCH 02/23] Update plugin.py
|
||||
|
||||
---
|
||||
pytest_django/plugin.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pytest_django/plugin.py b/pytest_django/plugin.py
|
||||
index fc439819..2309c9ed 100644
|
||||
--- a/pytest_django/plugin.py
|
||||
+++ b/pytest_django/plugin.py
|
||||
@@ -599,7 +599,7 @@ def _dj_autoclear_mailbox() -> None:
|
||||
|
||||
from django.core import mail
|
||||
|
||||
- if hasattr(main, "outbox":
|
||||
+ if hasattr(main, "outbox"):
|
||||
mail.outbox.clear()
|
||||
|
||||
|
||||
|
||||
From 502380faa59d98c6137f74b14abe05170423d832 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Mon, 31 Mar 2025 15:41:33 -0400
|
||||
Subject: [PATCH 03/23] Update test_environment.py
|
||||
|
||||
---
|
||||
tests/test_environment.py | 17 +++++++++++++++++
|
||||
1 file changed, 17 insertions(+)
|
||||
|
||||
diff --git a/tests/test_environment.py b/tests/test_environment.py
|
||||
index a3549732..2823d813 100644
|
||||
--- a/tests/test_environment.py
|
||||
+++ b/tests/test_environment.py
|
||||
@@ -18,6 +18,23 @@
|
||||
# to do it.
|
||||
|
||||
|
||||
+@pytest.mark.django_project(
|
||||
+ project_root="django_project_root",
|
||||
+ extra_settings="""
|
||||
+ EMAIL_BACKEND = "django.core.mail.backends.dummy.EmailBackend"
|
||||
+ """,
|
||||
+)
|
||||
+def test_manage_test_runner(django_pytester: DjangoPytester) -> None:
|
||||
+ django_pytester.create_test_module(
|
||||
+ """
|
||||
+ def test_bad_mail():
|
||||
+ pass
|
||||
+ """
|
||||
+ )
|
||||
+ result = django_pytester.runpytest_subprocess("-s")
|
||||
+ assert "1 passed" in "\n".join(result.outlines)
|
||||
+
|
||||
+
|
||||
@pytest.mark.parametrize("subject", ["subject1", "subject2"])
|
||||
def test_autoclear_mailbox(subject: str) -> None:
|
||||
assert len(mail.outbox) == 0
|
||||
|
||||
From c8427b437f48efdf9ff3c3090a10e52dd2f4cc46 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Mon, 31 Mar 2025 15:42:37 -0400
|
||||
Subject: [PATCH 04/23] i want to see it fail
|
||||
|
||||
---
|
||||
pytest_django/plugin.py | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pytest_django/plugin.py b/pytest_django/plugin.py
|
||||
index 2309c9ed..eece6a51 100644
|
||||
--- a/pytest_django/plugin.py
|
||||
+++ b/pytest_django/plugin.py
|
||||
@@ -599,8 +599,9 @@ def _dj_autoclear_mailbox() -> None:
|
||||
|
||||
from django.core import mail
|
||||
|
||||
- if hasattr(main, "outbox"):
|
||||
- mail.outbox.clear()
|
||||
+ del mail.outbox[:]
|
||||
+ # if hasattr(main, "outbox"):
|
||||
+ # mail.outbox.clear()
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
|
||||
From 9e786dba0541d97cc8a285e90d453f9e496d95af Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Mon, 31 Mar 2025 15:48:41 -0400
|
||||
Subject: [PATCH 05/23] Update test_environment.py
|
||||
|
||||
---
|
||||
tests/test_environment.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/test_environment.py b/tests/test_environment.py
|
||||
index 2823d813..26876ab5 100644
|
||||
--- a/tests/test_environment.py
|
||||
+++ b/tests/test_environment.py
|
||||
@@ -32,7 +32,7 @@ def test_bad_mail():
|
||||
"""
|
||||
)
|
||||
result = django_pytester.runpytest_subprocess("-s")
|
||||
- assert "1 passed" in "\n".join(result.outlines)
|
||||
+ assert "1 passed" in "\n".join([*result.outlines, *result.errlines])
|
||||
|
||||
|
||||
@pytest.mark.parametrize("subject", ["subject1", "subject2"])
|
||||
|
||||
From b9dee6aec323ffe6d78b5da9ace65a0e1608690e Mon Sep 17 00:00:00 2001
|
||||
From: kingbuzzman <buzzi.javier@gmail.com>
|
||||
Date: Mon, 31 Mar 2025 17:47:51 -0400
|
||||
Subject: [PATCH 06/23] This is a much bigger issue.
|
||||
|
||||
---
|
||||
pytest_django/plugin.py | 7 ++++---
|
||||
tests/test_environment.py | 26 +++++++++++++++++++++++---
|
||||
2 files changed, 27 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/pytest_django/plugin.py b/pytest_django/plugin.py
|
||||
index eece6a51..fe315fe5 100644
|
||||
--- a/pytest_django/plugin.py
|
||||
+++ b/pytest_django/plugin.py
|
||||
@@ -599,9 +599,10 @@ def _dj_autoclear_mailbox() -> None:
|
||||
|
||||
from django.core import mail
|
||||
|
||||
- del mail.outbox[:]
|
||||
- # if hasattr(main, "outbox"):
|
||||
- # mail.outbox.clear()
|
||||
+ # import ipdb; print('\a'); ipdb.sset_trace()
|
||||
+ # del mail.outbox[:]
|
||||
+ if hasattr(mail, "outbox"):
|
||||
+ mail.outbox.clear()
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
diff --git a/tests/test_environment.py b/tests/test_environment.py
|
||||
index 26876ab5..8e375c65 100644
|
||||
--- a/tests/test_environment.py
|
||||
+++ b/tests/test_environment.py
|
||||
@@ -19,19 +19,39 @@
|
||||
|
||||
|
||||
@pytest.mark.django_project(
|
||||
- project_root="django_project_root",
|
||||
extra_settings="""
|
||||
EMAIL_BACKEND = "django.core.mail.backends.dummy.EmailBackend"
|
||||
+ import unittest.mock
|
||||
+ from types import SimpleNamespace
|
||||
+
|
||||
+ def setup_test_environment(*a, **k):
|
||||
+ if hasattr(_TestState, "saved_data"):
|
||||
+ # Executing this function twice would overwrite the saved values.
|
||||
+ raise RuntimeError(
|
||||
+ "setup_test_environment() was already called and can't be called "
|
||||
+ "again without first calling teardown_test_environment()."
|
||||
+ )
|
||||
+
|
||||
+ saved_data = SimpleNamespace()
|
||||
+ _TestState.saved_data = saved_data
|
||||
+ saved_data.allowed_hosts = []
|
||||
+ saved_data.debug = False
|
||||
+ saved_data.email_backend = None
|
||||
+ saved_data.template_render = None
|
||||
+
|
||||
+ unittest.mock.patch("django.test.utils.setup_test_environment", setup_test_environment).start()
|
||||
+ from django.test.utils import _TestState
|
||||
""",
|
||||
)
|
||||
-def test_manage_test_runner(django_pytester: DjangoPytester) -> None:
|
||||
+def test_mail_auto_fixture(django_pytester: DjangoPytester) -> None:
|
||||
django_pytester.create_test_module(
|
||||
"""
|
||||
def test_bad_mail():
|
||||
pass
|
||||
"""
|
||||
)
|
||||
- result = django_pytester.runpytest_subprocess("-s")
|
||||
+ result = django_pytester.runpytest_subprocess("-s", "-vv")
|
||||
+ print("\n".join([*result.outlines, *result.errlines]))
|
||||
assert "1 passed" in "\n".join([*result.outlines, *result.errlines])
|
||||
|
||||
|
||||
|
||||
From 2b5b1977927177ec8de7744d4e380c5ed76b4ea3 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Tue, 1 Apr 2025 10:59:21 +0200
|
||||
Subject: [PATCH 07/23] Update test_environment.py
|
||||
|
||||
---
|
||||
tests/test_environment.py | 22 ++--------------------
|
||||
1 file changed, 2 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/tests/test_environment.py b/tests/test_environment.py
|
||||
index 8e375c65..687bbe69 100644
|
||||
--- a/tests/test_environment.py
|
||||
+++ b/tests/test_environment.py
|
||||
@@ -21,26 +21,8 @@
|
||||
@pytest.mark.django_project(
|
||||
extra_settings="""
|
||||
EMAIL_BACKEND = "django.core.mail.backends.dummy.EmailBackend"
|
||||
- import unittest.mock
|
||||
- from types import SimpleNamespace
|
||||
-
|
||||
- def setup_test_environment(*a, **k):
|
||||
- if hasattr(_TestState, "saved_data"):
|
||||
- # Executing this function twice would overwrite the saved values.
|
||||
- raise RuntimeError(
|
||||
- "setup_test_environment() was already called and can't be called "
|
||||
- "again without first calling teardown_test_environment()."
|
||||
- )
|
||||
-
|
||||
- saved_data = SimpleNamespace()
|
||||
- _TestState.saved_data = saved_data
|
||||
- saved_data.allowed_hosts = []
|
||||
- saved_data.debug = False
|
||||
- saved_data.email_backend = None
|
||||
- saved_data.template_render = None
|
||||
|
||||
- unittest.mock.patch("django.test.utils.setup_test_environment", setup_test_environment).start()
|
||||
- from django.test.utils import _TestState
|
||||
+ unittest.mock.patch("pytest_django.lazy_django.django_settings_is_configured", lambda: False).start()
|
||||
""",
|
||||
)
|
||||
def test_mail_auto_fixture(django_pytester: DjangoPytester) -> None:
|
||||
@@ -50,7 +32,7 @@ def test_bad_mail():
|
||||
pass
|
||||
"""
|
||||
)
|
||||
- result = django_pytester.runpytest_subprocess("-s", "-vv")
|
||||
+ result = django_pytester.runpytest_subprocess("-s")
|
||||
print("\n".join([*result.outlines, *result.errlines]))
|
||||
assert "1 passed" in "\n".join([*result.outlines, *result.errlines])
|
||||
|
||||
|
||||
From 60a07b2a12596bd8777cb915ed2bfc64abe8b48a Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Tue, 1 Apr 2025 11:00:07 +0200
|
||||
Subject: [PATCH 08/23] Update test_environment.py
|
||||
|
||||
---
|
||||
tests/test_environment.py | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/tests/test_environment.py b/tests/test_environment.py
|
||||
index 687bbe69..98cb79d6 100644
|
||||
--- a/tests/test_environment.py
|
||||
+++ b/tests/test_environment.py
|
||||
@@ -22,6 +22,7 @@
|
||||
extra_settings="""
|
||||
EMAIL_BACKEND = "django.core.mail.backends.dummy.EmailBackend"
|
||||
|
||||
+ import unittest.mock
|
||||
unittest.mock.patch("pytest_django.lazy_django.django_settings_is_configured", lambda: False).start()
|
||||
""",
|
||||
)
|
||||
|
||||
From e831c77373cbda0b28e8e548180dbcfc83d0de5c Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Tue, 1 Apr 2025 11:49:43 +0200
|
||||
Subject: [PATCH 09/23] getting closer..
|
||||
|
||||
---
|
||||
pytest_django/plugin.py | 5 ++---
|
||||
tests/test_environment.py | 11 +++++++----
|
||||
2 files changed, 9 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/pytest_django/plugin.py b/pytest_django/plugin.py
|
||||
index fe315fe5..b479fefb 100644
|
||||
--- a/pytest_django/plugin.py
|
||||
+++ b/pytest_django/plugin.py
|
||||
@@ -599,8 +599,6 @@ def _dj_autoclear_mailbox() -> None:
|
||||
|
||||
from django.core import mail
|
||||
|
||||
- # import ipdb; print('\a'); ipdb.sset_trace()
|
||||
- # del mail.outbox[:]
|
||||
if hasattr(mail, "outbox"):
|
||||
mail.outbox.clear()
|
||||
|
||||
@@ -616,7 +614,8 @@ def mailoutbox(
|
||||
|
||||
from django.core import mail
|
||||
|
||||
- return mail.outbox # type: ignore[no-any-return]
|
||||
+ if hasattr(mail, "outbox"):
|
||||
+ return mail.outbox # type: ignore[no-any-return]
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
diff --git a/tests/test_environment.py b/tests/test_environment.py
|
||||
index 98cb79d6..a568c60f 100644
|
||||
--- a/tests/test_environment.py
|
||||
+++ b/tests/test_environment.py
|
||||
@@ -19,21 +19,24 @@
|
||||
|
||||
|
||||
@pytest.mark.django_project(
|
||||
+ create_manage_py=True,
|
||||
extra_settings="""
|
||||
EMAIL_BACKEND = "django.core.mail.backends.dummy.EmailBackend"
|
||||
|
||||
import unittest.mock
|
||||
- unittest.mock.patch("pytest_django.lazy_django.django_settings_is_configured", lambda: False).start()
|
||||
+ unittest.mock.patch("django.test.utils.setup_test_environment", lambda *a, **k: None).start()
|
||||
+ unittest.mock.patch("django.test.utils.teardown_test_environment", lambda *a, **k: None).start()
|
||||
""",
|
||||
)
|
||||
def test_mail_auto_fixture(django_pytester: DjangoPytester) -> None:
|
||||
django_pytester.create_test_module(
|
||||
"""
|
||||
- def test_bad_mail():
|
||||
- pass
|
||||
+ def test_bad_mail(settings, mailoutbox):
|
||||
+ assert mailoutbox is None
|
||||
+ assert settings.EMAIL_BACKEND == "django.core.mail.backends.dummy.EmailBackend"
|
||||
"""
|
||||
)
|
||||
- result = django_pytester.runpytest_subprocess("-s")
|
||||
+ result = django_pytester.runpytest_subprocess("-s", '-vv')
|
||||
print("\n".join([*result.outlines, *result.errlines]))
|
||||
assert "1 passed" in "\n".join([*result.outlines, *result.errlines])
|
||||
|
||||
|
||||
From e5631311edb1a0b62643df954296de56c30261ca Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Tue, 1 Apr 2025 12:01:50 +0200
|
||||
Subject: [PATCH 10/23] got to the root issue, its a custom
|
||||
django_test_environment
|
||||
|
||||
---
|
||||
tests/test_environment.py | 14 ++++++++++----
|
||||
1 file changed, 10 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/tests/test_environment.py b/tests/test_environment.py
|
||||
index a568c60f..9188acbe 100644
|
||||
--- a/tests/test_environment.py
|
||||
+++ b/tests/test_environment.py
|
||||
@@ -22,13 +22,19 @@
|
||||
create_manage_py=True,
|
||||
extra_settings="""
|
||||
EMAIL_BACKEND = "django.core.mail.backends.dummy.EmailBackend"
|
||||
-
|
||||
- import unittest.mock
|
||||
- unittest.mock.patch("django.test.utils.setup_test_environment", lambda *a, **k: None).start()
|
||||
- unittest.mock.patch("django.test.utils.teardown_test_environment", lambda *a, **k: None).start()
|
||||
""",
|
||||
)
|
||||
def test_mail_auto_fixture(django_pytester: DjangoPytester) -> None:
|
||||
+ django_pytester.create_test_module(
|
||||
+ """
|
||||
+ import pytest
|
||||
+
|
||||
+ @pytest.fixture(autouse=True, scope="session")
|
||||
+ def django_test_environment(request):
|
||||
+ yield
|
||||
+ """, filename="conftest.py"
|
||||
+ )
|
||||
+
|
||||
django_pytester.create_test_module(
|
||||
"""
|
||||
def test_bad_mail(settings, mailoutbox):
|
||||
|
||||
From 43da9ac17508208a28620c0b1b6758c029ce2b20 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Tue, 1 Apr 2025 12:17:45 +0200
|
||||
Subject: [PATCH 11/23] Moved test
|
||||
|
||||
---
|
||||
tests/test_environment.py | 29 -----------------------------
|
||||
tests/test_fixtures.py | 34 ++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 34 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/tests/test_environment.py b/tests/test_environment.py
|
||||
index 9188acbe..a3549732 100644
|
||||
--- a/tests/test_environment.py
|
||||
+++ b/tests/test_environment.py
|
||||
@@ -18,35 +18,6 @@
|
||||
# to do it.
|
||||
|
||||
|
||||
-@pytest.mark.django_project(
|
||||
- create_manage_py=True,
|
||||
- extra_settings="""
|
||||
- EMAIL_BACKEND = "django.core.mail.backends.dummy.EmailBackend"
|
||||
- """,
|
||||
-)
|
||||
-def test_mail_auto_fixture(django_pytester: DjangoPytester) -> None:
|
||||
- django_pytester.create_test_module(
|
||||
- """
|
||||
- import pytest
|
||||
-
|
||||
- @pytest.fixture(autouse=True, scope="session")
|
||||
- def django_test_environment(request):
|
||||
- yield
|
||||
- """, filename="conftest.py"
|
||||
- )
|
||||
-
|
||||
- django_pytester.create_test_module(
|
||||
- """
|
||||
- def test_bad_mail(settings, mailoutbox):
|
||||
- assert mailoutbox is None
|
||||
- assert settings.EMAIL_BACKEND == "django.core.mail.backends.dummy.EmailBackend"
|
||||
- """
|
||||
- )
|
||||
- result = django_pytester.runpytest_subprocess("-s", '-vv')
|
||||
- print("\n".join([*result.outlines, *result.errlines]))
|
||||
- assert "1 passed" in "\n".join([*result.outlines, *result.errlines])
|
||||
-
|
||||
-
|
||||
@pytest.mark.parametrize("subject", ["subject1", "subject2"])
|
||||
def test_autoclear_mailbox(subject: str) -> None:
|
||||
assert len(mail.outbox) == 0
|
||||
diff --git a/tests/test_fixtures.py b/tests/test_fixtures.py
|
||||
index 39c6666f..4c98b899 100644
|
||||
--- a/tests/test_fixtures.py
|
||||
+++ b/tests/test_fixtures.py
|
||||
@@ -825,3 +825,37 @@ def mocked_make_msgid(*args, **kwargs):
|
||||
result = django_pytester.runpytest_subprocess("--tb=short", "-vv", "-s")
|
||||
result.stdout.fnmatch_lines(["*test_mailbox_inner*", "django_mail_dnsname_mark", "PASSED*"])
|
||||
assert result.ret == 0
|
||||
+
|
||||
+
|
||||
+@pytest.mark.django_project(
|
||||
+ create_manage_py=True,
|
||||
+ extra_settings="""
|
||||
+ EMAIL_BACKEND = "django.core.mail.backends.dummy.EmailBackend"
|
||||
+ """,
|
||||
+)
|
||||
+def test_mail_auto_fixture_misconfigured(django_pytester: DjangoPytester) -> None:
|
||||
+ """
|
||||
+ django_test_environment fixture can be overridden by user, and that would break mailoutbox fixture.
|
||||
+
|
||||
+ Normally settings.EMAIL_BACKEND is set to "django.core.mail.backends.locmem.EmailBackend" by django,
|
||||
+ along with mail.outbox = []. If this function doesn't run for whatever reason, the mailoutbox fixture will not work properly.
|
||||
+ """
|
||||
+ django_pytester.create_test_module(
|
||||
+ """
|
||||
+ import pytest
|
||||
+
|
||||
+ @pytest.fixture(autouse=True, scope="session")
|
||||
+ def django_test_environment(request):
|
||||
+ yield
|
||||
+ """, filename="conftest.py"
|
||||
+ )
|
||||
+
|
||||
+ django_pytester.create_test_module(
|
||||
+ """
|
||||
+ def test_bad_mail(settings, mailoutbox):
|
||||
+ assert mailoutbox is None
|
||||
+ assert settings.EMAIL_BACKEND == "django.core.mail.backends.dummy.EmailBackend"
|
||||
+ """
|
||||
+ )
|
||||
+ result = django_pytester.runpytest_subprocess()
|
||||
+ assert result.ret == 0
|
||||
|
||||
From c8c73550cf8d0786ecb38fa0e2f9914ade00eff4 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Tue, 1 Apr 2025 12:19:29 +0200
|
||||
Subject: [PATCH 12/23] Fixes linter
|
||||
|
||||
---
|
||||
pytest_django/plugin.py | 1 +
|
||||
tests/test_fixtures.py | 5 +++--
|
||||
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pytest_django/plugin.py b/pytest_django/plugin.py
|
||||
index b479fefb..f99ea246 100644
|
||||
--- a/pytest_django/plugin.py
|
||||
+++ b/pytest_django/plugin.py
|
||||
@@ -616,6 +616,7 @@ def mailoutbox(
|
||||
|
||||
if hasattr(mail, "outbox"):
|
||||
return mail.outbox # type: ignore[no-any-return]
|
||||
+ return None
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
diff --git a/tests/test_fixtures.py b/tests/test_fixtures.py
|
||||
index 4c98b899..f8ca69c7 100644
|
||||
--- a/tests/test_fixtures.py
|
||||
+++ b/tests/test_fixtures.py
|
||||
@@ -837,7 +837,7 @@ def test_mail_auto_fixture_misconfigured(django_pytester: DjangoPytester) -> Non
|
||||
"""
|
||||
django_test_environment fixture can be overridden by user, and that would break mailoutbox fixture.
|
||||
|
||||
- Normally settings.EMAIL_BACKEND is set to "django.core.mail.backends.locmem.EmailBackend" by django,
|
||||
+ Normally settings.EMAIL_BACKEND is set to "django.core.mail.backends.locmem.EmailBackend" by django,
|
||||
along with mail.outbox = []. If this function doesn't run for whatever reason, the mailoutbox fixture will not work properly.
|
||||
"""
|
||||
django_pytester.create_test_module(
|
||||
@@ -847,7 +847,8 @@ def test_mail_auto_fixture_misconfigured(django_pytester: DjangoPytester) -> Non
|
||||
@pytest.fixture(autouse=True, scope="session")
|
||||
def django_test_environment(request):
|
||||
yield
|
||||
- """, filename="conftest.py"
|
||||
+ """,
|
||||
+ filename="conftest.py",
|
||||
)
|
||||
|
||||
django_pytester.create_test_module(
|
||||
|
||||
From 4e26a87597231a9b4945017bb05e7f739fd01f68 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Tue, 1 Apr 2025 12:29:43 +0200
|
||||
Subject: [PATCH 13/23] Adds warning
|
||||
|
||||
---
|
||||
pytest_django/plugin.py | 6 +++++-
|
||||
tests/test_fixtures.py | 7 ++++++-
|
||||
2 files changed, 11 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pytest_django/plugin.py b/pytest_django/plugin.py
|
||||
index f99ea246..faaa3535 100644
|
||||
--- a/pytest_django/plugin.py
|
||||
+++ b/pytest_django/plugin.py
|
||||
@@ -593,7 +593,7 @@ def non_debugging_runtest(self) -> None:
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
-def _dj_autoclear_mailbox() -> None:
|
||||
+def _dj_autoclear_mailbox(request: pytest.FixtureRequest) -> None:
|
||||
if not django_settings_is_configured():
|
||||
return
|
||||
|
||||
@@ -601,6 +601,10 @@ def _dj_autoclear_mailbox() -> None:
|
||||
|
||||
if hasattr(mail, "outbox"):
|
||||
mail.outbox.clear()
|
||||
+ else:
|
||||
+ request.node.warn(
|
||||
+ pytest.PytestWarning("Error when trying to clear mailbox, possible misconfiguration")
|
||||
+ )
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
diff --git a/tests/test_fixtures.py b/tests/test_fixtures.py
|
||||
index f8ca69c7..bf4fccf9 100644
|
||||
--- a/tests/test_fixtures.py
|
||||
+++ b/tests/test_fixtures.py
|
||||
@@ -838,8 +838,12 @@ def test_mail_auto_fixture_misconfigured(django_pytester: DjangoPytester) -> Non
|
||||
django_test_environment fixture can be overridden by user, and that would break mailoutbox fixture.
|
||||
|
||||
Normally settings.EMAIL_BACKEND is set to "django.core.mail.backends.locmem.EmailBackend" by django,
|
||||
- along with mail.outbox = []. If this function doesn't run for whatever reason, the mailoutbox fixture will not work properly.
|
||||
+ along with mail.outbox = []. If this function doesn't run for whatever reason, the
|
||||
+ mailoutbox fixture will not work properly.
|
||||
"""
|
||||
+ expected_warning_message = (
|
||||
+ "PytestWarning: Error when trying to clear mailbox, possible misconfiguration"
|
||||
+ )
|
||||
django_pytester.create_test_module(
|
||||
"""
|
||||
import pytest
|
||||
@@ -860,3 +864,4 @@ def test_bad_mail(settings, mailoutbox):
|
||||
)
|
||||
result = django_pytester.runpytest_subprocess()
|
||||
assert result.ret == 0
|
||||
+ assert expected_warning_message in "\n".join(result.outlines)
|
||||
|
||||
From 5effbf7f348fcd62e4ca5b1fde8cb4e080d5941f Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Tue, 1 Apr 2025 12:39:01 +0200
|
||||
Subject: [PATCH 14/23] Test the warning
|
||||
|
||||
---
|
||||
tests/test_fixtures.py | 13 +++++++++----
|
||||
1 file changed, 9 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/tests/test_fixtures.py b/tests/test_fixtures.py
|
||||
index bf4fccf9..8227ec84 100644
|
||||
--- a/tests/test_fixtures.py
|
||||
+++ b/tests/test_fixtures.py
|
||||
@@ -857,11 +857,16 @@ def django_test_environment(request):
|
||||
|
||||
django_pytester.create_test_module(
|
||||
"""
|
||||
- def test_bad_mail(settings, mailoutbox):
|
||||
+ def test_with_fixture(settings, mailoutbox):
|
||||
assert mailoutbox is None
|
||||
assert settings.EMAIL_BACKEND == "django.core.mail.backends.dummy.EmailBackend"
|
||||
+
|
||||
+ def test_without_fixture():
|
||||
+ from django.core import mail
|
||||
+ assert not hasattr(mail, "outbox")
|
||||
"""
|
||||
)
|
||||
- result = django_pytester.runpytest_subprocess()
|
||||
- assert result.ret == 0
|
||||
- assert expected_warning_message in "\n".join(result.outlines)
|
||||
+ result = django_pytester.runpytest_subprocess("-q")
|
||||
+ output = "\n".join(result.outlines)
|
||||
+ assert "2 passed, 2 warnings" in output
|
||||
+ assert expected_warning_message in output
|
||||
|
||||
From c4a9a7b252ec5badcc6b888c36619f77290c0794 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Tue, 1 Apr 2025 13:00:21 +0200
|
||||
Subject: [PATCH 15/23] ehh f-it. this is good enough
|
||||
|
||||
---
|
||||
tests/test_fixtures.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/test_fixtures.py b/tests/test_fixtures.py
|
||||
index 8227ec84..db524cc6 100644
|
||||
--- a/tests/test_fixtures.py
|
||||
+++ b/tests/test_fixtures.py
|
||||
@@ -868,5 +868,5 @@ def test_without_fixture():
|
||||
)
|
||||
result = django_pytester.runpytest_subprocess("-q")
|
||||
output = "\n".join(result.outlines)
|
||||
- assert "2 passed, 2 warnings" in output
|
||||
+ assert "2 passed" in output
|
||||
assert expected_warning_message in output
|
||||
|
||||
From 1d7a61570769783c498e2f9bb7e760bd3896abdd Mon Sep 17 00:00:00 2001
|
||||
From: kingbuzzman <buzzi.javier@gmail.com>
|
||||
Date: Wed, 2 Apr 2025 15:43:19 -0400
|
||||
Subject: [PATCH 16/23] Adds test for when there is no 'settings' at all
|
||||
|
||||
---
|
||||
tests/conftest.py | 7 ++++++-
|
||||
tests/test_fixtures.py | 22 ++++++++++++++++++++++
|
||||
2 files changed, 28 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/conftest.py b/tests/conftest.py
|
||||
index 16e209f1..1ef17498 100644
|
||||
--- a/tests/conftest.py
|
||||
+++ b/tests/conftest.py
|
||||
@@ -30,11 +30,13 @@ def _marker_apifun(
|
||||
extra_settings: str = "",
|
||||
create_manage_py: bool = False,
|
||||
project_root: str | None = None,
|
||||
+ has_settings: bool = True,
|
||||
):
|
||||
return {
|
||||
"extra_settings": extra_settings,
|
||||
"create_manage_py": create_manage_py,
|
||||
"project_root": project_root,
|
||||
+ "has_settings": has_settings,
|
||||
}
|
||||
|
||||
|
||||
@@ -142,7 +144,10 @@ def django_pytester(
|
||||
pythonpath = os.pathsep.join(filter(None, [str(REPOSITORY_ROOT), os.getenv("PYTHONPATH", "")]))
|
||||
monkeypatch.setenv("PYTHONPATH", pythonpath)
|
||||
|
||||
- monkeypatch.setenv("DJANGO_SETTINGS_MODULE", "tpkg.the_settings")
|
||||
+ if options["has_settings"]:
|
||||
+ monkeypatch.setenv("DJANGO_SETTINGS_MODULE", "tpkg.the_settings")
|
||||
+ else:
|
||||
+ monkeypatch.delenv("DJANGO_SETTINGS_MODULE", raising=False)
|
||||
|
||||
def create_test_module(test_code: str, filename: str = "test_the_test.py") -> Path:
|
||||
r = tpkg_path.joinpath(filename)
|
||||
diff --git a/tests/test_fixtures.py b/tests/test_fixtures.py
|
||||
index db524cc6..500c34b0 100644
|
||||
--- a/tests/test_fixtures.py
|
||||
+++ b/tests/test_fixtures.py
|
||||
@@ -870,3 +870,25 @@ def test_without_fixture():
|
||||
output = "\n".join(result.outlines)
|
||||
assert "2 passed" in output
|
||||
assert expected_warning_message in output
|
||||
+
|
||||
+
|
||||
+@pytest.mark.django_project(has_settings=False)
|
||||
+def test_no_settings(django_pytester: DjangoPytester) -> None:
|
||||
+ django_pytester.create_test_module(
|
||||
+ """
|
||||
+ def test_skipped_settings(settings):
|
||||
+ pass
|
||||
+
|
||||
+ def test_mailoutbox(mailoutbox):
|
||||
+ assert mailoutbox is None
|
||||
+
|
||||
+ def test_mail():
|
||||
+ from django.core import mail
|
||||
+ assert not hasattr(mail, "outbox")
|
||||
+ """
|
||||
+ )
|
||||
+ result = django_pytester.runpytest_subprocess("-v")
|
||||
+ output = "\n".join(result.outlines)
|
||||
+ assert "::test_skipped_settings SKIPPED" in output
|
||||
+ assert "::test_mailoutbox PASSED" in output
|
||||
+ assert "::test_mail PASSED" in output
|
||||
|
||||
From cf170faeff64ef9d0d966c622a42379b30064508 Mon Sep 17 00:00:00 2001
|
||||
From: kingbuzzman <buzzi.javier@gmail.com>
|
||||
Date: Wed, 2 Apr 2025 15:46:14 -0400
|
||||
Subject: [PATCH 17/23] Slight change to ensure that there really isnt any
|
||||
settings
|
||||
|
||||
---
|
||||
tests/conftest.py | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/conftest.py b/tests/conftest.py
|
||||
index 1ef17498..ea59945d 100644
|
||||
--- a/tests/conftest.py
|
||||
+++ b/tests/conftest.py
|
||||
@@ -137,7 +137,8 @@ def django_pytester(
|
||||
|
||||
# Copy the test app to make it available in the new test run
|
||||
shutil.copytree(str(app_source), str(test_app_path))
|
||||
- tpkg_path.joinpath("the_settings.py").write_text(test_settings)
|
||||
+ if options["has_settings"]:
|
||||
+ tpkg_path.joinpath("the_settings.py").write_text(test_settings)
|
||||
|
||||
# For suprocess tests, pytest's `pythonpath` setting doesn't currently
|
||||
# work, only the envvar does.
|
||||
|
||||
From 534a7f2b7ed952d7b6c90fc8f7f9829619742c73 Mon Sep 17 00:00:00 2001
|
||||
From: kingbuzzman <buzzi.javier@gmail.com>
|
||||
Date: Wed, 2 Apr 2025 16:06:22 -0400
|
||||
Subject: [PATCH 18/23] Gigantic simplification
|
||||
|
||||
---
|
||||
pytest_django/plugin.py | 7 +------
|
||||
tests/test_fixtures.py | 14 +++++---------
|
||||
2 files changed, 6 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/pytest_django/plugin.py b/pytest_django/plugin.py
|
||||
index faaa3535..e1d56156 100644
|
||||
--- a/pytest_django/plugin.py
|
||||
+++ b/pytest_django/plugin.py
|
||||
@@ -601,10 +601,6 @@ def _dj_autoclear_mailbox(request: pytest.FixtureRequest) -> None:
|
||||
|
||||
if hasattr(mail, "outbox"):
|
||||
mail.outbox.clear()
|
||||
- else:
|
||||
- request.node.warn(
|
||||
- pytest.PytestWarning("Error when trying to clear mailbox, possible misconfiguration")
|
||||
- )
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
@@ -613,8 +609,7 @@ def mailoutbox(
|
||||
_dj_autoclear_mailbox: None,
|
||||
) -> list[django.core.mail.EmailMessage] | None:
|
||||
"""A clean email outbox to which Django-generated emails are sent."""
|
||||
- if not django_settings_is_configured():
|
||||
- return None
|
||||
+ skip_if_no_django()
|
||||
|
||||
from django.core import mail
|
||||
|
||||
diff --git a/tests/test_fixtures.py b/tests/test_fixtures.py
|
||||
index 500c34b0..0d6327ea 100644
|
||||
--- a/tests/test_fixtures.py
|
||||
+++ b/tests/test_fixtures.py
|
||||
@@ -841,9 +841,6 @@ def test_mail_auto_fixture_misconfigured(django_pytester: DjangoPytester) -> Non
|
||||
along with mail.outbox = []. If this function doesn't run for whatever reason, the
|
||||
mailoutbox fixture will not work properly.
|
||||
"""
|
||||
- expected_warning_message = (
|
||||
- "PytestWarning: Error when trying to clear mailbox, possible misconfiguration"
|
||||
- )
|
||||
django_pytester.create_test_module(
|
||||
"""
|
||||
import pytest
|
||||
@@ -869,7 +866,6 @@ def test_without_fixture():
|
||||
result = django_pytester.runpytest_subprocess("-q")
|
||||
output = "\n".join(result.outlines)
|
||||
assert "2 passed" in output
|
||||
- assert expected_warning_message in output
|
||||
|
||||
|
||||
@pytest.mark.django_project(has_settings=False)
|
||||
@@ -877,10 +873,10 @@ def test_no_settings(django_pytester: DjangoPytester) -> None:
|
||||
django_pytester.create_test_module(
|
||||
"""
|
||||
def test_skipped_settings(settings):
|
||||
- pass
|
||||
+ assert False
|
||||
|
||||
- def test_mailoutbox(mailoutbox):
|
||||
- assert mailoutbox is None
|
||||
+ def test_skipped_mailoutbox(mailoutbox):
|
||||
+ assert False
|
||||
|
||||
def test_mail():
|
||||
from django.core import mail
|
||||
@@ -890,5 +886,5 @@ def test_mail():
|
||||
result = django_pytester.runpytest_subprocess("-v")
|
||||
output = "\n".join(result.outlines)
|
||||
assert "::test_skipped_settings SKIPPED" in output
|
||||
- assert "::test_mailoutbox PASSED" in output
|
||||
- assert "::test_mail PASSED" in output
|
||||
+ assert "::test_skipped_mailoutbox SKIPPED" in output
|
||||
+ assert "::test_mail PASSED" in output
|
||||
\ No newline at end of file
|
||||
|
||||
From b330a26929cf06d1cbdbdf6b86a94cf998c8db96 Mon Sep 17 00:00:00 2001
|
||||
From: kingbuzzman <buzzi.javier@gmail.com>
|
||||
Date: Wed, 2 Apr 2025 16:08:10 -0400
|
||||
Subject: [PATCH 19/23] Removes unused import
|
||||
|
||||
---
|
||||
pytest_django/plugin.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pytest_django/plugin.py b/pytest_django/plugin.py
|
||||
index e1d56156..f8e1d071 100644
|
||||
--- a/pytest_django/plugin.py
|
||||
+++ b/pytest_django/plugin.py
|
||||
@@ -593,7 +593,7 @@ def non_debugging_runtest(self) -> None:
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
-def _dj_autoclear_mailbox(request: pytest.FixtureRequest) -> None:
|
||||
+def _dj_autoclear_mailbox() -> None:
|
||||
if not django_settings_is_configured():
|
||||
return
|
||||
|
||||
|
||||
From 80303a447062ba1bba42d15893a30d876bd2df52 Mon Sep 17 00:00:00 2001
|
||||
From: kingbuzzman <buzzi.javier@gmail.com>
|
||||
Date: Wed, 2 Apr 2025 16:15:38 -0400
|
||||
Subject: [PATCH 20/23] Updates linter
|
||||
|
||||
---
|
||||
tests/test_fixtures.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/test_fixtures.py b/tests/test_fixtures.py
|
||||
index 0d6327ea..62cb7f20 100644
|
||||
--- a/tests/test_fixtures.py
|
||||
+++ b/tests/test_fixtures.py
|
||||
@@ -887,4 +887,4 @@ def test_mail():
|
||||
output = "\n".join(result.outlines)
|
||||
assert "::test_skipped_settings SKIPPED" in output
|
||||
assert "::test_skipped_mailoutbox SKIPPED" in output
|
||||
- assert "::test_mail PASSED" in output
|
||||
\ No newline at end of file
|
||||
+ assert "::test_mail PASSED" in output
|
||||
|
||||
From 3223687b2bd08b1f3cb016a6481df9f2c1d1152b Mon Sep 17 00:00:00 2001
|
||||
From: kingbuzzman <buzzi.javier@gmail.com>
|
||||
Date: Wed, 2 Apr 2025 17:10:38 -0400
|
||||
Subject: [PATCH 21/23] Slight simplification when asserting tests
|
||||
|
||||
---
|
||||
tests/test_fixtures.py | 12 ++++--------
|
||||
1 file changed, 4 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/tests/test_fixtures.py b/tests/test_fixtures.py
|
||||
index 62cb7f20..490dd8ef 100644
|
||||
--- a/tests/test_fixtures.py
|
||||
+++ b/tests/test_fixtures.py
|
||||
@@ -863,9 +863,8 @@ def test_without_fixture():
|
||||
assert not hasattr(mail, "outbox")
|
||||
"""
|
||||
)
|
||||
- result = django_pytester.runpytest_subprocess("-q")
|
||||
- output = "\n".join(result.outlines)
|
||||
- assert "2 passed" in output
|
||||
+ result = django_pytester.runpytest_subprocess()
|
||||
+ result.assert_outcomes(passed=2)
|
||||
|
||||
|
||||
@pytest.mark.django_project(has_settings=False)
|
||||
@@ -883,8 +882,5 @@ def test_mail():
|
||||
assert not hasattr(mail, "outbox")
|
||||
"""
|
||||
)
|
||||
- result = django_pytester.runpytest_subprocess("-v")
|
||||
- output = "\n".join(result.outlines)
|
||||
- assert "::test_skipped_settings SKIPPED" in output
|
||||
- assert "::test_skipped_mailoutbox SKIPPED" in output
|
||||
- assert "::test_mail PASSED" in output
|
||||
+ result = django_pytester.runpytest_subprocess()
|
||||
+ result.assert_outcomes(passed=1, skipped=2)
|
||||
|
||||
From 7acaee2530a4eb45acf4f6505e774d4f88273c8a Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Thu, 3 Apr 2025 16:11:12 -0400
|
||||
Subject: [PATCH 22/23] Changes bluetech wanted
|
||||
|
||||
---
|
||||
pytest_django/plugin.py | 2 +-
|
||||
tests/conftest.py | 8 ++++----
|
||||
tests/test_fixtures.py | 2 +-
|
||||
3 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/pytest_django/plugin.py b/pytest_django/plugin.py
|
||||
index f8e1d071..e8e629f4 100644
|
||||
--- a/pytest_django/plugin.py
|
||||
+++ b/pytest_django/plugin.py
|
||||
@@ -615,7 +615,7 @@ def mailoutbox(
|
||||
|
||||
if hasattr(mail, "outbox"):
|
||||
return mail.outbox # type: ignore[no-any-return]
|
||||
- return None
|
||||
+ return []
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
diff --git a/tests/conftest.py b/tests/conftest.py
|
||||
index ea59945d..e3bfa1f4 100644
|
||||
--- a/tests/conftest.py
|
||||
+++ b/tests/conftest.py
|
||||
@@ -30,13 +30,13 @@ def _marker_apifun(
|
||||
extra_settings: str = "",
|
||||
create_manage_py: bool = False,
|
||||
project_root: str | None = None,
|
||||
- has_settings: bool = True,
|
||||
+ create_settings: bool = True,
|
||||
):
|
||||
return {
|
||||
"extra_settings": extra_settings,
|
||||
"create_manage_py": create_manage_py,
|
||||
"project_root": project_root,
|
||||
- "has_settings": has_settings,
|
||||
+ "create_settings": create_settings,
|
||||
}
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@ def django_pytester(
|
||||
|
||||
# Copy the test app to make it available in the new test run
|
||||
shutil.copytree(str(app_source), str(test_app_path))
|
||||
- if options["has_settings"]:
|
||||
+ if options["create_settings"]:
|
||||
tpkg_path.joinpath("the_settings.py").write_text(test_settings)
|
||||
|
||||
# For suprocess tests, pytest's `pythonpath` setting doesn't currently
|
||||
@@ -145,7 +145,7 @@ def django_pytester(
|
||||
pythonpath = os.pathsep.join(filter(None, [str(REPOSITORY_ROOT), os.getenv("PYTHONPATH", "")]))
|
||||
monkeypatch.setenv("PYTHONPATH", pythonpath)
|
||||
|
||||
- if options["has_settings"]:
|
||||
+ if options["create_settings"]:
|
||||
monkeypatch.setenv("DJANGO_SETTINGS_MODULE", "tpkg.the_settings")
|
||||
else:
|
||||
monkeypatch.delenv("DJANGO_SETTINGS_MODULE", raising=False)
|
||||
diff --git a/tests/test_fixtures.py b/tests/test_fixtures.py
|
||||
index 490dd8ef..9d55ad6d 100644
|
||||
--- a/tests/test_fixtures.py
|
||||
+++ b/tests/test_fixtures.py
|
||||
@@ -867,7 +867,7 @@ def test_without_fixture():
|
||||
result.assert_outcomes(passed=2)
|
||||
|
||||
|
||||
-@pytest.mark.django_project(has_settings=False)
|
||||
+@pytest.mark.django_project(create_settings=False)
|
||||
def test_no_settings(django_pytester: DjangoPytester) -> None:
|
||||
django_pytester.create_test_module(
|
||||
"""
|
||||
|
||||
From 4975bc168b41c3a4951e108548a85ed815d31f28 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Buzzi <buzzi.javier@gmail.com>
|
||||
Date: Thu, 3 Apr 2025 16:14:40 -0400
|
||||
Subject: [PATCH 23/23] Update test_fixtures.py
|
||||
|
||||
---
|
||||
tests/test_fixtures.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/test_fixtures.py b/tests/test_fixtures.py
|
||||
index 9d55ad6d..f88ed802 100644
|
||||
--- a/tests/test_fixtures.py
|
||||
+++ b/tests/test_fixtures.py
|
||||
@@ -855,7 +855,7 @@ def django_test_environment(request):
|
||||
django_pytester.create_test_module(
|
||||
"""
|
||||
def test_with_fixture(settings, mailoutbox):
|
||||
- assert mailoutbox is None
|
||||
+ assert mailoutbox == []
|
||||
assert settings.EMAIL_BACKEND == "django.core.mail.backends.dummy.EmailBackend"
|
||||
|
||||
def test_without_fixture():
|
||||
BIN
pytest-django-4.5.2.tar.gz
LFS
BIN
pytest-django-4.5.2.tar.gz
LFS
Binary file not shown.
@@ -1,32 +0,0 @@
|
||||
From 458d48aee50171d3dec0ad6c9502bf7d795f9da1 Mon Sep 17 00:00:00 2001
|
||||
From: Stanislav Levin <slev@altlinux.org>
|
||||
Date: Mon, 28 Feb 2022 13:12:37 +0300
|
||||
Subject: [PATCH] tests: Sync expected stream for Pytest's version
|
||||
|
||||
https://docs.pytest.org/en/7.0.x/changelog.html#breaking-changes:
|
||||
> [pytest#8246](https://github.com/pytest-dev/pytest/issues/8246): --version now writes version information to stdout rather than stderr.
|
||||
|
||||
Fixes: https://github.com/pytest-dev/pytest-django/issues/995
|
||||
Signed-off-by: Stanislav Levin <slev@altlinux.org>
|
||||
---
|
||||
tests/test_manage_py_scan.py | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/test_manage_py_scan.py b/tests/test_manage_py_scan.py
|
||||
index 39544589..490882b0 100644
|
||||
--- a/tests/test_manage_py_scan.py
|
||||
+++ b/tests/test_manage_py_scan.py
|
||||
@@ -118,7 +118,12 @@ def test_django_project_found_invalid_settings_version(django_testdir, monkeypat
|
||||
|
||||
result = django_testdir.runpytest_subprocess("django_project_root", "--version", "--version")
|
||||
assert result.ret == 0
|
||||
- result.stderr.fnmatch_lines(["*This is pytest version*"])
|
||||
+ if hasattr(pytest, "version_tuple") and pytest.version_tuple >= (7, 0):
|
||||
+ version_out = result.stdout
|
||||
+ else:
|
||||
+ version_out = result.stderr
|
||||
+
|
||||
+ version_out.fnmatch_lines(["*This is pytest version*"])
|
||||
|
||||
result = django_testdir.runpytest_subprocess("django_project_root", "--help")
|
||||
assert result.ret == 0
|
||||
3
pytest_django-4.11.1.tar.gz
Normal file
3
pytest_django-4.11.1.tar.gz
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a949141a1ee103cb0e7a20f1451d355f83f5e4a5d07bdd4dcfdd1fd0ff227991
|
||||
size 86202
|
||||
@@ -1,3 +1,59 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Jul 28 06:05:48 UTC 2025 - Steve Kowalik <steven.kowalik@suse.com>
|
||||
|
||||
- Add patch fix-use-of-mail-outbox.patch:
|
||||
* Fix use of django.mail.outbox with Django 5.2.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon May 12 06:48:41 UTC 2025 - Steve Kowalik <steven.kowalik@suse.com>
|
||||
|
||||
- Update to 4.11.1:
|
||||
* Compatibility
|
||||
+ Added official support for Django 5.2.
|
||||
+ Added official support for Python 3.13.
|
||||
+ Added official support for Django 5.1.
|
||||
+ Dropped support for Django 3.2 and 4.1.
|
||||
+ Official Django 5.0 support.
|
||||
+ Official Python 3.12 support.
|
||||
+ Drop support for Python version 3.5, 3.6 & 3.7.
|
||||
+ Drop official support for Django 4.0 and 2.2
|
||||
+ Drop support for pytest < 7.
|
||||
* Improvements
|
||||
+ Added using argument to django_assert_num_queries and
|
||||
django_assert_max_num_queries to easily specify the database alias to
|
||||
use.
|
||||
+ Respect the string_if_invalid template setting when
|
||||
--fail-on-template-vars is active and
|
||||
pytest.mark.ignore_template_errors is used.
|
||||
+ Avoid running database migrations for django.test.SimpleTestCase
|
||||
unittest tests.
|
||||
+ Added pytest_django.asserts.assertMessages() to mimic the behaviour of
|
||||
the django.contrib.messages.test.MessagesTestMixin.assertMessages method
|
||||
for Django versions >= 5.0.
|
||||
+ The Django test tags from the previous release now works on any
|
||||
django.test.SimpleTestCase.
|
||||
+ Add support for setting available_apps in the pytest.mark.django_db
|
||||
marker.
|
||||
+ Show Django's version in the pytest django report header.
|
||||
+ Add precise pytest_django.asserts.assertQuerySetEqual typing.
|
||||
* Bugfixes
|
||||
+ Fixed a regression in v4.11.0 for Django TestCase tests using the
|
||||
databases class variable.
|
||||
+ Stopped setting up and serializing databases on test session setup when
|
||||
not needed (the database is not requested / serialized_rollback is not
|
||||
used).
|
||||
+ The determination of which databases to setup is done by static
|
||||
inspection of the test suite.
|
||||
+ Fixed lock/unlock of db breaks if pytest is executed twice in the same
|
||||
process.
|
||||
+ Fix --help/--version crash in a partially configured app.
|
||||
+ Fix bug where the effect of @pytest.mark.ignore_template_errors was not
|
||||
reset when using --fail-on-template-vars.
|
||||
- Switch to pyproject macros.
|
||||
- Drop patches, included upstream:
|
||||
* autoclear_mailbox.patch
|
||||
* pytest-django-pr996-pytest7.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Jun 25 07:53:46 UTC 2023 - Andreas Schneider <asn@cryptomilk.org>
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package python-pytest-django
|
||||
#
|
||||
# Copyright (c) 2023 SUSE LLC
|
||||
# Copyright (c) 2025 SUSE LLC
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
@@ -18,28 +18,27 @@
|
||||
|
||||
%{?sle15_python_module_pythons}
|
||||
Name: python-pytest-django
|
||||
Version: 4.5.2
|
||||
Version: 4.11.1
|
||||
Release: 0
|
||||
Summary: A Django plugin for Pytest
|
||||
License: BSD-3-Clause
|
||||
URL: https://github.com/pytest-dev/pytest-django
|
||||
Source: https://files.pythonhosted.org/packages/source/p/pytest-django/pytest-django-%{version}.tar.gz
|
||||
# PATCH-FIX-UPSTREAM autoclear_mailbox.patch gh#pytest-dev/pytest-django#993 mcepl@suse.com
|
||||
# Protect against non-existant mail.outbox folder
|
||||
# https://stackoverflow.com/q/5424498/164233
|
||||
Patch0: autoclear_mailbox.patch
|
||||
# PATCH-FIX-UPSTREAM pytest-django-pr996-pytest7.patch -- gh#pytest-dev/pytest-django#996
|
||||
Patch1: https://github.com/pytest-dev/pytest-django/pull/996.patch#/pytest-django-pr996-pytest7.patch
|
||||
Source: https://files.pythonhosted.org/packages/source/p/pytest-django/pytest_django-%{version}.tar.gz
|
||||
# PATCH-FIX-UPSTREAM gh#pytest-dev/pytest-django#1187
|
||||
Patch0: fix-use-of-mail-outbox.patch
|
||||
BuildRequires: %{python_module Django}
|
||||
BuildRequires: %{python_module pytest > 5.4.0}
|
||||
BuildRequires: %{python_module base >= 3.8}
|
||||
BuildRequires: %{python_module pip}
|
||||
BuildRequires: %{python_module pytest >= 7.0}
|
||||
BuildRequires: %{python_module pytest-xdist}
|
||||
BuildRequires: %{python_module setuptools_scm >= 5.0.0}
|
||||
BuildRequires: %{python_module setuptools}
|
||||
BuildRequires: %{python_module wheel}
|
||||
BuildRequires: fdupes
|
||||
BuildRequires: python-rpm-macros
|
||||
BuildRequires: sqlite3
|
||||
Requires: python-Django
|
||||
Requires: python-pytest > 5.4.0
|
||||
Requires: python-pytest > 7.0
|
||||
BuildArch: noarch
|
||||
%python_subpackages
|
||||
|
||||
@@ -59,13 +58,13 @@ that are already present in pytest:
|
||||
* Works with both worlds: Existing unittest-style TestCase's still work without any modifications.
|
||||
|
||||
%prep
|
||||
%autosetup -p1 -n pytest-django-%{version}
|
||||
%autosetup -p1 -n pytest_django-%{version}
|
||||
|
||||
%build
|
||||
%python_build
|
||||
%pyproject_wheel
|
||||
|
||||
%install
|
||||
%python_install
|
||||
%pyproject_install
|
||||
%python_expand %fdupes %{buildroot}%{$python_sitelib}
|
||||
|
||||
%check
|
||||
@@ -78,6 +77,6 @@ export PYTHONPATH=$(pwd)
|
||||
%license LICENSE
|
||||
%doc AUTHORS README.rst docs/*.rst
|
||||
%{python_sitelib}/pytest_django
|
||||
%{python_sitelib}/pytest_django-%{version}*-info
|
||||
%{python_sitelib}/pytest_django-%{version}.dist-info
|
||||
|
||||
%changelog
|
||||
|
||||
Reference in New Issue
Block a user