mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Improved test isolation of the admin tests and assigned custom admin sites to
prevent test order dependant failures. This involves introducing usage of `TestCase.urls` and implementing proper admin.py modules for some of the test apps. Thanks Florian Apolloner for finding the issue and contributing the patch. Refs #15294 (it solves these problems so the fix for that ticket we are going to commit doesn't introduce obscure and hard to reproduce test failures when running the Django test suite.) git-svn-id: http://code.djangoproject.com/svn/django/trunk@16856 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
44
tests/regressiontests/generic_inline_admin/admin.py
Normal file
44
tests/regressiontests/generic_inline_admin/admin.py
Normal file
@@ -0,0 +1,44 @@
|
||||
from django.contrib import admin
|
||||
from django.contrib.contenttypes import generic
|
||||
|
||||
from models import (Media, PhoneNumber, Episode, EpisodeExtra, Contact,
|
||||
Category, EpisodePermanent, EpisodeMaxNum)
|
||||
|
||||
site = admin.AdminSite(name="admin")
|
||||
|
||||
class MediaInline(generic.GenericTabularInline):
|
||||
model = Media
|
||||
|
||||
|
||||
class EpisodeAdmin(admin.ModelAdmin):
|
||||
inlines = [
|
||||
MediaInline,
|
||||
]
|
||||
|
||||
|
||||
class MediaExtraInline(generic.GenericTabularInline):
|
||||
model = Media
|
||||
extra = 0
|
||||
|
||||
|
||||
class MediaMaxNumInline(generic.GenericTabularInline):
|
||||
model = Media
|
||||
extra = 5
|
||||
max_num = 2
|
||||
|
||||
|
||||
class PhoneNumberInline(generic.GenericTabularInline):
|
||||
model = PhoneNumber
|
||||
|
||||
|
||||
class MediaPermanentInline(generic.GenericTabularInline):
|
||||
model = Media
|
||||
can_delete = False
|
||||
|
||||
|
||||
site.register(Episode, EpisodeAdmin)
|
||||
site.register(EpisodeExtra, inlines=[MediaExtraInline])
|
||||
site.register(EpisodeMaxNum, inlines=[MediaMaxNumInline])
|
||||
site.register(Contact, inlines=[PhoneNumberInline])
|
||||
site.register(Category)
|
||||
site.register(EpisodePermanent, inlines=[MediaPermanentInline])
|
||||
@@ -1,13 +1,14 @@
|
||||
from django.db import models
|
||||
from django.contrib import admin
|
||||
from django.contrib.contenttypes import generic
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
||||
|
||||
class Episode(models.Model):
|
||||
name = models.CharField(max_length=100)
|
||||
length = models.CharField(max_length=100, blank=True)
|
||||
author = models.CharField(max_length=100, blank=True)
|
||||
|
||||
|
||||
class Media(models.Model):
|
||||
"""
|
||||
Media that can associated to any object.
|
||||
@@ -22,15 +23,6 @@ class Media(models.Model):
|
||||
def __unicode__(self):
|
||||
return self.url
|
||||
|
||||
class MediaInline(generic.GenericTabularInline):
|
||||
model = Media
|
||||
|
||||
class EpisodeAdmin(admin.ModelAdmin):
|
||||
inlines = [
|
||||
MediaInline,
|
||||
]
|
||||
admin.site.register(Episode, EpisodeAdmin)
|
||||
|
||||
#
|
||||
# These models let us test the different GenericInline settings at
|
||||
# different urls in the admin site.
|
||||
@@ -43,34 +35,21 @@ admin.site.register(Episode, EpisodeAdmin)
|
||||
class EpisodeExtra(Episode):
|
||||
pass
|
||||
|
||||
class MediaExtraInline(generic.GenericTabularInline):
|
||||
model = Media
|
||||
extra = 0
|
||||
|
||||
admin.site.register(EpisodeExtra, inlines=[MediaExtraInline])
|
||||
|
||||
#
|
||||
# Generic inline with extra and max_num
|
||||
#
|
||||
|
||||
class EpisodeMaxNum(Episode):
|
||||
pass
|
||||
|
||||
class MediaMaxNumInline(generic.GenericTabularInline):
|
||||
model = Media
|
||||
extra = 5
|
||||
max_num = 2
|
||||
|
||||
admin.site.register(EpisodeMaxNum, inlines=[MediaMaxNumInline])
|
||||
|
||||
|
||||
#
|
||||
# Generic inline with unique_together
|
||||
#
|
||||
|
||||
class Category(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
|
||||
|
||||
class PhoneNumber(models.Model):
|
||||
content_type = models.ForeignKey(ContentType)
|
||||
object_id = models.PositiveIntegerField()
|
||||
@@ -81,25 +60,15 @@ class PhoneNumber(models.Model):
|
||||
class Meta:
|
||||
unique_together = (('content_type', 'object_id', 'phone_number',),)
|
||||
|
||||
|
||||
class Contact(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
phone_numbers = generic.GenericRelation(PhoneNumber)
|
||||
|
||||
class PhoneNumberInline(generic.GenericTabularInline):
|
||||
model = PhoneNumber
|
||||
|
||||
admin.site.register(Contact, inlines=[PhoneNumberInline])
|
||||
admin.site.register(Category)
|
||||
|
||||
#
|
||||
# Generic inline with can_delete=False
|
||||
#
|
||||
|
||||
class EpisodePermanent(Episode):
|
||||
pass
|
||||
|
||||
class MediaPermanentInline(generic.GenericTabularInline):
|
||||
model = Media
|
||||
can_delete = False
|
||||
|
||||
admin.site.register(EpisodePermanent, inlines=[MediaPermanentInline])
|
||||
|
||||
@@ -10,10 +10,12 @@ from django.test import TestCase
|
||||
|
||||
# local test models
|
||||
from models import (Episode, EpisodeExtra, EpisodeMaxNum, Media,
|
||||
MediaInline, EpisodePermanent, MediaPermanentInline, Category)
|
||||
EpisodePermanent, Category)
|
||||
from admin import MediaInline, MediaPermanentInline
|
||||
|
||||
|
||||
class GenericAdminViewTest(TestCase):
|
||||
urls = "regressiontests.generic_inline_admin.urls"
|
||||
fixtures = ['users.xml']
|
||||
|
||||
def setUp(self):
|
||||
@@ -125,6 +127,7 @@ class GenericAdminViewTest(TestCase):
|
||||
self.assertTrue(formset.get_queryset().ordered)
|
||||
|
||||
class GenericInlineAdminParametersTest(TestCase):
|
||||
urls = "regressiontests.generic_inline_admin.urls"
|
||||
fixtures = ['users.xml']
|
||||
|
||||
def setUp(self):
|
||||
@@ -177,6 +180,7 @@ class GenericInlineAdminParametersTest(TestCase):
|
||||
|
||||
|
||||
class GenericInlineAdminWithUniqueTogetherTest(TestCase):
|
||||
urls = "regressiontests.generic_inline_admin.urls"
|
||||
fixtures = ['users.xml']
|
||||
|
||||
def setUp(self):
|
||||
@@ -203,6 +207,8 @@ class GenericInlineAdminWithUniqueTogetherTest(TestCase):
|
||||
self.assertEqual(response.status_code, 302) # redirect somewhere
|
||||
|
||||
class NoInlineDeletionTest(TestCase):
|
||||
urls = "regressiontests.generic_inline_admin.urls"
|
||||
|
||||
def test_no_deletion(self):
|
||||
fake_site = object()
|
||||
inline = MediaPermanentInline(EpisodePermanent, fake_site)
|
||||
@@ -211,6 +217,7 @@ class NoInlineDeletionTest(TestCase):
|
||||
self.assertFalse(formset.can_delete)
|
||||
|
||||
class GenericInlineModelAdminTest(TestCase):
|
||||
urls = "regressiontests.generic_inline_admin.urls"
|
||||
|
||||
def setUp(self):
|
||||
self.site = AdminSite()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from django.conf.urls import patterns, include
|
||||
from django.contrib import admin
|
||||
|
||||
import admin
|
||||
|
||||
urlpatterns = patterns('',
|
||||
(r'^admin/', include(admin.site.urls)),
|
||||
(r'^generic_inline_admin/admin/', include(admin.site.urls)),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user