From 98514849dce07acfaa224a90a784bba9d97249e5 Mon Sep 17 00:00:00 2001 From: Brian Holdefehr Date: Mon, 17 Dec 2012 19:04:10 -0500 Subject: Fixed #19414 -- Added admin registration decorator Thanks stavros for the suggestion. --- tests/admin_registration/models.py | 6 ++++ tests/admin_registration/tests.py | 61 +++++++++++++++++++++++++++++++++++++- 2 files changed, 66 insertions(+), 1 deletion(-) (limited to 'tests/admin_registration') diff --git a/tests/admin_registration/models.py b/tests/admin_registration/models.py index c6f42fd1f4..0ae9251133 100644 --- a/tests/admin_registration/models.py +++ b/tests/admin_registration/models.py @@ -8,9 +8,15 @@ from django.db import models class Person(models.Model): name = models.CharField(max_length=200) + +class Traveler(Person): + pass + + class Location(models.Model): class Meta: abstract = True + class Place(Location): name = models.CharField(max_length=200) 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) -- cgit v1.2.1