summaryrefslogtreecommitdiff
path: root/tests/proxy_models
diff options
context:
space:
mode:
authorAnssi Kääriäinen <akaariai@gmail.com>2013-08-15 10:32:54 +0300
committerAnssi Kääriäinen <akaariai@gmail.com>2013-08-19 09:51:41 +0300
commit3844089edc43ff29aab5bac82a0eecab23d8d14a (patch)
treeb27b65195855152281a6e61d679f1d8e3958f01d /tests/proxy_models
parent4668c142dce77c6f29fb75532c1acfa1b2d322ff (diff)
downloaddjango-3844089edc43ff29aab5bac82a0eecab23d8d14a.tar.gz
Fixed #20777 -- Admin proxy model deletion regression
Added proxy_models tests by Harm Geerts <github@geertswei.nl>.
Diffstat (limited to 'tests/proxy_models')
-rw-r--r--tests/proxy_models/admin.py6
-rw-r--r--tests/proxy_models/fixtures/myhorses.json20
-rw-r--r--tests/proxy_models/models.py6
-rw-r--r--tests/proxy_models/tests.py27
-rw-r--r--tests/proxy_models/urls.py7
5 files changed, 64 insertions, 2 deletions
diff --git a/tests/proxy_models/admin.py b/tests/proxy_models/admin.py
new file mode 100644
index 0000000000..d2b6319301
--- /dev/null
+++ b/tests/proxy_models/admin.py
@@ -0,0 +1,6 @@
+from django.contrib import admin
+
+from .models import TrackerUser, ProxyTrackerUser
+
+admin.site.register(TrackerUser)
+admin.site.register(ProxyTrackerUser)
diff --git a/tests/proxy_models/fixtures/myhorses.json b/tests/proxy_models/fixtures/myhorses.json
index 15943064c8..97e190a8a2 100644
--- a/tests/proxy_models/fixtures/myhorses.json
+++ b/tests/proxy_models/fixtures/myhorses.json
@@ -1,6 +1,24 @@
[
{
"pk": 100,
+ "model": "auth.user",
+ "fields": {
+ "username": "super",
+ "first_name": "Super",
+ "last_name": "User",
+ "is_active": true,
+ "is_superuser": true,
+ "is_staff": true,
+ "last_login": "2007-05-30 13:20:10",
+ "groups": [],
+ "user_permissions": [],
+ "password": "sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158",
+ "email": "super@example.com",
+ "date_joined": "2007-05-30 13:20:10"
+ }
+ },
+ {
+ "pk": 100,
"model": "proxy_models.BaseUser",
"fields": {
"name": "Django Pony"
@@ -21,4 +39,4 @@
"assignee": 100
}
}
-] \ No newline at end of file
+]
diff --git a/tests/proxy_models/models.py b/tests/proxy_models/models.py
index ffb36657e1..2e5741ab6b 100644
--- a/tests/proxy_models/models.py
+++ b/tests/proxy_models/models.py
@@ -117,9 +117,13 @@ class StateProxy(State):
# Proxy models still works with filters (on related fields)
# and select_related, even when mixed with model inheritance
+@python_2_unicode_compatible
class BaseUser(models.Model):
name = models.CharField(max_length=255)
+ def __str__(self):
+ return ':'.join((self.__class__.__name__, self.name,))
+
class TrackerUser(BaseUser):
status = models.CharField(max_length=50)
@@ -134,7 +138,7 @@ class Issue(models.Model):
assignee = models.ForeignKey(TrackerUser)
def __str__(self):
- return ':'.join((self.__class__.__name__,self.summary,))
+ return ':'.join((self.__class__.__name__, self.summary,))
class Bug(Issue):
version = models.CharField(max_length=50)
diff --git a/tests/proxy_models/tests.py b/tests/proxy_models/tests.py
index 3598d65935..f0c0d046e1 100644
--- a/tests/proxy_models/tests.py
+++ b/tests/proxy_models/tests.py
@@ -10,12 +10,14 @@ from django.db import models, DEFAULT_DB_ALIAS
from django.db.models import signals
from django.db.models.loading import cache
from django.test import TestCase
+from django.test.utils import override_settings
from .models import (MyPerson, Person, StatusPerson, LowerStatusPerson,
MyPersonProxy, Abstract, OtherPerson, User, UserProxy, UserProxyProxy,
Country, State, StateProxy, TrackerUser, BaseUser, Bug, ProxyTrackerUser,
Improvement, ProxyProxyBug, ProxyBug, ProxyImprovement, Issue)
+from .admin import admin as force_admin_model_registration
class ProxyModelTests(TestCase):
@@ -366,8 +368,10 @@ class ProxyModelTests(TestCase):
self.assertEqual(MyPerson(id=100), Person(id=100))
+@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class ProxyModelAdminTests(TestCase):
fixtures = ['myhorses']
+ urls = 'proxy_models.urls'
def test_cascade_delete_proxy_model_admin_warning(self):
"""
@@ -383,3 +387,26 @@ class ProxyModelAdminTests(TestCase):
self.assertTrue(tracker_user in collector.edges.get(None, ()))
self.assertTrue(base_user in collector.edges.get(None, ()))
self.assertTrue(issue in collector.edges.get(tracker_user, ()))
+
+ def test_delete_str_in_model_admin(self):
+ """
+ Test if the admin delete page shows the correct string representation
+ for a proxy model.
+ """
+ user = TrackerUser.objects.get(name='Django Pony')
+ proxy = ProxyTrackerUser.objects.get(name='Django Pony')
+
+ user_str = (
+ 'Tracker user: <a href="/admin/proxy_models/trackeruser/%s/">%s</a>' % (user.pk, user))
+ proxy_str = (
+ 'Proxy tracker user: <a href="/admin/proxy_models/proxytrackeruser/%s/">%s</a>' %
+ (proxy.pk, proxy))
+
+ self.client.login(username='super', password='secret')
+ response = self.client.get('/admin/proxy_models/trackeruser/%s/delete/' % (user.pk,))
+ delete_str = response.context['deleted_objects'][0]
+ self.assertEqual(delete_str, user_str)
+ response = self.client.get('/admin/proxy_models/proxytrackeruser/%s/delete/' % (proxy.pk,))
+ delete_str = response.context['deleted_objects'][0]
+ self.assertEqual(delete_str, proxy_str)
+ self.client.logout()
diff --git a/tests/proxy_models/urls.py b/tests/proxy_models/urls.py
new file mode 100644
index 0000000000..644a34f556
--- /dev/null
+++ b/tests/proxy_models/urls.py
@@ -0,0 +1,7 @@
+from django.conf.urls import patterns, include
+
+from django.contrib import admin
+
+urlpatterns = patterns('',
+ (r'^admin/', include(admin.site.urls)),
+)