summaryrefslogtreecommitdiff
path: root/tests/generic_inline_admin
diff options
context:
space:
mode:
authorAnders Steinlein <anders@e5r.no>2014-03-05 21:19:40 +0100
committerTim Graham <timograham@gmail.com>2014-05-15 07:25:35 -0400
commit4ef10f245ada0c7d5ae8dc31eebffa63790d40fb (patch)
treedffd7ca06862fa20b5fa0b4528ac8beeecaee9fa /tests/generic_inline_admin
parent860d31ac7a3bdd4b27db8b34b110b3d801ddaf8a (diff)
downloaddjango-4ef10f245ada0c7d5ae8dc31eebffa63790d40fb.tar.gz
Fixed #17642 -- Added min_num support to modelformsets, inlines, and the admin.
Thanks Stephen Burrows for work on the patch as well. Forwardport of 2914f66983a92fcae55673c517dd8d01e8c238c4 from stable/1.7.x
Diffstat (limited to 'tests/generic_inline_admin')
-rw-r--r--tests/generic_inline_admin/admin.py17
-rw-r--r--tests/generic_inline_admin/models.py20
-rw-r--r--tests/generic_inline_admin/tests.py61
3 files changed, 53 insertions, 45 deletions
diff --git a/tests/generic_inline_admin/admin.py b/tests/generic_inline_admin/admin.py
index d0ce4c70ef..46f6cf3e7f 100644
--- a/tests/generic_inline_admin/admin.py
+++ b/tests/generic_inline_admin/admin.py
@@ -1,8 +1,8 @@
from django.contrib import admin
from django.contrib.contenttypes.admin import GenericTabularInline
-from .models import (Media, PhoneNumber, Episode, EpisodeExtra, Contact,
- Category, EpisodePermanent, EpisodeMaxNum)
+from .models import (Media, PhoneNumber, Episode, Contact,
+ Category, EpisodePermanent)
site = admin.AdminSite(name="admin")
@@ -18,17 +18,6 @@ class EpisodeAdmin(admin.ModelAdmin):
]
-class MediaExtraInline(GenericTabularInline):
- model = Media
- extra = 0
-
-
-class MediaMaxNumInline(GenericTabularInline):
- model = Media
- extra = 5
- max_num = 2
-
-
class PhoneNumberInline(GenericTabularInline):
model = PhoneNumber
@@ -39,8 +28,6 @@ class MediaPermanentInline(GenericTabularInline):
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])
diff --git a/tests/generic_inline_admin/models.py b/tests/generic_inline_admin/models.py
index 0ae3c4b052..059aadc5ba 100644
--- a/tests/generic_inline_admin/models.py
+++ b/tests/generic_inline_admin/models.py
@@ -27,26 +27,6 @@ class Media(models.Model):
def __str__(self):
return self.url
-#
-# These models let us test the different GenericInline settings at
-# different urls in the admin site.
-#
-
-#
-# Generic inline with extra = 0
-#
-
-
-class EpisodeExtra(Episode):
- pass
-
-
-#
-# Generic inline with extra and max_num
-#
-class EpisodeMaxNum(Episode):
- pass
-
#
# Generic inline with unique_together
diff --git a/tests/generic_inline_admin/tests.py b/tests/generic_inline_admin/tests.py
index 30513041d6..ed2411ffdf 100644
--- a/tests/generic_inline_admin/tests.py
+++ b/tests/generic_inline_admin/tests.py
@@ -4,17 +4,17 @@ import warnings
from django.contrib import admin
from django.contrib.admin.sites import AdminSite
+from django.contrib.auth.models import User
from django.contrib.contenttypes.admin import GenericTabularInline
from django.contrib.contenttypes.forms import generic_inlineformset_factory
from django.forms.formsets import DEFAULT_MAX_NUM
from django.forms.models import ModelForm
-from django.test import TestCase, override_settings
+from django.test import TestCase, override_settings, RequestFactory
from django.utils.deprecation import RemovedInDjango19Warning
# local test models
-from .admin import MediaInline, MediaPermanentInline
-from .models import (Episode, EpisodeExtra, EpisodeMaxNum, Media,
- EpisodePermanent, Category)
+from .admin import MediaInline, MediaPermanentInline, site as admin_site
+from .models import Episode, Media, EpisodePermanent, Category
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',),
@@ -137,6 +137,7 @@ class GenericInlineAdminParametersTest(TestCase):
def setUp(self):
self.client.login(username='super', password='secret')
+ self.factory = RequestFactory()
def tearDown(self):
self.client.logout()
@@ -166,9 +167,18 @@ class GenericInlineAdminParametersTest(TestCase):
"""
With extra=0, there should be one form.
"""
- e = self._create_object(EpisodeExtra)
- response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episodeextra/%s/' % e.pk)
- formset = response.context['inline_admin_formsets'][0].formset
+ class ExtraInline(GenericTabularInline):
+ model = Media
+ extra = 0
+
+ modeladmin = admin.ModelAdmin(Episode, admin_site)
+ modeladmin.inlines = [ExtraInline]
+
+ e = self._create_object(Episode)
+ request = self.factory.get('/generic_inline_admin/admin/generic_inline_admin/episode/%s/' % e.pk)
+ request.user = User(username='super', is_superuser=True)
+ response = modeladmin.changeform_view(request, object_id=str(e.pk))
+ formset = response.context_data['inline_admin_formsets'][0].formset
self.assertEqual(formset.total_form_count(), 1)
self.assertEqual(formset.initial_form_count(), 1)
@@ -176,12 +186,43 @@ class GenericInlineAdminParametersTest(TestCase):
"""
With extra=5 and max_num=2, there should be only 2 forms.
"""
- e = self._create_object(EpisodeMaxNum)
- response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episodemaxnum/%s/' % e.pk)
- formset = response.context['inline_admin_formsets'][0].formset
+ class MaxNumInline(GenericTabularInline):
+ model = Media
+ extra = 5
+ max_num = 2
+
+ modeladmin = admin.ModelAdmin(Episode, admin_site)
+ modeladmin.inlines = [MaxNumInline]
+
+ e = self._create_object(Episode)
+ request = self.factory.get('/generic_inline_admin/admin/generic_inline_admin/episode/%s/' % e.pk)
+ request.user = User(username='super', is_superuser=True)
+ response = modeladmin.changeform_view(request, object_id=str(e.pk))
+ formset = response.context_data['inline_admin_formsets'][0].formset
self.assertEqual(formset.total_form_count(), 2)
self.assertEqual(formset.initial_form_count(), 1)
+ def testMinNumParam(self):
+ """
+ With extra=3 and min_num=2, there should be six forms.
+ See #22628 - this will change when that's fixed.
+ """
+ class MinNumInline(GenericTabularInline):
+ model = Media
+ extra = 3
+ min_num = 2
+
+ modeladmin = admin.ModelAdmin(Episode, admin_site)
+ modeladmin.inlines = [MinNumInline]
+
+ e = self._create_object(Episode)
+ request = self.factory.get('/generic_inline_admin/admin/generic_inline_admin/episode/%s/' % e.pk)
+ request.user = User(username='super', is_superuser=True)
+ response = modeladmin.changeform_view(request, object_id=str(e.pk))
+ formset = response.context_data['inline_admin_formsets'][0].formset
+ self.assertEqual(formset.total_form_count(), 6)
+ self.assertEqual(formset.initial_form_count(), 1)
+
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',),
ROOT_URLCONF="generic_inline_admin.urls")