diff options
| author | Tim Graham <timograham@gmail.com> | 2018-08-30 05:22:50 -0400 |
|---|---|---|
| committer | Carlton Gibson <carlton.gibson@noumenal.es> | 2018-08-30 11:22:50 +0200 |
| commit | fd8a7a5313f5e223212085b2e470e43c0047e066 (patch) | |
| tree | 71940e4df385315ef7db3a156fcc660935538c02 /tests/modeladmin | |
| parent | 54b331451cb22ee354beadf31ee42cbd714877f0 (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.py | 46 |
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) |
