Loading AUTHORS +1 −0 Original line number Diff line number Diff line Loading @@ -253,6 +253,7 @@ answer newbie questions, and generally made Django that much better: pradeep.gowda@gmail.com Collin Grady <collin@collingrady.com> Gabriel Grant <g@briel.ca> Martin Green Daniel Greenfeld Simon Greenhill <dev@simon.net.nz> Owen Griffiths Loading django/test/testcases.py +77 −0 Original line number Diff line number Diff line Loading @@ -509,6 +509,83 @@ class SimpleTestCase(ut2.TestCase): self.fail(msg_prefix + "The form '%s' was not used to render the" " response" % form) def assertFormsetError(self, response, formset, form_index, field, errors, msg_prefix=''): """ Asserts that a formset used to render the response has a specific error. For field errors, specify the ``form_index`` and the ``field``. For non-field errors, specify the ``form_index`` and the ``field`` as None. For non-form errors, specify ``form_index`` as None and the ``field`` as None. """ # Add punctuation to msg_prefix if msg_prefix: msg_prefix += ": " # Put context(s) into a list to simplify processing. contexts = to_list(response.context) if not contexts: self.fail(msg_prefix + 'Response did not use any contexts to ' 'render the response') # Put error(s) into a list to simplify processing. errors = to_list(errors) # Search all contexts for the error. found_formset = False for i, context in enumerate(contexts): if formset not in context: continue found_formset = True for err in errors: if field is not None: if field in context[formset].forms[form_index].errors: field_errors = context[formset].forms[form_index].errors[field] self.assertTrue(err in field_errors, msg_prefix + "The field '%s' on formset '%s', " "form %d in context %d does not contain the " "error '%s' (actual errors: %s)" % (field, formset, form_index, i, err, repr(field_errors))) elif field in context[formset].forms[form_index].fields: self.fail(msg_prefix + "The field '%s' " "on formset '%s', form %d in " "context %d contains no errors" % (field, formset, form_index, i)) else: self.fail(msg_prefix + "The formset '%s', form %d in " "context %d does not contain the field '%s'" % (formset, form_index, i, field)) elif form_index is not None: non_field_errors = context[formset].forms[form_index].non_field_errors() self.assertFalse(len(non_field_errors) == 0, msg_prefix + "The formset '%s', form %d in " "context %d does not contain any non-field " "errors." % (formset, form_index, i)) self.assertTrue(err in non_field_errors, msg_prefix + "The formset '%s', form %d " "in context %d does not contain the " "non-field error '%s' " "(actual errors: %s)" % (formset, form_index, i, err, repr(non_field_errors))) else: non_form_errors = context[formset].non_form_errors() self.assertFalse(len(non_form_errors) == 0, msg_prefix + "The formset '%s' in " "context %d does not contain any " "non-form errors." % (formset, i)) self.assertTrue(err in non_form_errors, msg_prefix + "The formset '%s' in context " "%d does not contain the " "non-form error '%s' (actual errors: %s)" % (formset, i, err, repr(non_form_errors))) if not found_formset: self.fail(msg_prefix + "The formset '%s' was not used to render " "the response" % formset) def assertTemplateUsed(self, response=None, template_name=None, msg_prefix=''): """ Asserts that the template with the provided name was used in rendering Loading docs/releases/1.6.txt +4 −0 Original line number Diff line number Diff line Loading @@ -283,6 +283,10 @@ Minor features * The :meth:`~django.db.models.query.QuerySet.get_or_create` method no longer requires at least one keyword argument. * The :class:`~django.test.SimpleTestCase` class includes a new assertion helper for testing formset errors: :meth:`~django.test.SimpleTestCase.assertFormsetError`. Backwards incompatible changes in 1.6 ===================================== Loading docs/topics/testing/overview.txt +21 −0 Original line number Diff line number Diff line Loading @@ -1532,6 +1532,27 @@ your test suite. ``errors`` is an error string, or a list of error strings, that are expected as a result of form validation. .. method:: SimpleTestCase.assertFormsetError(response, formset, form_index, field, errors, msg_prefix='') .. versionadded:: 1.6 Asserts that the ``formset`` raises the provided list of errors when rendered. ``formset`` is the name the ``Formset`` instance was given in the template context. ``form_index`` is the number of the form within the ``Formset``. If ``form_index`` has a value of ``None``, non-form errors (errors you can access via ``formset.non_form_errors()``) will be checked. ``field`` is the name of the field on the form to check. If ``field`` has a value of ``None``, non-field errors (errors you can access via ``form.non_field_errors()``) will be checked. ``errors`` is an error string, or a list of error strings, that are expected as a result of form validation. .. method:: SimpleTestCase.assertContains(response, text, count=None, status_code=200, msg_prefix='', html=False) Asserts that a ``Response`` instance produced the given ``status_code`` and Loading tests/test_client/urls.py +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ urlpatterns = patterns('', (r'^bad_view/$', views.bad_view), (r'^form_view/$', views.form_view), (r'^form_view_with_template/$', views.form_view_with_template), (r'^formset_view/$', views.formset_view), (r'^login_protected_view/$', views.login_protected_view), (r'^login_protected_method_view/$', views.login_protected_method_view), (r'^login_protected_view_custom_redirect/$', views.login_protected_view_changed_redirect), Loading Loading
AUTHORS +1 −0 Original line number Diff line number Diff line Loading @@ -253,6 +253,7 @@ answer newbie questions, and generally made Django that much better: pradeep.gowda@gmail.com Collin Grady <collin@collingrady.com> Gabriel Grant <g@briel.ca> Martin Green Daniel Greenfeld Simon Greenhill <dev@simon.net.nz> Owen Griffiths Loading
django/test/testcases.py +77 −0 Original line number Diff line number Diff line Loading @@ -509,6 +509,83 @@ class SimpleTestCase(ut2.TestCase): self.fail(msg_prefix + "The form '%s' was not used to render the" " response" % form) def assertFormsetError(self, response, formset, form_index, field, errors, msg_prefix=''): """ Asserts that a formset used to render the response has a specific error. For field errors, specify the ``form_index`` and the ``field``. For non-field errors, specify the ``form_index`` and the ``field`` as None. For non-form errors, specify ``form_index`` as None and the ``field`` as None. """ # Add punctuation to msg_prefix if msg_prefix: msg_prefix += ": " # Put context(s) into a list to simplify processing. contexts = to_list(response.context) if not contexts: self.fail(msg_prefix + 'Response did not use any contexts to ' 'render the response') # Put error(s) into a list to simplify processing. errors = to_list(errors) # Search all contexts for the error. found_formset = False for i, context in enumerate(contexts): if formset not in context: continue found_formset = True for err in errors: if field is not None: if field in context[formset].forms[form_index].errors: field_errors = context[formset].forms[form_index].errors[field] self.assertTrue(err in field_errors, msg_prefix + "The field '%s' on formset '%s', " "form %d in context %d does not contain the " "error '%s' (actual errors: %s)" % (field, formset, form_index, i, err, repr(field_errors))) elif field in context[formset].forms[form_index].fields: self.fail(msg_prefix + "The field '%s' " "on formset '%s', form %d in " "context %d contains no errors" % (field, formset, form_index, i)) else: self.fail(msg_prefix + "The formset '%s', form %d in " "context %d does not contain the field '%s'" % (formset, form_index, i, field)) elif form_index is not None: non_field_errors = context[formset].forms[form_index].non_field_errors() self.assertFalse(len(non_field_errors) == 0, msg_prefix + "The formset '%s', form %d in " "context %d does not contain any non-field " "errors." % (formset, form_index, i)) self.assertTrue(err in non_field_errors, msg_prefix + "The formset '%s', form %d " "in context %d does not contain the " "non-field error '%s' " "(actual errors: %s)" % (formset, form_index, i, err, repr(non_field_errors))) else: non_form_errors = context[formset].non_form_errors() self.assertFalse(len(non_form_errors) == 0, msg_prefix + "The formset '%s' in " "context %d does not contain any " "non-form errors." % (formset, i)) self.assertTrue(err in non_form_errors, msg_prefix + "The formset '%s' in context " "%d does not contain the " "non-form error '%s' (actual errors: %s)" % (formset, i, err, repr(non_form_errors))) if not found_formset: self.fail(msg_prefix + "The formset '%s' was not used to render " "the response" % formset) def assertTemplateUsed(self, response=None, template_name=None, msg_prefix=''): """ Asserts that the template with the provided name was used in rendering Loading
docs/releases/1.6.txt +4 −0 Original line number Diff line number Diff line Loading @@ -283,6 +283,10 @@ Minor features * The :meth:`~django.db.models.query.QuerySet.get_or_create` method no longer requires at least one keyword argument. * The :class:`~django.test.SimpleTestCase` class includes a new assertion helper for testing formset errors: :meth:`~django.test.SimpleTestCase.assertFormsetError`. Backwards incompatible changes in 1.6 ===================================== Loading
docs/topics/testing/overview.txt +21 −0 Original line number Diff line number Diff line Loading @@ -1532,6 +1532,27 @@ your test suite. ``errors`` is an error string, or a list of error strings, that are expected as a result of form validation. .. method:: SimpleTestCase.assertFormsetError(response, formset, form_index, field, errors, msg_prefix='') .. versionadded:: 1.6 Asserts that the ``formset`` raises the provided list of errors when rendered. ``formset`` is the name the ``Formset`` instance was given in the template context. ``form_index`` is the number of the form within the ``Formset``. If ``form_index`` has a value of ``None``, non-form errors (errors you can access via ``formset.non_form_errors()``) will be checked. ``field`` is the name of the field on the form to check. If ``field`` has a value of ``None``, non-field errors (errors you can access via ``form.non_field_errors()``) will be checked. ``errors`` is an error string, or a list of error strings, that are expected as a result of form validation. .. method:: SimpleTestCase.assertContains(response, text, count=None, status_code=200, msg_prefix='', html=False) Asserts that a ``Response`` instance produced the given ``status_code`` and Loading
tests/test_client/urls.py +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ urlpatterns = patterns('', (r'^bad_view/$', views.bad_view), (r'^form_view/$', views.form_view), (r'^form_view_with_template/$', views.form_view_with_template), (r'^formset_view/$', views.formset_view), (r'^login_protected_view/$', views.login_protected_view), (r'^login_protected_method_view/$', views.login_protected_method_view), (r'^login_protected_view_custom_redirect/$', views.login_protected_view_changed_redirect), Loading