summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJulien Phalip <jphalip@gmail.com>2011-08-28 07:57:56 +0000
committerJulien Phalip <jphalip@gmail.com>2011-08-28 07:57:56 +0000
commit93fbb77d9b5f4ab936c8f29b20a704d9b11be0c7 (patch)
tree0fd678c192365c9ccd14972be9961acbf15fc09b /tests
parentce477f0873331653bbcf4bcd66a06240071a5b34 (diff)
Fixed #16716 -- Fixed two small regressions in the development version introduced in r16144 where the changelist crashed with a 500 error instead of nicely operating a 302 redirection back to the changelist.
The two specific cases were: * a lookup through a non-existing field and apparently spanning multiple relationships (e.g. "?nonexistant__whatever=xxxx"). * a proper list_filter's queryset failing with an exception. In Django 1.3 the queryset was only directly manipulated by the changelist, whereas in 1.4 the list_filters may manipulate the queryset themselves. The fix here implies catching potential failures from the list_filters too. git-svn-id: http://code.djangoproject.com/svn/django/trunk@16705 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/admin_filters/tests.py21
-rw-r--r--tests/regressiontests/admin_views/tests.py5
2 files changed, 25 insertions, 1 deletions
diff --git a/tests/regressiontests/admin_filters/tests.py b/tests/regressiontests/admin_filters/tests.py
index fd82a7aba3..e089ce24fb 100644
--- a/tests/regressiontests/admin_filters/tests.py
+++ b/tests/regressiontests/admin_filters/tests.py
@@ -1,9 +1,9 @@
import datetime
+from django.contrib.admin.options import IncorrectLookupParameters
from django.core.exceptions import ImproperlyConfigured
from django.test import TestCase, RequestFactory
from django.utils.encoding import force_unicode
-
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from django.contrib.admin.views.main import ChangeList
@@ -50,6 +50,11 @@ class DecadeListFilterWithNoneReturningLookups(DecadeListFilterWithTitleAndParam
def lookups(self, request, model_admin):
pass
+class DecadeListFilterWithFailingQueryset(DecadeListFilterWithTitleAndParameter):
+
+ def queryset(self, request, queryset):
+ raise Exception
+
class DecadeListFilterWithQuerysetBasedLookups(DecadeListFilterWithTitleAndParameter):
def lookups(self, request, model_admin):
@@ -84,6 +89,9 @@ class DecadeFilterBookAdminWithoutParameter(ModelAdmin):
class DecadeFilterBookAdminWithNoneReturningLookups(ModelAdmin):
list_filter = (DecadeListFilterWithNoneReturningLookups,)
+class DecadeFilterBookAdminWithFailingQueryset(ModelAdmin):
+ list_filter = (DecadeListFilterWithFailingQueryset,)
+
class DecadeFilterBookAdminWithQuerysetBasedLookups(ModelAdmin):
list_filter = (DecadeListFilterWithQuerysetBasedLookups,)
@@ -509,6 +517,17 @@ class ListFiltersTests(TestCase):
filterspec = changelist.get_filters(request)[0]
self.assertEqual(len(filterspec), 0)
+ def test_filter_with_failing_queryset(self):
+ """
+ Ensure that a filter's failing queryset is interpreted as if incorrect
+ lookup parameters were passed (therefore causing a 302 redirection to
+ the changelist).
+ Refs #16716, #16714.
+ """
+ modeladmin = DecadeFilterBookAdminWithFailingQueryset(Book, site)
+ request = self.request_factory.get('/', {})
+ self.assertRaises(IncorrectLookupParameters, self.get_changelist, request, Book, modeladmin)
+
def test_simplelistfilter_with_queryset_based_lookups(self):
modeladmin = DecadeFilterBookAdminWithQuerysetBasedLookups(Book, site)
request = self.request_factory.get('/', {})
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index 0d1628c366..22b65a6cb8 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -410,6 +410,11 @@ class AdminViewBasicTest(TestCase):
"""Ensure incorrect lookup parameters are handled gracefully."""
response = self.client.get('/test_admin/%s/admin_views/thing/' % self.urlbit, {'notarealfield': '5'})
self.assertRedirects(response, '/test_admin/%s/admin_views/thing/?e=1' % self.urlbit)
+
+ # Spanning relationships through an inexistant related object (Refs #16716)
+ response = self.client.get('/test_admin/%s/admin_views/thing/' % self.urlbit, {'notarealfield__whatever': '5'})
+ self.assertRedirects(response, '/test_admin/%s/admin_views/thing/?e=1' % self.urlbit)
+
response = self.client.get('/test_admin/%s/admin_views/thing/' % self.urlbit, {'color__id__exact': 'StringNotInteger!'})
self.assertRedirects(response, '/test_admin/%s/admin_views/thing/?e=1' % self.urlbit)