summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2022-04-05 08:37:28 +0200
committerGitHub <noreply@github.com>2022-04-05 08:37:28 +0200
commit1a7d75cf77639e450854d9bcf9518664f755eb04 (patch)
tree2e3947e7320daf8b80ad02532dc2daa880dbfe38
parent78277faafd38d8360efc1fd0c9c52d7bb5eec002 (diff)
Moved remaining SimpleTestCase.assertFormError()/assertFormsetErrors() tests to test_utils.
This also removes redundant tests in test_client_regress. Follow up to 68144f40490b2572c8da4341742b9e387e3f6bdd.
-rw-r--r--tests/test_client/urls.py1
-rw-r--r--tests/test_client/views.py43
-rw-r--r--tests/test_client_regress/tests.py354
-rw-r--r--tests/test_utils/tests.py135
4 files changed, 135 insertions, 398 deletions
diff --git a/tests/test_client/urls.py b/tests/test_client/urls.py
index 9ccd219fb5..2508346cf8 100644
--- a/tests/test_client/urls.py
+++ b/tests/test_client/urls.py
@@ -42,7 +42,6 @@ urlpatterns = [
path("bad_view/", views.bad_view),
path("form_view/", views.form_view),
path("form_view_with_template/", views.form_view_with_template),
- path("formset_view/", views.formset_view),
path("json_view/", views.json_view),
path("login_protected_view/", views.login_protected_view),
path("login_protected_method_view/", views.login_protected_method_view),
diff --git a/tests/test_client/views.py b/tests/test_client/views.py
index 4dc58fab8d..cff0463788 100644
--- a/tests/test_client/views.py
+++ b/tests/test_client/views.py
@@ -7,7 +7,6 @@ from django.core import mail
from django.core.exceptions import ValidationError
from django.forms import fields
from django.forms.forms import Form
-from django.forms.formsets import BaseFormSet, formset_factory
from django.http import (
HttpResponse,
HttpResponseBadRequest,
@@ -259,48 +258,6 @@ def form_view_with_template(request):
)
-class BaseTestFormSet(BaseFormSet):
- def clean(self):
- """No two email addresses are the same."""
- if any(self.errors):
- # Don't bother validating the formset unless each form is valid
- return
-
- emails = []
- for form in self.forms:
- email = form.cleaned_data["email"]
- if email in emails:
- raise ValidationError(
- "Forms in a set must have distinct email addresses."
- )
- emails.append(email)
-
-
-TestFormSet = formset_factory(TestForm, BaseTestFormSet)
-
-
-def formset_view(request):
- "A view that tests a simple formset"
- if request.method == "POST":
- formset = TestFormSet(request.POST)
- if formset.is_valid():
- t = Template("Valid POST data.", name="Valid POST Template")
- c = Context()
- else:
- t = Template(
- "Invalid POST data. {{ my_formset.errors }}",
- name="Invalid POST Template",
- )
- c = Context({"my_formset": formset})
- else:
- formset = TestForm(request.GET)
- t = Template(
- "Viewing base formset. {{ my_formset }}.", name="Formset GET Template"
- )
- c = Context({"my_formset": formset})
- return HttpResponse(t.render(c))
-
-
@login_required
def login_protected_view(request):
"A simple view that is login protected."
diff --git a/tests/test_client_regress/tests.py b/tests/test_client_regress/tests.py
index 43cc9580cc..aaf25e2ec4 100644
--- a/tests/test_client_regress/tests.py
+++ b/tests/test_client_regress/tests.py
@@ -616,360 +616,6 @@ class AssertRedirectsTests(SimpleTestCase):
@override_settings(ROOT_URLCONF="test_client_regress.urls")
-class AssertFormErrorTests(SimpleTestCase):
- def test_unknown_form(self):
- "An assertion is raised if the form name is unknown"
- post_data = {
- "text": "Hello World",
- "email": "not an email address",
- "value": 37,
- "single": "b",
- "multi": ("b", "c", "e"),
- }
- response = self.client.post("/form_view/", post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
-
- msg = "The form 'wrong_form' was not used to render the response"
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormError(response, "wrong_form", "some_field", "Some error.")
- with self.assertRaisesMessage(AssertionError, "abc: " + msg):
- self.assertFormError(
- response, "wrong_form", "some_field", "Some error.", msg_prefix="abc"
- )
-
- def test_unknown_field(self):
- "An assertion is raised if the field name is unknown"
- post_data = {
- "text": "Hello World",
- "email": "not an email address",
- "value": 37,
- "single": "b",
- "multi": ("b", "c", "e"),
- }
- response = self.client.post("/form_view/", post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
-
- msg = (
- "The form <TestForm bound=True, valid=False, "
- "fields=(text;email;value;single;multi)> does not contain the field "
- "'some_field'."
- )
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormError(response, "form", "some_field", "Some error.")
- with self.assertRaisesMessage(AssertionError, "abc: " + msg):
- self.assertFormError(
- response, "form", "some_field", "Some error.", msg_prefix="abc"
- )
-
- def test_noerror_field(self):
- "An assertion is raised if the field doesn't have any errors"
- post_data = {
- "text": "Hello World",
- "email": "not an email address",
- "value": 37,
- "single": "b",
- "multi": ("b", "c", "e"),
- }
- response = self.client.post("/form_view/", post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
-
- msg = (
- "The errors of field 'value' on form <TestForm bound=True, valid=False, "
- "fields=(text;email;value;single;multi)> don't match."
- )
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormError(response, "form", "value", "Some error.")
- with self.assertRaisesMessage(AssertionError, "abc: " + msg):
- self.assertFormError(
- response, "form", "value", "Some error.", msg_prefix="abc"
- )
-
- def test_unknown_error(self):
- "An assertion is raised if the field doesn't contain the provided error"
- post_data = {
- "text": "Hello World",
- "email": "not an email address",
- "value": 37,
- "single": "b",
- "multi": ("b", "c", "e"),
- }
- response = self.client.post("/form_view/", post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
-
- msg = (
- "The errors of field 'email' on form <TestForm bound=True, valid=False, "
- "fields=(text;email;value;single;multi)> don't match."
- )
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormError(response, "form", "email", "Some error.")
- with self.assertRaisesMessage(AssertionError, "abc: " + msg):
- self.assertFormError(
- response, "form", "email", "Some error.", msg_prefix="abc"
- )
-
- def test_unknown_nonfield_error(self):
- """
- An assertion is raised if the form's non field errors doesn't contain
- the provided error.
- """
- post_data = {
- "text": "Hello World",
- "email": "not an email address",
- "value": 37,
- "single": "b",
- "multi": ("b", "c", "e"),
- }
- response = self.client.post("/form_view/", post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
-
- msg = (
- "The non-field errors of form <TestForm bound=True, valid=False, "
- "fields=(text;email;value;single;multi)> don't match."
- )
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormError(response, "form", None, "Some error.")
- with self.assertRaisesMessage(AssertionError, "abc: " + msg):
- self.assertFormError(
- response, "form", None, "Some error.", msg_prefix="abc"
- )
-
-
-@override_settings(ROOT_URLCONF="test_client_regress.urls")
-class AssertFormsetErrorTests(SimpleTestCase):
- msg_prefixes = [("", {}), ("abc: ", {"msg_prefix": "abc"})]
-
- def setUp(self):
- """Makes response object for testing field and non-field errors"""
- # For testing field and non-field errors
- self.response_form_errors = self.getResponse(
- {
- "form-TOTAL_FORMS": "2",
- "form-INITIAL_FORMS": "2",
- "form-0-text": "Raise non-field error",
- "form-0-email": "not an email address",
- "form-0-value": 37,
- "form-0-single": "b",
- "form-0-multi": ("b", "c", "e"),
- "form-1-text": "Hello World",
- "form-1-email": "email@domain.com",
- "form-1-value": 37,
- "form-1-single": "b",
- "form-1-multi": ("b", "c", "e"),
- }
- )
- # For testing non-form errors
- self.response_nonform_errors = self.getResponse(
- {
- "form-TOTAL_FORMS": "2",
- "form-INITIAL_FORMS": "2",
- "form-0-text": "Hello World",
- "form-0-email": "email@domain.com",
- "form-0-value": 37,
- "form-0-single": "b",
- "form-0-multi": ("b", "c", "e"),
- "form-1-text": "Hello World",
- "form-1-email": "email@domain.com",
- "form-1-value": 37,
- "form-1-single": "b",
- "form-1-multi": ("b", "c", "e"),
- }
- )
-
- def getResponse(self, post_data):
- response = self.client.post("/formset_view/", post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
- return response
-
- def test_unknown_formset(self):
- "An assertion is raised if the formset name is unknown"
- for prefix, kwargs in self.msg_prefixes:
- msg = (
- prefix
- + "The formset 'wrong_formset' was not used to render the response"
- )
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormsetError(
- self.response_form_errors,
- "wrong_formset",
- 0,
- "Some_field",
- "Some error.",
- **kwargs,
- )
-
- def test_unknown_field(self):
- "An assertion is raised if the field name is unknown"
- for prefix, kwargs in self.msg_prefixes:
- msg = (
- f"{prefix}The form 0 of formset <TestFormFormSet: bound=True "
- f"valid=False total_forms=2> does not contain the field 'Some_field'."
- )
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormsetError(
- self.response_form_errors,
- "my_formset",
- 0,
- "Some_field",
- "Some error.",
- **kwargs,
- )
-
- def test_no_error_field(self):
- "An assertion is raised if the field doesn't have any errors"
- for prefix, kwargs in self.msg_prefixes:
- msg = (
- f"{prefix}The errors of field 'value' on form 1 of formset "
- f"<TestFormFormSet: bound=True valid=False total_forms=2> don't match."
- )
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormsetError(
- self.response_form_errors,
- "my_formset",
- 1,
- "value",
- "Some error.",
- **kwargs,
- )
-
- def test_unknown_error(self):
- "An assertion is raised if the field doesn't contain the specified error"
- for prefix, kwargs in self.msg_prefixes:
- msg = (
- f"{prefix}The errors of field 'email' on form 0 of formset "
- f"<TestFormFormSet: bound=True valid=False total_forms=2> don't match."
- )
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormsetError(
- self.response_form_errors,
- "my_formset",
- 0,
- "email",
- "Some error.",
- **kwargs,
- )
-
- def test_field_error(self):
- "No assertion is raised if the field contains the provided error"
- error_msg = ["Enter a valid email address."]
- for prefix, kwargs in self.msg_prefixes:
- self.assertFormsetError(
- self.response_form_errors, "my_formset", 0, "email", error_msg, **kwargs
- )
-
- def test_no_nonfield_error(self):
- """
- An assertion is raised if the formsets non-field errors doesn't contain
- any errors.
- """
- for prefix, kwargs in self.msg_prefixes:
- msg = (
- f"{prefix}The non-field errors of form 1 of formset <TestFormFormSet: "
- f"bound=True valid=False total_forms=2> don't match."
- )
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormsetError(
- self.response_form_errors,
- "my_formset",
- 1,
- None,
- "Some error.",
- **kwargs,
- )
-
- def test_unknown_nonfield_error(self):
- """
- An assertion is raised if the formsets non-field errors doesn't contain
- the provided error.
- """
- for prefix, kwargs in self.msg_prefixes:
- msg = (
- f"{prefix}The non-field errors of form 0 of formset <TestFormFormSet: "
- f"bound=True valid=False total_forms=2> don't match."
- )
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormsetError(
- self.response_form_errors,
- "my_formset",
- 0,
- None,
- "Some error.",
- **kwargs,
- )
-
- def test_nonfield_error(self):
- """
- No assertion is raised if the formsets non-field errors contains the
- provided error.
- """
- for prefix, kwargs in self.msg_prefixes:
- self.assertFormsetError(
- self.response_form_errors,
- "my_formset",
- 0,
- None,
- "Non-field error.",
- **kwargs,
- )
-
- def test_no_nonform_error(self):
- """
- An assertion is raised if the formsets non-form errors doesn't contain
- any errors.
- """
- for prefix, kwargs in self.msg_prefixes:
- msg = (
- f"{prefix}The non-form errors of formset <TestFormFormSet: bound=True "
- f"valid=False total_forms=2> don't match"
- )
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormsetError(
- self.response_form_errors,
- "my_formset",
- None,
- None,
- "Some error.",
- **kwargs,
- )
-
- def test_unknown_nonform_error(self):
- """
- An assertion is raised if the formsets non-form errors doesn't contain
- the provided error.
- """
- for prefix, kwargs in self.msg_prefixes:
- msg = (
- f"{prefix}The non-form errors of formset <TestFormFormSet: bound=True "
- f"valid=False total_forms=2> don't match"
- )
- with self.assertRaisesMessage(AssertionError, msg):
- self.assertFormsetError(
- self.response_nonform_errors,
- "my_formset",
- None,
- None,
- "Some error.",
- **kwargs,
- )
-
- def test_nonform_error(self):
- """
- No assertion is raised if the formsets non-form errors contains the
- provided error.
- """
- msg = "Forms in a set must have distinct email addresses."
- for prefix, kwargs in self.msg_prefixes:
- self.assertFormsetError(
- self.response_nonform_errors, "my_formset", None, None, msg, **kwargs
- )
-
-
-@override_settings(ROOT_URLCONF="test_client_regress.urls")
class LoginTests(TestDataMixin, TestCase):
def test_login_different_client(self):
"Using a different test client doesn't violate authentication"
diff --git a/tests/test_utils/tests.py b/tests/test_utils/tests.py
index 2dfcdd6804..e0204e7083 100644
--- a/tests/test_utils/tests.py
+++ b/tests/test_utils/tests.py
@@ -1402,6 +1402,11 @@ class AssertFormErrorTests(SimpleTestCase):
response = mock.Mock(context=[{}])
with self.assertRaisesMessage(AssertionError, msg):
self.assertFormError(response, "form", "field", "invalid value")
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormError(
+ response, "form", "field", "invalid value", msg_prefix=msg_prefix
+ )
def test_field_not_in_form(self):
msg = (
@@ -1411,6 +1416,11 @@ class AssertFormErrorTests(SimpleTestCase):
response = mock.Mock(context=[{"form": TestForm.invalid()}])
with self.assertRaisesMessage(AssertionError, msg):
self.assertFormError(response, "form", "other_field", "invalid value")
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormError(
+ response, "form", "other_field", "invalid value", msg_prefix=msg_prefix
+ )
def test_field_with_no_errors(self):
msg = (
@@ -1421,6 +1431,11 @@ class AssertFormErrorTests(SimpleTestCase):
with self.assertRaisesMessage(AssertionError, msg) as ctx:
self.assertFormError(response, "form", "field", "invalid value")
self.assertIn("[] != ['invalid value']", str(ctx.exception))
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormError(
+ response, "form", "field", "invalid value", msg_prefix=msg_prefix
+ )
def test_field_with_different_error(self):
msg = (
@@ -1431,6 +1446,11 @@ class AssertFormErrorTests(SimpleTestCase):
with self.assertRaisesMessage(AssertionError, msg) as ctx:
self.assertFormError(response, "form", "field", "other error")
self.assertIn("['invalid value'] != ['other error']", str(ctx.exception))
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormError(
+ response, "form", "field", "other error", msg_prefix=msg_prefix
+ )
def test_basic_positive_assertion(self):
response = mock.Mock(context=[{"form": TestForm.invalid()}])
@@ -1470,6 +1490,23 @@ class AssertFormErrorTests(SimpleTestCase):
response = mock.Mock(context=[{"form": TestForm.invalid(nonfield=True)}])
self.assertFormError(response, "form", None, "non-field error")
+ def test_different_non_field_errors(self):
+ response = mock.Mock(context=[{"form": TestForm.invalid(nonfield=True)}])
+ msg = (
+ "The non-field errors of form <TestForm bound=True, valid=False, "
+ "fields=(field)> don't match."
+ )
+ with self.assertRaisesMessage(AssertionError, msg) as ctx:
+ self.assertFormError(response, "form", None, "other non-field error")
+ self.assertIn(
+ "['non-field error'] != ['other non-field error']", str(ctx.exception)
+ )
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormError(
+ response, "form", None, "other non-field error", msg_prefix=msg_prefix
+ )
+
@ignore_warnings(category=RemovedInDjango50Warning)
def test_errors_none(self):
msg = (
@@ -1518,6 +1555,11 @@ class AssertFormsetErrorTests(SimpleTestCase):
response = mock.Mock(context=[{}])
with self.assertRaisesMessage(AssertionError, msg):
self.assertFormsetError(response, "formset", 0, "field", "invalid value")
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormsetError(
+ response, "formset", 0, "field", "invalid value", msg_prefix=msg_prefix
+ )
def test_field_not_in_form(self):
msg = (
@@ -1533,6 +1575,16 @@ class AssertFormsetErrorTests(SimpleTestCase):
"other_field",
"invalid value",
)
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormsetError(
+ response,
+ "formset",
+ 0,
+ "other_field",
+ "invalid value",
+ msg_prefix=msg_prefix,
+ )
def test_field_with_no_errors(self):
msg = (
@@ -1543,6 +1595,11 @@ class AssertFormsetErrorTests(SimpleTestCase):
with self.assertRaisesMessage(AssertionError, msg) as ctx:
self.assertFormsetError(response, "formset", 0, "field", "invalid value")
self.assertIn("[] != ['invalid value']", str(ctx.exception))
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormsetError(
+ response, "formset", 0, "field", "invalid value", msg_prefix=msg_prefix
+ )
def test_field_with_different_error(self):
msg = (
@@ -1553,6 +1610,11 @@ class AssertFormsetErrorTests(SimpleTestCase):
with self.assertRaisesMessage(AssertionError, msg) as ctx:
self.assertFormsetError(response, "formset", 0, "field", "other error")
self.assertIn("['invalid value'] != ['other error']", str(ctx.exception))
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormsetError(
+ response, "formset", 0, "field", "other error", msg_prefix=msg_prefix
+ )
def test_basic_positive_assertion(self):
response = mock.Mock(context=[{"formset": TestFormset.invalid()}])
@@ -1594,6 +1656,47 @@ class AssertFormsetErrorTests(SimpleTestCase):
)
self.assertFormsetError(response, "formset", 0, None, "non-field error")
+ def test_different_non_field_errors(self):
+ response = mock.Mock(
+ context=[{}, {"formset": TestFormset.invalid(nonfield=True)}],
+ )
+ msg = (
+ "The non-field errors of form 0 of formset <TestFormset: bound=True "
+ "valid=False total_forms=1> don't match."
+ )
+ with self.assertRaisesMessage(AssertionError, msg) as ctx:
+ self.assertFormsetError(
+ response, "formset", 0, None, "other non-field error"
+ )
+ self.assertIn(
+ "['non-field error'] != ['other non-field error']", str(ctx.exception)
+ )
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormsetError(
+ response,
+ "formset",
+ 0,
+ None,
+ "other non-field error",
+ msg_prefix=msg_prefix,
+ )
+
+ def test_no_non_field_errors(self):
+ response = mock.Mock(context=[{}, {"formset": TestFormset.invalid()}])
+ msg = (
+ "The non-field errors of form 0 of formset <TestFormset: bound=True "
+ "valid=False total_forms=1> don't match."
+ )
+ with self.assertRaisesMessage(AssertionError, msg) as ctx:
+ self.assertFormsetError(response, "formset", 0, None, "non-field error")
+ self.assertIn("[] != ['non-field error']", str(ctx.exception))
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormsetError(
+ response, "formset", 0, None, "non-field error", msg_prefix=msg_prefix
+ )
+
def test_non_form_errors(self):
response = mock.Mock(
context=[
@@ -1603,6 +1706,38 @@ class AssertFormsetErrorTests(SimpleTestCase):
)
self.assertFormsetError(response, "formset", None, None, "error")
+ def test_different_non_form_errors(self):
+ response = mock.Mock(
+ context=[{}, {"formset": TestFormset.invalid(nonform=True)}],
+ )
+ msg = (
+ "The non-form errors of formset <TestFormset: bound=True valid=False "
+ "total_forms=0> don't match."
+ )
+ with self.assertRaisesMessage(AssertionError, msg) as ctx:
+ self.assertFormsetError(response, "formset", None, None, "other error")
+ self.assertIn("['error'] != ['other error']", str(ctx.exception))
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormsetError(
+ response, "formset", None, None, "other error", msg_prefix=msg_prefix
+ )
+
+ def test_no_non_form_errors(self):
+ response = mock.Mock(context=[{}, {"formset": TestFormset.invalid()}])
+ msg = (
+ "The non-form errors of formset <TestFormset: bound=True valid=False "
+ "total_forms=1> don't match."
+ )
+ with self.assertRaisesMessage(AssertionError, msg) as ctx:
+ self.assertFormsetError(response, "formset", None, None, "error")
+ self.assertIn("[] != ['error']", str(ctx.exception))
+ msg_prefix = "Custom prefix"
+ with self.assertRaisesMessage(AssertionError, f"{msg_prefix}: {msg}"):
+ self.assertFormsetError(
+ response, "formset", None, None, "error", msg_prefix=msg_prefix
+ )
+
def test_non_form_errors_with_field(self):
response = mock.Mock(
context=[