summaryrefslogtreecommitdiff
path: root/tests/admin_inlines
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/admin_inlines
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/admin_inlines')
-rw-r--r--tests/admin_inlines/tests.py62
1 files changed, 60 insertions, 2 deletions
diff --git a/tests/admin_inlines/tests.py b/tests/admin_inlines/tests.py
index ff34180a5b..7025158aab 100644
--- a/tests/admin_inlines/tests.py
+++ b/tests/admin_inlines/tests.py
@@ -1,13 +1,14 @@
from __future__ import unicode_literals
+from django.contrib.admin import TabularInline, ModelAdmin
from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase
from django.contrib.admin.helpers import InlineAdminForm
from django.contrib.auth.models import User, Permission
from django.contrib.contenttypes.models import ContentType
-from django.test import TestCase, override_settings
+from django.test import TestCase, override_settings, RequestFactory
# local test models
-from .admin import InnerInline
+from .admin import InnerInline, site as admin_site
from .models import (Holder, Inner, Holder2, Inner2, Holder3, Inner3, Person,
OutfitItem, Fashionista, Teacher, Parent, Child, Author, Book, Profile,
ProfileCollection, ParentModelWithCustomPk, ChildModel1, ChildModel2,
@@ -28,6 +29,7 @@ class TestInline(TestCase):
result = self.client.login(username='super', password='secret')
self.assertEqual(result, True)
+ self.factory = RequestFactory()
def tearDown(self):
self.client.logout()
@@ -221,6 +223,62 @@ class TestInline(TestCase):
self.assertContains(response, max_forms_input % 2)
self.assertContains(response, total_forms_hidden)
+ def test_min_num(self):
+ """
+ Ensure that min_num and extra determine number of forms.
+ """
+ class MinNumInline(TabularInline):
+ model = BinaryTree
+ min_num = 2
+ extra = 3
+
+ modeladmin = ModelAdmin(BinaryTree, admin_site)
+ modeladmin.inlines = [MinNumInline]
+
+ min_forms = '<input id="id_binarytree_set-MIN_NUM_FORMS" name="binarytree_set-MIN_NUM_FORMS" type="hidden" value="2" />'
+ total_forms = '<input id="id_binarytree_set-TOTAL_FORMS" name="binarytree_set-TOTAL_FORMS" type="hidden" value="5" />'
+
+ request = self.factory.get('/admin/admin_inlines/binarytree/add/')
+ request.user = User(username='super', is_superuser=True)
+ response = modeladmin.changeform_view(request)
+ self.assertContains(response, min_forms)
+ self.assertContains(response, total_forms)
+
+ def test_custom_min_num(self):
+ """
+ Ensure that get_min_num is called and used correctly.
+ See #22628 - this will change when that's fixed.
+ """
+ bt_head = BinaryTree.objects.create(name="Tree Head")
+ BinaryTree.objects.create(name="First Child", parent=bt_head)
+
+ class MinNumInline(TabularInline):
+ model = BinaryTree
+ extra = 3
+
+ def get_min_num(self, request, obj=None, **kwargs):
+ if obj:
+ return 5
+ return 2
+
+ modeladmin = ModelAdmin(BinaryTree, admin_site)
+ modeladmin.inlines = [MinNumInline]
+
+ min_forms = '<input id="id_binarytree_set-MIN_NUM_FORMS" name="binarytree_set-MIN_NUM_FORMS" type="hidden" value="%d" />'
+ total_forms = '<input id="id_binarytree_set-TOTAL_FORMS" name="binarytree_set-TOTAL_FORMS" type="hidden" value="%d" />'
+
+ request = self.factory.get('/admin/admin_inlines/binarytree/add/')
+ request.user = User(username='super', is_superuser=True)
+ response = modeladmin.changeform_view(request)
+ self.assertContains(response, min_forms % 2)
+ self.assertContains(response, total_forms % 5)
+
+ request = self.factory.get("/admin/admin_inlines/binarytree/%d/" % bt_head.id)
+ request.user = User(username='super', is_superuser=True)
+ response = modeladmin.changeform_view(request, object_id=str(bt_head.id))
+ self.assertContains(response, min_forms % 5)
+ self.assertContains(response, total_forms % 9)
+
def test_inline_nonauto_noneditable_pk(self):
response = self.client.get('/admin/admin_inlines/author/add/')
self.assertContains(response,