diff options
author | Anssi Kääriäinen <akaariai@gmail.com> | 2013-08-15 10:32:54 +0300 |
---|---|---|
committer | Anssi Kääriäinen <akaariai@gmail.com> | 2013-08-19 09:51:41 +0300 |
commit | 3844089edc43ff29aab5bac82a0eecab23d8d14a (patch) | |
tree | b27b65195855152281a6e61d679f1d8e3958f01d /tests/proxy_models | |
parent | 4668c142dce77c6f29fb75532c1acfa1b2d322ff (diff) | |
download | django-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.py | 6 | ||||
-rw-r--r-- | tests/proxy_models/fixtures/myhorses.json | 20 | ||||
-rw-r--r-- | tests/proxy_models/models.py | 6 | ||||
-rw-r--r-- | tests/proxy_models/tests.py | 27 | ||||
-rw-r--r-- | tests/proxy_models/urls.py | 7 |
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)), +) |