diff options
Diffstat (limited to 'tests/admin_registration/tests.py')
-rw-r--r-- | tests/admin_registration/tests.py | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/tests/admin_registration/tests.py b/tests/admin_registration/tests.py index 0e444fd2af..994de3bdf7 100644 --- a/tests/admin_registration/tests.py +++ b/tests/admin_registration/tests.py @@ -1,16 +1,23 @@ from __future__ import unicode_literals from django.contrib import admin +from django.contrib.admin.decorators import register +from django.contrib.admin.sites import site from django.core.exceptions import ImproperlyConfigured from django.test import TestCase -from .models import Person, Place, Location +from .models import Person, Place, Location, Traveler class NameAdmin(admin.ModelAdmin): list_display = ['name'] save_on_top = True + +class CustomSite(admin.AdminSite): + pass + + class TestRegistration(TestCase): def setUp(self): self.site = admin.AdminSite() @@ -62,3 +69,55 @@ class TestRegistration(TestCase): Refs #12004. """ self.assertRaises(ImproperlyConfigured, self.site.register, Location) + + +class TestRegistrationDecorator(TestCase): + """ + Tests the register decorator in admin.decorators + + For clarity: + + @register(Person) + class AuthorAdmin(ModelAdmin): + pass + + is functionally equal to (the way it is written in these tests): + + AuthorAdmin = register(Person)(AuthorAdmin) + """ + def setUp(self): + self.default_site = site + self.custom_site = CustomSite() + + def test_basic_registration(self): + register(Person)(NameAdmin) + self.assertTrue( + isinstance(self.default_site._registry[Person], + admin.options.ModelAdmin) + ) + + def test_custom_site_registration(self): + register(Person, site=self.custom_site)(NameAdmin) + self.assertTrue( + isinstance(self.custom_site._registry[Person], + admin.options.ModelAdmin) + ) + + def test_multiple_registration(self): + register(Traveler, Place)(NameAdmin) + self.assertTrue( + isinstance(self.default_site._registry[Traveler], + admin.options.ModelAdmin) + ) + self.assertTrue( + isinstance(self.default_site._registry[Place], + admin.options.ModelAdmin) + ) + + def test_wrapped_class_not_a_model_admin(self): + self.assertRaisesMessage(ValueError, 'Wrapped class must sublcass ModelAdmin.', + register(Person), CustomSite) + + def test_custom_site_not_an_admin_site(self): + self.assertRaisesMessage(ValueError, 'site must subclass AdminSite', + register(Person, site=Traveler), NameAdmin) |