summaryrefslogtreecommitdiff
path: root/tests/modeladmin
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2018-08-30 05:22:50 -0400
committerCarlton Gibson <carlton.gibson@noumenal.es>2018-08-30 11:22:50 +0200
commitfd8a7a5313f5e223212085b2e470e43c0047e066 (patch)
tree71940e4df385315ef7db3a156fcc660935538c02 /tests/modeladmin
parent54b331451cb22ee354beadf31ee42cbd714877f0 (diff)
Fixed #29723 -- Fixed crash if InlineModelAdmin.has_add_permission() doesn't accept the obj argument.
* Refs #27991 -- Added testing for ModelAdmin.get_inline_instances() if the inline's has_add_permission() doesn't accept 'obj'. * Fixed #29723 -- Fixed crash if InlineModelAdmin.has_add_permission() doesn't accept the obj argument.
Diffstat (limited to 'tests/modeladmin')
-rw-r--r--tests/modeladmin/test_has_add_permission_obj_deprecation.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/modeladmin/test_has_add_permission_obj_deprecation.py b/tests/modeladmin/test_has_add_permission_obj_deprecation.py
index 18448e94d7..f5489a41db 100644
--- a/tests/modeladmin/test_has_add_permission_obj_deprecation.py
+++ b/tests/modeladmin/test_has_add_permission_obj_deprecation.py
@@ -1,4 +1,8 @@
+from datetime import date
+
from django.contrib.admin.options import ModelAdmin, TabularInline
+from django.contrib.admin.sites import AdminSite
+from django.test import TestCase
from django.utils.deprecation import RemovedInDjango30Warning
from .models import Band, Song
@@ -56,3 +60,45 @@ class HasAddPermissionObjTests(CheckTestCase):
)
with self.assertWarnsMessage(RemovedInDjango30Warning, msg):
self.assertIsValid(BandAdmin, Band)
+
+
+class MockRequest:
+ method = 'POST'
+ FILES = {}
+ POST = {}
+
+
+class SongInline(TabularInline):
+ model = Song
+
+ def has_add_permission(self, request):
+ return True
+
+
+class BandAdmin(ModelAdmin):
+ inlines = [SongInline]
+
+
+class ModelAdminTests(TestCase):
+
+ def setUp(self):
+ self.band = Band.objects.create(name='The Doors', bio='', sign_date=date(1965, 1, 1))
+ self.song = Song.objects.create(name='test', band=self.band)
+ self.site = AdminSite()
+ self.request = MockRequest()
+ self.request.user = self.MockAddUser()
+ self.ma = BandAdmin(Band, self.site)
+
+ class MockAddUser:
+ def has_perm(self, perm):
+ return perm == 'modeladmin.add_band'
+
+ def test_get_inline_instances(self):
+ self.assertEqual(len(self.ma.get_inline_instances(self.request)), 1)
+
+ def test_get_inline_formsets(self):
+ formsets, inline_instances = self.ma._create_formsets(self.request, self.band, change=True)
+ self.assertEqual(len(self.ma.get_inline_formsets(self.request, formsets, inline_instances)), 1)
+
+ def test_get_formsets_with_inlines(self):
+ self.assertEqual(len(list(self.ma. get_formsets_with_inlines(self.request, self.band))), 1)