diff options
| author | Ramiro Morales <cramm0@gmail.com> | 2011-12-19 14:59:14 +0000 |
|---|---|---|
| committer | Ramiro Morales <cramm0@gmail.com> | 2011-12-19 14:59:14 +0000 |
| commit | 554f0601b59309df8c9da2f14c56f9ea97aabc91 (patch) | |
| tree | c7073dcaabe638deff65a211d0af765f058eeb06 /tests/regressiontests/admin_views | |
| parent | 259ebcdeeac9929b173cae8bbc5f7dd4ee102cb8 (diff) | |
Stopped unconditionally reversing admin model add/change URLs.
Starting with [16857] this could cause HTTP 500 errors when
`ModelAdmin.get_urls()` has been customized to the point it doesn't
provide these standard URLs.
Fixes #17333. Refs #15294.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17237 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/admin_views')
| -rw-r--r-- | tests/regressiontests/admin_views/admin.py | 17 | ||||
| -rw-r--r-- | tests/regressiontests/admin_views/models.py | 6 | ||||
| -rw-r--r-- | tests/regressiontests/admin_views/tests.py | 34 |
3 files changed, 54 insertions, 3 deletions
diff --git a/tests/regressiontests/admin_views/admin.py b/tests/regressiontests/admin_views/admin.py index 514538fb6d..8c5b511d1e 100644 --- a/tests/regressiontests/admin_views/admin.py +++ b/tests/regressiontests/admin_views/admin.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import -import datetime import tempfile import os @@ -10,8 +9,10 @@ from django.contrib import admin from django.contrib.admin.views.main import ChangeList from django.core.files.storage import FileSystemStorage from django.core.mail import EmailMessage +from django.conf.urls import patterns, url from django.db import models from django.forms.models import BaseModelFormSet +from django.http import HttpResponse from .models import (Article, Chapter, Account, Media, Child, Parent, Picture, Widget, DooHickey, Grommet, Whatsit, FancyDoodad, Category, Link, @@ -24,7 +25,7 @@ from .models import (Article, Chapter, Account, Media, Child, Parent, Picture, CoverLetter, Story, OtherStory, Book, Promo, ChapterXtra1, Pizza, Topping, Album, Question, Answer, ComplexSortedPerson, PrePopulatedPostLargeSlug, AdminOrderedField, AdminOrderedModelMethod, AdminOrderedAdminMethod, - AdminOrderedCallable) + AdminOrderedCallable, Report) def callable_year(dt_value): @@ -499,6 +500,17 @@ class AdminOrderedCallableAdmin(admin.ModelAdmin): ordering = ('order',) list_display = ('stuff', admin_ordered_callable) +class ReportAdmin(admin.ModelAdmin): + def extra(self, request): + return HttpResponse() + + def get_urls(self): + # Corner case: Don't call parent implementation + return patterns('', + url(r'^extra/$', + self.extra, + name='cable_extra'), + ) site = admin.AdminSite(name="admin") site.register(Article, ArticleAdmin) @@ -543,6 +555,7 @@ site.register(Paper, PaperAdmin) site.register(CoverLetter, CoverLetterAdmin) site.register(Story, StoryAdmin) site.register(OtherStory, OtherStoryAdmin) +site.register(Report, ReportAdmin) # We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2. # That way we cover all four cases: diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py index eb56f9b6e3..0029fcc152 100644 --- a/tests/regressiontests/admin_views/models.py +++ b/tests/regressiontests/admin_views/models.py @@ -566,3 +566,9 @@ class AdminOrderedAdminMethod(models.Model): class AdminOrderedCallable(models.Model): order = models.IntegerField() stuff = models.CharField(max_length=200) + +class Report(models.Model): + title = models.CharField(max_length=100) + + def __unicode__(self): + return self.title diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py index 756597c70f..6037c2b187 100644 --- a/tests/regressiontests/admin_views/tests.py +++ b/tests/regressiontests/admin_views/tests.py @@ -38,7 +38,8 @@ from .models import (Article, BarAccount, CustomArticle, EmptyModel, FooAccount, Book, Promo, WorkHour, Employee, Question, Answer, Inquisition, Actor, FoodDelivery, RowLevelChangePermissionModel, Paper, CoverLetter, Story, OtherStory, ComplexSortedPerson, Parent, Child, AdminOrderedField, - AdminOrderedModelMethod, AdminOrderedAdminMethod, AdminOrderedCallable) + AdminOrderedModelMethod, AdminOrderedAdminMethod, AdminOrderedCallable, + Report) ERROR_MESSAGE = "Please enter the correct username and password \ @@ -1090,6 +1091,37 @@ class AdminViewPermissionsTest(TestCase): self.assertContains(response, 'id="login-form"') +class AdminViewsNoUrlTest(TestCase): + """Regression test for #17333""" + + urls = "regressiontests.admin_views.urls" + fixtures = ['admin-views-users.xml'] + + def setUp(self): + opts = Report._meta + # User who can change Reports + change_user = User.objects.get(username='changeuser') + change_user.user_permissions.add(get_perm(Report, + opts.get_change_permission())) + + # login POST dict + self.changeuser_login = { + REDIRECT_FIELD_NAME: '/test_admin/admin/', + LOGIN_FORM_KEY: 1, + 'username': 'changeuser', + 'password': 'secret', + } + + def test_no_standard_modeladmin_urls(self): + """Admin index views don't break when user's ModelAdmin removes standard urls""" + self.client.get('/test_admin/admin/') + self.client.post('/test_admin/admin/', self.changeuser_login) + r = self.client.get('/test_admin/admin/') + # we shouldn' get an 500 error caused by a NoReverseMatch + self.assertEqual(r.status_code, 200) + self.client.get('/test_admin/admin/logout/') + + class AdminViewDeletedObjectsTest(TestCase): urls = "regressiontests.admin_views.urls" fixtures = ['admin-views-users.xml', 'deleted-objects.xml'] |
