Added a few force_unicode() calls around objects in the admin. Required for
Python 2.3 compatibility. Patch from nfg. Refs #8151, #8153. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8236 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
be4390f834
commit
ab8965c428
|
@ -358,7 +358,7 @@ class ModelAdmin(BaseModelAdmin):
|
||||||
|
|
||||||
pk_value = new_object._get_pk_val()
|
pk_value = new_object._get_pk_val()
|
||||||
LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(self.model).id, pk_value, force_unicode(new_object), ADDITION)
|
LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(self.model).id, pk_value, force_unicode(new_object), ADDITION)
|
||||||
msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': new_object}
|
msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(new_object)}
|
||||||
# Here, we distinguish between different save types by checking for
|
# Here, we distinguish between different save types by checking for
|
||||||
# the presence of keys in request.POST.
|
# the presence of keys in request.POST.
|
||||||
if request.POST.has_key("_continue"):
|
if request.POST.has_key("_continue"):
|
||||||
|
@ -428,7 +428,7 @@ class ModelAdmin(BaseModelAdmin):
|
||||||
change_message = _('No fields changed.')
|
change_message = _('No fields changed.')
|
||||||
LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(self.model).id, pk_value, force_unicode(new_object), CHANGE, change_message)
|
LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(self.model).id, pk_value, force_unicode(new_object), CHANGE, change_message)
|
||||||
|
|
||||||
msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': new_object}
|
msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(new_object)}
|
||||||
if request.POST.has_key("_continue"):
|
if request.POST.has_key("_continue"):
|
||||||
request.user.message_set.create(message=msg + ' ' + _("You may edit it again below."))
|
request.user.message_set.create(message=msg + ' ' + _("You may edit it again below."))
|
||||||
if request.REQUEST.has_key('_popup'):
|
if request.REQUEST.has_key('_popup'):
|
||||||
|
|
|
@ -3,7 +3,7 @@ from django.contrib import admin
|
||||||
|
|
||||||
class Section(models.Model):
|
class Section(models.Model):
|
||||||
"""
|
"""
|
||||||
A simple section that links to articles, to test linking to related items
|
A simple section that links to articles, to test linking to related items
|
||||||
in admin views.
|
in admin views.
|
||||||
"""
|
"""
|
||||||
name = models.CharField(max_length=100)
|
name = models.CharField(max_length=100)
|
||||||
|
@ -12,14 +12,18 @@ class Article(models.Model):
|
||||||
"""
|
"""
|
||||||
A simple article to test admin views. Test backwards compatibility.
|
A simple article to test admin views. Test backwards compatibility.
|
||||||
"""
|
"""
|
||||||
|
title = models.CharField(max_length=100)
|
||||||
content = models.TextField()
|
content = models.TextField()
|
||||||
date = models.DateTimeField()
|
date = models.DateTimeField()
|
||||||
section = models.ForeignKey(Section)
|
section = models.ForeignKey(Section)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.title
|
||||||
|
|
||||||
class ArticleAdmin(admin.ModelAdmin):
|
class ArticleAdmin(admin.ModelAdmin):
|
||||||
list_display = ('content', 'date')
|
list_display = ('content', 'date')
|
||||||
list_filter = ('date',)
|
list_filter = ('date',)
|
||||||
|
|
||||||
def changelist_view(self, request):
|
def changelist_view(self, request):
|
||||||
"Test that extra_context works"
|
"Test that extra_context works"
|
||||||
return super(ArticleAdmin, self).changelist_view(
|
return super(ArticleAdmin, self).changelist_view(
|
||||||
|
@ -40,7 +44,7 @@ class CustomArticleAdmin(admin.ModelAdmin):
|
||||||
change_form_template = 'custom_admin/change_form.html'
|
change_form_template = 'custom_admin/change_form.html'
|
||||||
object_history_template = 'custom_admin/object_history.html'
|
object_history_template = 'custom_admin/object_history.html'
|
||||||
delete_confirmation_template = 'custom_admin/delete_confirmation.html'
|
delete_confirmation_template = 'custom_admin/delete_confirmation.html'
|
||||||
|
|
||||||
def changelist_view(self, request):
|
def changelist_view(self, request):
|
||||||
"Test that extra_context works"
|
"Test that extra_context works"
|
||||||
return super(CustomArticleAdmin, self).changelist_view(
|
return super(CustomArticleAdmin, self).changelist_view(
|
||||||
|
@ -51,10 +55,10 @@ class CustomArticleAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
class ModelWithStringPrimaryKey(models.Model):
|
class ModelWithStringPrimaryKey(models.Model):
|
||||||
id = models.CharField(max_length=255, primary_key=True)
|
id = models.CharField(max_length=255, primary_key=True)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.id
|
return self.id
|
||||||
|
|
||||||
admin.site.register(Article, ArticleAdmin)
|
admin.site.register(Article, ArticleAdmin)
|
||||||
admin.site.register(CustomArticle, CustomArticleAdmin)
|
admin.site.register(CustomArticle, CustomArticleAdmin)
|
||||||
admin.site.register(Section)
|
admin.site.register(Section)
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.contrib.auth.models import User, Permission
|
from django.contrib.auth.models import User, Permission
|
||||||
|
@ -17,35 +18,35 @@ def get_perm(Model, perm):
|
||||||
|
|
||||||
class AdminViewPermissionsTest(TestCase):
|
class AdminViewPermissionsTest(TestCase):
|
||||||
"""Tests for Admin Views Permissions."""
|
"""Tests for Admin Views Permissions."""
|
||||||
|
|
||||||
fixtures = ['admin-views-users.xml']
|
fixtures = ['admin-views-users.xml']
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
"""Test setup."""
|
"""Test setup."""
|
||||||
# Setup permissions, for our users who can add, change, and delete.
|
# Setup permissions, for our users who can add, change, and delete.
|
||||||
# We can't put this into the fixture, because the content type id
|
# We can't put this into the fixture, because the content type id
|
||||||
# and the permission id could be different on each run of the test.
|
# and the permission id could be different on each run of the test.
|
||||||
|
|
||||||
opts = Article._meta
|
opts = Article._meta
|
||||||
|
|
||||||
# User who can add Articles
|
# User who can add Articles
|
||||||
add_user = User.objects.get(username='adduser')
|
add_user = User.objects.get(username='adduser')
|
||||||
add_user.user_permissions.add(get_perm(Article,
|
add_user.user_permissions.add(get_perm(Article,
|
||||||
opts.get_add_permission()))
|
opts.get_add_permission()))
|
||||||
|
|
||||||
# User who can change Articles
|
# User who can change Articles
|
||||||
change_user = User.objects.get(username='changeuser')
|
change_user = User.objects.get(username='changeuser')
|
||||||
change_user.user_permissions.add(get_perm(Article,
|
change_user.user_permissions.add(get_perm(Article,
|
||||||
opts.get_change_permission()))
|
opts.get_change_permission()))
|
||||||
|
|
||||||
# User who can delete Articles
|
# User who can delete Articles
|
||||||
delete_user = User.objects.get(username='deleteuser')
|
delete_user = User.objects.get(username='deleteuser')
|
||||||
delete_user.user_permissions.add(get_perm(Article,
|
delete_user.user_permissions.add(get_perm(Article,
|
||||||
opts.get_delete_permission()))
|
opts.get_delete_permission()))
|
||||||
|
|
||||||
delete_user.user_permissions.add(get_perm(Section,
|
delete_user.user_permissions.add(get_perm(Section,
|
||||||
Section._meta.get_delete_permission()))
|
Section._meta.get_delete_permission()))
|
||||||
|
|
||||||
# login POST dicts
|
# login POST dicts
|
||||||
self.super_login = {'post_data': _encode_post_data({}),
|
self.super_login = {'post_data': _encode_post_data({}),
|
||||||
LOGIN_FORM_KEY: 1,
|
LOGIN_FORM_KEY: 1,
|
||||||
|
@ -81,7 +82,7 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
If you leave off the trailing slash, app should redirect and add it.
|
If you leave off the trailing slash, app should redirect and add it.
|
||||||
"""
|
"""
|
||||||
self.client.post('/test_admin/admin/', self.super_login)
|
self.client.post('/test_admin/admin/', self.super_login)
|
||||||
|
|
||||||
request = self.client.get(
|
request = self.client.get(
|
||||||
'/test_admin/admin/admin_views/article/add'
|
'/test_admin/admin/admin_views/article/add'
|
||||||
)
|
)
|
||||||
|
@ -92,9 +93,9 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
def testLogin(self):
|
def testLogin(self):
|
||||||
"""
|
"""
|
||||||
Make sure only staff members can log in.
|
Make sure only staff members can log in.
|
||||||
|
|
||||||
Successful posts to the login page will redirect to the orignal url.
|
Successful posts to the login page will redirect to the orignal url.
|
||||||
Unsuccessfull attempts will continue to render the login page with
|
Unsuccessfull attempts will continue to render the login page with
|
||||||
a 200 status code.
|
a 200 status code.
|
||||||
"""
|
"""
|
||||||
# Super User
|
# Super User
|
||||||
|
@ -104,7 +105,7 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
self.assertRedirects(login, '/test_admin/admin/')
|
self.assertRedirects(login, '/test_admin/admin/')
|
||||||
self.failIf(login.context)
|
self.failIf(login.context)
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
|
|
||||||
# Test if user enters e-mail address
|
# Test if user enters e-mail address
|
||||||
request = self.client.get('/test_admin/admin/')
|
request = self.client.get('/test_admin/admin/')
|
||||||
self.failUnlessEqual(request.status_code, 200)
|
self.failUnlessEqual(request.status_code, 200)
|
||||||
|
@ -118,7 +119,7 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
# check to ensure if there are multiple e-mail addresses a user doesn't get a 500
|
# check to ensure if there are multiple e-mail addresses a user doesn't get a 500
|
||||||
login = self.client.post('/test_admin/admin/', self.super_email_login)
|
login = self.client.post('/test_admin/admin/', self.super_email_login)
|
||||||
self.assertContains(login, "Usernames cannot contain the '@' character")
|
self.assertContains(login, "Usernames cannot contain the '@' character")
|
||||||
|
|
||||||
# Add User
|
# Add User
|
||||||
request = self.client.get('/test_admin/admin/')
|
request = self.client.get('/test_admin/admin/')
|
||||||
self.failUnlessEqual(request.status_code, 200)
|
self.failUnlessEqual(request.status_code, 200)
|
||||||
|
@ -126,7 +127,7 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
self.assertRedirects(login, '/test_admin/admin/')
|
self.assertRedirects(login, '/test_admin/admin/')
|
||||||
self.failIf(login.context)
|
self.failIf(login.context)
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
|
|
||||||
# Change User
|
# Change User
|
||||||
request = self.client.get('/test_admin/admin/')
|
request = self.client.get('/test_admin/admin/')
|
||||||
self.failUnlessEqual(request.status_code, 200)
|
self.failUnlessEqual(request.status_code, 200)
|
||||||
|
@ -134,7 +135,7 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
self.assertRedirects(login, '/test_admin/admin/')
|
self.assertRedirects(login, '/test_admin/admin/')
|
||||||
self.failIf(login.context)
|
self.failIf(login.context)
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
|
|
||||||
# Delete User
|
# Delete User
|
||||||
request = self.client.get('/test_admin/admin/')
|
request = self.client.get('/test_admin/admin/')
|
||||||
self.failUnlessEqual(request.status_code, 200)
|
self.failUnlessEqual(request.status_code, 200)
|
||||||
|
@ -142,7 +143,7 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
self.assertRedirects(login, '/test_admin/admin/')
|
self.assertRedirects(login, '/test_admin/admin/')
|
||||||
self.failIf(login.context)
|
self.failIf(login.context)
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
|
|
||||||
# Regular User should not be able to login.
|
# Regular User should not be able to login.
|
||||||
request = self.client.get('/test_admin/admin/')
|
request = self.client.get('/test_admin/admin/')
|
||||||
self.failUnlessEqual(request.status_code, 200)
|
self.failUnlessEqual(request.status_code, 200)
|
||||||
|
@ -153,11 +154,12 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
|
|
||||||
def testAddView(self):
|
def testAddView(self):
|
||||||
"""Test add view restricts access and actually adds items."""
|
"""Test add view restricts access and actually adds items."""
|
||||||
|
|
||||||
add_dict = {'content': '<p>great article</p>',
|
add_dict = {'title' : 'Døm ikke',
|
||||||
|
'content': '<p>great article</p>',
|
||||||
'date_0': '2008-03-18', 'date_1': '10:54:39',
|
'date_0': '2008-03-18', 'date_1': '10:54:39',
|
||||||
'section': 1}
|
'section': 1}
|
||||||
|
|
||||||
# Change User should not have access to add articles
|
# Change User should not have access to add articles
|
||||||
self.client.get('/test_admin/admin/')
|
self.client.get('/test_admin/admin/')
|
||||||
self.client.post('/test_admin/admin/', self.changeuser_login)
|
self.client.post('/test_admin/admin/', self.changeuser_login)
|
||||||
|
@ -168,7 +170,7 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
self.failUnlessEqual(post.status_code, 403)
|
self.failUnlessEqual(post.status_code, 403)
|
||||||
self.failUnlessEqual(Article.objects.all().count(), 1)
|
self.failUnlessEqual(Article.objects.all().count(), 1)
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
|
|
||||||
# Add user may login and POST to add view, then redirect to admin root
|
# Add user may login and POST to add view, then redirect to admin root
|
||||||
self.client.get('/test_admin/admin/')
|
self.client.get('/test_admin/admin/')
|
||||||
self.client.post('/test_admin/admin/', self.adduser_login)
|
self.client.post('/test_admin/admin/', self.adduser_login)
|
||||||
|
@ -176,7 +178,7 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
self.assertRedirects(post, '/test_admin/admin/')
|
self.assertRedirects(post, '/test_admin/admin/')
|
||||||
self.failUnlessEqual(Article.objects.all().count(), 2)
|
self.failUnlessEqual(Article.objects.all().count(), 2)
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
|
|
||||||
# Super can add too, but is redirected to the change list view
|
# Super can add too, but is redirected to the change list view
|
||||||
self.client.get('/test_admin/admin/')
|
self.client.get('/test_admin/admin/')
|
||||||
self.client.post('/test_admin/admin/', self.super_login)
|
self.client.post('/test_admin/admin/', self.super_login)
|
||||||
|
@ -184,7 +186,7 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
self.assertRedirects(post, '/test_admin/admin/admin_views/article/')
|
self.assertRedirects(post, '/test_admin/admin/admin_views/article/')
|
||||||
self.failUnlessEqual(Article.objects.all().count(), 3)
|
self.failUnlessEqual(Article.objects.all().count(), 3)
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
|
|
||||||
# Check and make sure that if user expires, data still persists
|
# Check and make sure that if user expires, data still persists
|
||||||
post = self.client.post('/test_admin/admin/admin_views/article/add/', add_dict)
|
post = self.client.post('/test_admin/admin/admin_views/article/add/', add_dict)
|
||||||
self.assertContains(post, 'Please log in again, because your session has expired.')
|
self.assertContains(post, 'Please log in again, because your session has expired.')
|
||||||
|
@ -196,11 +198,12 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
|
|
||||||
def testChangeView(self):
|
def testChangeView(self):
|
||||||
"""Change view should restrict access and allow users to edit items."""
|
"""Change view should restrict access and allow users to edit items."""
|
||||||
|
|
||||||
change_dict = {'content': '<p>edited article</p>',
|
change_dict = {'title' : 'Ikke fordømt',
|
||||||
'date_0': '2008-03-18', 'date_1': '10:54:39',
|
'content': '<p>edited article</p>',
|
||||||
'section': 1}
|
'date_0': '2008-03-18', 'date_1': '10:54:39',
|
||||||
|
'section': 1}
|
||||||
|
|
||||||
# add user shoud not be able to view the list of article or change any of them
|
# add user shoud not be able to view the list of article or change any of them
|
||||||
self.client.get('/test_admin/admin/')
|
self.client.get('/test_admin/admin/')
|
||||||
self.client.post('/test_admin/admin/', self.adduser_login)
|
self.client.post('/test_admin/admin/', self.adduser_login)
|
||||||
|
@ -211,7 +214,7 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
post = self.client.post('/test_admin/admin/admin_views/article/1/', change_dict)
|
post = self.client.post('/test_admin/admin/admin_views/article/1/', change_dict)
|
||||||
self.failUnlessEqual(post.status_code, 403)
|
self.failUnlessEqual(post.status_code, 403)
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
|
|
||||||
# change user can view all items and edit them
|
# change user can view all items and edit them
|
||||||
self.client.get('/test_admin/admin/')
|
self.client.get('/test_admin/admin/')
|
||||||
self.client.post('/test_admin/admin/', self.changeuser_login)
|
self.client.post('/test_admin/admin/', self.changeuser_login)
|
||||||
|
@ -227,17 +230,17 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
def testCustomModelAdminTemplates(self):
|
def testCustomModelAdminTemplates(self):
|
||||||
self.client.get('/test_admin/admin/')
|
self.client.get('/test_admin/admin/')
|
||||||
self.client.post('/test_admin/admin/', self.super_login)
|
self.client.post('/test_admin/admin/', self.super_login)
|
||||||
|
|
||||||
# Test custom change list template with custom extra context
|
# Test custom change list template with custom extra context
|
||||||
request = self.client.get('/test_admin/admin/admin_views/customarticle/')
|
request = self.client.get('/test_admin/admin/admin_views/customarticle/')
|
||||||
self.failUnlessEqual(request.status_code, 200)
|
self.failUnlessEqual(request.status_code, 200)
|
||||||
self.assert_("var hello = 'Hello!';" in request.content)
|
self.assert_("var hello = 'Hello!';" in request.content)
|
||||||
self.assertTemplateUsed(request, 'custom_admin/change_list.html')
|
self.assertTemplateUsed(request, 'custom_admin/change_list.html')
|
||||||
|
|
||||||
# Test custom change form template
|
# Test custom change form template
|
||||||
request = self.client.get('/test_admin/admin/admin_views/customarticle/add/')
|
request = self.client.get('/test_admin/admin/admin_views/customarticle/add/')
|
||||||
self.assertTemplateUsed(request, 'custom_admin/change_form.html')
|
self.assertTemplateUsed(request, 'custom_admin/change_form.html')
|
||||||
|
|
||||||
# Add an article so we can test delete and history views
|
# Add an article so we can test delete and history views
|
||||||
post = self.client.post('/test_admin/admin/admin_views/customarticle/add/', {
|
post = self.client.post('/test_admin/admin/admin_views/customarticle/add/', {
|
||||||
'content': '<p>great article</p>',
|
'content': '<p>great article</p>',
|
||||||
|
@ -246,27 +249,27 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
})
|
})
|
||||||
self.assertRedirects(post, '/test_admin/admin/admin_views/customarticle/')
|
self.assertRedirects(post, '/test_admin/admin/admin_views/customarticle/')
|
||||||
self.failUnlessEqual(CustomArticle.objects.all().count(), 1)
|
self.failUnlessEqual(CustomArticle.objects.all().count(), 1)
|
||||||
|
|
||||||
# Test custom delete and object history templates
|
# Test custom delete and object history templates
|
||||||
request = self.client.get('/test_admin/admin/admin_views/customarticle/1/delete/')
|
request = self.client.get('/test_admin/admin/admin_views/customarticle/1/delete/')
|
||||||
self.assertTemplateUsed(request, 'custom_admin/delete_confirmation.html')
|
self.assertTemplateUsed(request, 'custom_admin/delete_confirmation.html')
|
||||||
request = self.client.get('/test_admin/admin/admin_views/customarticle/1/history/')
|
request = self.client.get('/test_admin/admin/admin_views/customarticle/1/history/')
|
||||||
self.assertTemplateUsed(request, 'custom_admin/object_history.html')
|
self.assertTemplateUsed(request, 'custom_admin/object_history.html')
|
||||||
|
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
|
|
||||||
def testCustomAdminSiteTemplates(self):
|
def testCustomAdminSiteTemplates(self):
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
self.assertEqual(admin.site.index_template, None)
|
self.assertEqual(admin.site.index_template, None)
|
||||||
self.assertEqual(admin.site.login_template, None)
|
self.assertEqual(admin.site.login_template, None)
|
||||||
|
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
request = self.client.get('/test_admin/admin/')
|
request = self.client.get('/test_admin/admin/')
|
||||||
self.assertTemplateUsed(request, 'admin/login.html')
|
self.assertTemplateUsed(request, 'admin/login.html')
|
||||||
self.client.post('/test_admin/admin/', self.changeuser_login)
|
self.client.post('/test_admin/admin/', self.changeuser_login)
|
||||||
request = self.client.get('/test_admin/admin/')
|
request = self.client.get('/test_admin/admin/')
|
||||||
self.assertTemplateUsed(request, 'admin/index.html')
|
self.assertTemplateUsed(request, 'admin/index.html')
|
||||||
|
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
admin.site.login_template = 'custom_admin/login.html'
|
admin.site.login_template = 'custom_admin/login.html'
|
||||||
admin.site.index_template = 'custom_admin/index.html'
|
admin.site.index_template = 'custom_admin/index.html'
|
||||||
|
@ -277,7 +280,7 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
request = self.client.get('/test_admin/admin/')
|
request = self.client.get('/test_admin/admin/')
|
||||||
self.assertTemplateUsed(request, 'custom_admin/index.html')
|
self.assertTemplateUsed(request, 'custom_admin/index.html')
|
||||||
self.assert_('Hello from a custom index template' in request.content)
|
self.assert_('Hello from a custom index template' in request.content)
|
||||||
|
|
||||||
# Finally, using monkey patching check we can inject custom_context arguments in to index
|
# Finally, using monkey patching check we can inject custom_context arguments in to index
|
||||||
original_index = admin.site.index
|
original_index = admin.site.index
|
||||||
def index(*args, **kwargs):
|
def index(*args, **kwargs):
|
||||||
|
@ -287,7 +290,7 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
request = self.client.get('/test_admin/admin/')
|
request = self.client.get('/test_admin/admin/')
|
||||||
self.assertTemplateUsed(request, 'custom_admin/index.html')
|
self.assertTemplateUsed(request, 'custom_admin/index.html')
|
||||||
self.assert_('Hello from a custom index template *bar*' in request.content)
|
self.assert_('Hello from a custom index template *bar*' in request.content)
|
||||||
|
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
del admin.site.index # Resets to using the original
|
del admin.site.index # Resets to using the original
|
||||||
admin.site.login_template = None
|
admin.site.login_template = None
|
||||||
|
@ -295,9 +298,9 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
|
|
||||||
def testDeleteView(self):
|
def testDeleteView(self):
|
||||||
"""Delete view should restrict access and actually delete items."""
|
"""Delete view should restrict access and actually delete items."""
|
||||||
|
|
||||||
delete_dict = {'post': 'yes'}
|
delete_dict = {'post': 'yes'}
|
||||||
|
|
||||||
# add user shoud not be able to delete articles
|
# add user shoud not be able to delete articles
|
||||||
self.client.get('/test_admin/admin/')
|
self.client.get('/test_admin/admin/')
|
||||||
self.client.post('/test_admin/admin/', self.adduser_login)
|
self.client.post('/test_admin/admin/', self.adduser_login)
|
||||||
|
@ -307,14 +310,14 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
self.failUnlessEqual(post.status_code, 403)
|
self.failUnlessEqual(post.status_code, 403)
|
||||||
self.failUnlessEqual(Article.objects.all().count(), 1)
|
self.failUnlessEqual(Article.objects.all().count(), 1)
|
||||||
self.client.get('/test_admin/admin/logout/')
|
self.client.get('/test_admin/admin/logout/')
|
||||||
|
|
||||||
# Delete user can delete
|
# Delete user can delete
|
||||||
self.client.get('/test_admin/admin/')
|
self.client.get('/test_admin/admin/')
|
||||||
self.client.post('/test_admin/admin/', self.deleteuser_login)
|
self.client.post('/test_admin/admin/', self.deleteuser_login)
|
||||||
response = self.client.get('/test_admin/admin/admin_views/section/1/delete/')
|
response = self.client.get('/test_admin/admin/admin_views/section/1/delete/')
|
||||||
# test response contains link to related Article
|
# test response contains link to related Article
|
||||||
self.assertContains(response, "admin_views/article/1/")
|
self.assertContains(response, "admin_views/article/1/")
|
||||||
|
|
||||||
response = self.client.get('/test_admin/admin/admin_views/article/1/delete/')
|
response = self.client.get('/test_admin/admin/admin_views/article/1/delete/')
|
||||||
self.failUnlessEqual(response.status_code, 200)
|
self.failUnlessEqual(response.status_code, 200)
|
||||||
post = self.client.post('/test_admin/admin/admin_views/article/1/delete/', delete_dict)
|
post = self.client.post('/test_admin/admin/admin_views/article/1/delete/', delete_dict)
|
||||||
|
@ -324,37 +327,37 @@ class AdminViewPermissionsTest(TestCase):
|
||||||
|
|
||||||
class AdminViewStringPrimaryKeyTest(TestCase):
|
class AdminViewStringPrimaryKeyTest(TestCase):
|
||||||
fixtures = ['admin-views-users.xml', 'string-primary-key.xml']
|
fixtures = ['admin-views-users.xml', 'string-primary-key.xml']
|
||||||
|
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
super(AdminViewStringPrimaryKeyTest, self).__init__(*args)
|
super(AdminViewStringPrimaryKeyTest, self).__init__(*args)
|
||||||
self.pk = """abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 -_.!~*'() ;/?:@&=+$, <>#%" {}|\^[]`"""
|
self.pk = """abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 -_.!~*'() ;/?:@&=+$, <>#%" {}|\^[]`"""
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.client.login(username='super', password='secret')
|
self.client.login(username='super', password='secret')
|
||||||
content_type_pk = ContentType.objects.get_for_model(ModelWithStringPrimaryKey).pk
|
content_type_pk = ContentType.objects.get_for_model(ModelWithStringPrimaryKey).pk
|
||||||
LogEntry.objects.log_action(100, content_type_pk, self.pk, self.pk, 2, change_message='')
|
LogEntry.objects.log_action(100, content_type_pk, self.pk, self.pk, 2, change_message='')
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.client.logout()
|
self.client.logout()
|
||||||
|
|
||||||
def test_get_change_view(self):
|
def test_get_change_view(self):
|
||||||
"Retrieving the object using urlencoded form of primary key should work"
|
"Retrieving the object using urlencoded form of primary key should work"
|
||||||
response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/' % quote(self.pk))
|
response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/' % quote(self.pk))
|
||||||
self.assertContains(response, escape(self.pk))
|
self.assertContains(response, escape(self.pk))
|
||||||
self.failUnlessEqual(response.status_code, 200)
|
self.failUnlessEqual(response.status_code, 200)
|
||||||
|
|
||||||
def test_changelist_to_changeform_link(self):
|
def test_changelist_to_changeform_link(self):
|
||||||
"The link from the changelist referring to the changeform of the object should be quoted"
|
"The link from the changelist referring to the changeform of the object should be quoted"
|
||||||
response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/')
|
response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/')
|
||||||
should_contain = """<tr class="row1"><th><a href="%s/">%s</a></th></tr>""" % (quote(self.pk), escape(self.pk))
|
should_contain = """<tr class="row1"><th><a href="%s/">%s</a></th></tr>""" % (quote(self.pk), escape(self.pk))
|
||||||
self.assertContains(response, should_contain)
|
self.assertContains(response, should_contain)
|
||||||
|
|
||||||
def test_recentactions_link(self):
|
def test_recentactions_link(self):
|
||||||
"The link from the recent actions list referring to the changeform of the object should be quoted"
|
"The link from the recent actions list referring to the changeform of the object should be quoted"
|
||||||
response = self.client.get('/test_admin/admin/')
|
response = self.client.get('/test_admin/admin/')
|
||||||
should_contain = """<a href="admin_views/modelwithstringprimarykey/%s/">%s</a>""" % (quote(self.pk), escape(self.pk))
|
should_contain = """<a href="admin_views/modelwithstringprimarykey/%s/">%s</a>""" % (quote(self.pk), escape(self.pk))
|
||||||
self.assertContains(response, should_contain)
|
self.assertContains(response, should_contain)
|
||||||
|
|
||||||
def test_deleteconfirmation_link(self):
|
def test_deleteconfirmation_link(self):
|
||||||
"The link from the delete confirmation page referring back to the changeform of the object should be quoted"
|
"The link from the delete confirmation page referring back to the changeform of the object should be quoted"
|
||||||
response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/delete/' % quote(self.pk))
|
response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/delete/' % quote(self.pk))
|
||||||
|
|
Loading…
Reference in New Issue