Skip to content

Commit 0b42a93

Browse files
Added assertMessages() from django.contrib.messages. (#1109)
1 parent 5283aa4 commit 0b42a93

File tree

4 files changed

+47
-2
lines changed

4 files changed

+47
-2
lines changed

AUTHORS

+1
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@ Donald Stufft <[email protected]>
1919
Nicolas Delaby <[email protected]>
2020
Hasan Ramezani <[email protected]>
2121
Michael Howitz
22+
Mark Gensler

docs/changelog.rst

+9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
Changelog
22
=========
33

4+
Pending
5+
-------
6+
7+
Improvements
8+
^^^^^^^^^^^^
9+
10+
* Added `pytest.asserts.assertMessages()` to mimic the behaviour of the
11+
`django.contrib.messages.test.MessagesTestMixin` function for Django versions >= 5.0.
12+
413
v4.7.0 (2023-11-08)
514
-------------------
615

pytest_django/asserts.py

+27-1
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,22 @@
66
from functools import wraps
77
from typing import TYPE_CHECKING, Any, Callable, Sequence
88

9+
from django import VERSION
910
from django.test import LiveServerTestCase, SimpleTestCase, TestCase, TransactionTestCase
1011

1112

12-
test_case = TestCase("run")
13+
USE_CONTRIB_MESSAGES = VERSION >= (5, 0)
14+
15+
if USE_CONTRIB_MESSAGES:
16+
from django.contrib.messages import Message
17+
from django.contrib.messages.test import MessagesTestMixin
18+
19+
class MessagesTestCase(MessagesTestMixin, TestCase):
20+
pass
21+
22+
test_case = MessagesTestCase("run")
23+
else:
24+
test_case = TestCase("run")
1325

1426

1527
def _wrapper(name: str):
@@ -31,6 +43,11 @@ def assertion_func(*args, **kwargs):
3143
{attr for attr in vars(TransactionTestCase) if attr.startswith("assert")},
3244
)
3345

46+
if USE_CONTRIB_MESSAGES:
47+
assertions_names.update(
48+
{attr for attr in vars(MessagesTestMixin) if attr.startswith("assert")},
49+
)
50+
3451
for assert_func in assertions_names:
3552
globals()[assert_func] = _wrapper(assert_func)
3653
__all__.append(assert_func) # noqa: PYI056
@@ -213,6 +230,15 @@ def assertNumQueries(
213230
):
214231
...
215232

233+
# Added in Django 5.0.
234+
def assertMessages(
235+
response: HttpResponseBase,
236+
expected_messages: Sequence[Message],
237+
*args,
238+
ordered: bool = ...,
239+
) -> None:
240+
...
241+
216242
# Fallback in case Django adds new asserts.
217243
def __getattr__(name: str) -> Callable[..., Any]:
218244
...

tests/test_asserts.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,18 @@ def _get_actual_assertions_names() -> list[str]:
1717
"""
1818
from unittest import TestCase as DefaultTestCase
1919

20+
from django import VERSION
2021
from django.test import TestCase as DjangoTestCase
2122

22-
obj = DjangoTestCase("run")
23+
if VERSION >= (5, 0):
24+
from django.contrib.messages.test import MessagesTestMixin
25+
26+
class MessagesTestCase(MessagesTestMixin, DjangoTestCase):
27+
pass
28+
29+
obj = MessagesTestCase("run")
30+
else:
31+
obj = DjangoTestCase("run")
2332

2433
def is_assert(func) -> bool:
2534
return func.startswith("assert") and "_" not in func

0 commit comments

Comments
 (0)