Improved and added more admin test cases
parent
ff4dadb83d
commit
a950049356
|
|
@ -49,7 +49,7 @@ class AdminTestCase(TestCase):
|
|||
# Make sure the URLs are reachable by reverse()
|
||||
clear_url_caches()
|
||||
set_urlconf(tuple([
|
||||
url('^', include(self.admin_site.urls))
|
||||
url('^tmp-admin/', include(self.admin_site.urls))
|
||||
]))
|
||||
|
||||
def get_admin_instance(self, model):
|
||||
|
|
@ -124,6 +124,9 @@ class AdminTestCase(TestCase):
|
|||
"""
|
||||
Make a direct "add" call to the admin page, circumvening login checks.
|
||||
"""
|
||||
if not extra:
|
||||
extra = {'data': {'post': 'yes'}}
|
||||
|
||||
admin_instance = self.get_admin_instance(model)
|
||||
request = self.create_admin_request('post', self.get_delete_url(model, object_id), **extra)
|
||||
response = admin_instance.delete_view(request, str(object_id))
|
||||
|
|
@ -157,26 +160,6 @@ class AdminTestCase(TestCase):
|
|||
MessageMiddleware().process_request(request)
|
||||
return request
|
||||
|
||||
def _get_management_form_data(self, admin_instance, request):
|
||||
"""
|
||||
Return the formdata that the management forms need.
|
||||
"""
|
||||
inline_instances = admin_instance.get_inline_instances(request)
|
||||
forms = []
|
||||
for inline_instance in inline_instances:
|
||||
FormSet = inline_instance.get_formset(request)
|
||||
formset = FormSet(instance=admin_instance.model())
|
||||
forms.append(formset.management_form)
|
||||
|
||||
# In a primitive way, get the form fields.
|
||||
# This is not exactly the same as a POST, since that runs through clean()
|
||||
formdata = {}
|
||||
for form in forms:
|
||||
for boundfield in form:
|
||||
formdata[boundfield.html_name] = boundfield.value()
|
||||
|
||||
return formdata
|
||||
|
||||
def assertFormSuccess(self, request_url, response):
|
||||
"""
|
||||
Assert that the response was a redirect, not a form error.
|
||||
|
|
|
|||
|
|
@ -1048,7 +1048,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='inlinemodela',
|
||||
name='parent',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tests.InlineParent'),
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tests.InlineParent', related_name='inline_children'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='inlinemodela',
|
||||
|
|
|
|||
|
|
@ -421,7 +421,7 @@ class InlineParent(models.Model):
|
|||
|
||||
|
||||
class InlineModelA(PolymorphicModel):
|
||||
parent = models.ForeignKey(InlineParent)
|
||||
parent = models.ForeignKey(InlineParent, related_name='inline_children')
|
||||
field1 = models.CharField(max_length=10)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
from django.contrib import admin
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.utils.html import escape
|
||||
|
||||
from polymorphic.admin import PolymorphicChildModelAdmin, PolymorphicChildModelFilter, PolymorphicInlineSupportMixin, \
|
||||
|
|
@ -37,6 +38,21 @@ class PolymorphicAdminTests(AdminTestCase):
|
|||
# See that the child object was returned
|
||||
response = self.admin_get_change(Model2A, d_obj.pk)
|
||||
self.assertContains(response, 'field4')
|
||||
self.admin_post_change(Model2A, d_obj.pk, {
|
||||
'field1': 'A2',
|
||||
'field2': 'B2',
|
||||
'field3': 'C2',
|
||||
'field4': 'D2'
|
||||
})
|
||||
|
||||
d_obj.refresh_from_db()
|
||||
self.assertEqual(d_obj.field1, 'A2')
|
||||
self.assertEqual(d_obj.field2, 'B2')
|
||||
self.assertEqual(d_obj.field3, 'C2')
|
||||
self.assertEqual(d_obj.field4, 'D2')
|
||||
|
||||
self.admin_post_delete(Model2A, d_obj.pk)
|
||||
self.assertRaises(Model2A.DoesNotExist, lambda: d_obj.refresh_from_db())
|
||||
|
||||
def test_admin_inlines(self):
|
||||
"""
|
||||
|
|
@ -59,10 +75,31 @@ class PolymorphicAdminTests(AdminTestCase):
|
|||
class InlineParentAdmin(PolymorphicInlineSupportMixin, admin.ModelAdmin):
|
||||
inlines = (Inline,)
|
||||
|
||||
obj = InlineParent.objects.create(title='FOO')
|
||||
response = self.admin_get_change(InlineParent, obj.pk)
|
||||
parent = InlineParent.objects.create(title='FOO')
|
||||
self.assertEqual(parent.inline_children.count(), 0)
|
||||
response = self.admin_get_change(InlineParent, parent.pk)
|
||||
|
||||
# Make sure the fieldset has the right data exposed in data-inline-formset
|
||||
self.assertContains(response, 'childTypes')
|
||||
self.assertContains(response, escape('"type": "inlinemodela"'))
|
||||
self.assertContains(response, escape('"type": "inlinemodelb"'))
|
||||
|
||||
self.admin_post_change(InlineParent, parent.pk, {
|
||||
'title': 'FOO2',
|
||||
'inline_children-INITIAL_FORMS': 0,
|
||||
'inline_children-TOTAL_FORMS': 1,
|
||||
'inline_children-MIN_NUM_FORMS': 0,
|
||||
'inline_children-MAX_NUM_FORMS': 1000,
|
||||
'inline_children-0-parent': parent.pk,
|
||||
'inline_children-0-polymorphic_ctype': ContentType.objects.get_for_model(InlineModelB).pk,
|
||||
'inline_children-0-field1': 'A2',
|
||||
'inline_children-0-field2': 'B2',
|
||||
})
|
||||
|
||||
parent.refresh_from_db()
|
||||
self.assertEqual(parent.title, 'FOO2')
|
||||
self.assertEqual(parent.inline_children.count(), 1)
|
||||
child = parent.inline_children.all()[0]
|
||||
self.assertEqual(child.__class__, InlineModelB)
|
||||
self.assertEqual(child.field1, 'A2')
|
||||
self.assertEqual(child.field2, 'B2')
|
||||
|
|
|
|||
Loading…
Reference in New Issue