Add admin history, add type, and add page tests

fix_request_path_info
Diederik van der Boor 2017-09-30 18:33:19 +02:00
parent a950049356
commit c795c18575
2 changed files with 64 additions and 5 deletions

View File

@ -76,16 +76,30 @@ class AdminTestCase(TestCase):
admin_instance = self.get_admin_instance(model) admin_instance = self.get_admin_instance(model)
return reverse(admin_urlname(admin_instance.opts, 'change'), args=(object_id,)) return reverse(admin_urlname(admin_instance.opts, 'change'), args=(object_id,))
def get_history_url(self, model, object_id):
admin_instance = self.get_admin_instance(model)
return reverse(admin_urlname(admin_instance.opts, 'history'), args=(object_id,))
def get_delete_url(self, model, object_id): def get_delete_url(self, model, object_id):
admin_instance = self.get_admin_instance(model) admin_instance = self.get_admin_instance(model)
return reverse(admin_urlname(admin_instance.opts, 'delete'), args=(object_id,)) return reverse(admin_urlname(admin_instance.opts, 'delete'), args=(object_id,))
def admin_post_add(self, model, formdata): def admin_get_add(self, model, qs=''):
""" """
Make a direct "add" call to the admin page, circumvening login checks. Make a direct "add" call to the admin page, circumvening login checks.
""" """
admin_instance = self.get_admin_instance(model) admin_instance = self.get_admin_instance(model)
request = self.create_admin_request('post', self.get_add_url(model), data=formdata) request = self.create_admin_request('get', self.get_add_url(model) + qs)
response = admin_instance.add_view(request)
self.assertEqual(response.status_code, 200)
return response
def admin_post_add(self, model, formdata, qs=''):
"""
Make a direct "add" call to the admin page, circumvening login checks.
"""
admin_instance = self.get_admin_instance(model)
request = self.create_admin_request('post', self.get_add_url(model) + qs, data=formdata)
response = admin_instance.add_view(request) response = admin_instance.add_view(request)
self.assertFormSuccess(request.path, response) self.assertFormSuccess(request.path, response)
return response return response
@ -120,6 +134,26 @@ class AdminTestCase(TestCase):
self.assertFormSuccess(request.path, response) self.assertFormSuccess(request.path, response)
return response return response
def admin_get_history(self, model, object_id, query=None, **extra):
"""
Perform a GET request on the admin page
"""
admin_instance = self.get_admin_instance(model)
request = self.create_admin_request('get', self.get_history_url(model, object_id), data=query, **extra)
response = admin_instance.history_view(request, str(object_id))
self.assertEqual(response.status_code, 200)
return response
def admin_get_delete(self, model, object_id, query=None, **extra):
"""
Perform a GET request on the admin delete page
"""
admin_instance = self.get_admin_instance(model)
request = self.create_admin_request('get', self.get_delete_url(model, object_id), data=query, **extra)
response = admin_instance.delete_view(request, str(object_id))
self.assertEqual(response.status_code, 200)
return response
def admin_post_delete(self, model, object_id, **extra): def admin_post_delete(self, model, object_id, **extra):
""" """
Make a direct "add" call to the admin page, circumvening login checks. Make a direct "add" call to the admin page, circumvening login checks.

View File

@ -31,11 +31,28 @@ class PolymorphicAdminTests(AdminTestCase):
}), }),
) )
# Now test which results are returned # -- add page
d_obj = Model2D.objects.create(field1='A', field2='B', field3='C', field4='D') ct_id = ContentType.objects.get_for_model(Model2D).pk
self.admin_get_add(Model2A) # shows type page
self.admin_get_add(Model2A, qs='?ct_id={}'.format(ct_id)) # shows type page
self.admin_get_add(Model2A) # shows type page
self.admin_post_add(Model2A, {
'field1': 'A',
'field2': 'B',
'field3': 'C',
'field4': 'D'
}, qs='?ct_id={}'.format(ct_id))
d_obj = Model2A.objects.all()[0]
self.assertEqual(d_obj.__class__, Model2D)
self.assertEqual(d_obj.field1, 'A')
self.assertEqual(d_obj.field2, 'B')
# -- list page
self.admin_get_changelist(Model2A) # asserts 200 self.admin_get_changelist(Model2A) # asserts 200
# See that the child object was returned # -- edit
response = self.admin_get_change(Model2A, d_obj.pk) response = self.admin_get_change(Model2A, d_obj.pk)
self.assertContains(response, 'field4') self.assertContains(response, 'field4')
self.admin_post_change(Model2A, d_obj.pk, { self.admin_post_change(Model2A, d_obj.pk, {
@ -51,6 +68,11 @@ class PolymorphicAdminTests(AdminTestCase):
self.assertEqual(d_obj.field3, 'C2') self.assertEqual(d_obj.field3, 'C2')
self.assertEqual(d_obj.field4, 'D2') self.assertEqual(d_obj.field4, 'D2')
# -- history
self.admin_get_history(Model2A, d_obj.pk)
# -- delete
self.admin_get_delete(Model2A, d_obj.pk)
self.admin_post_delete(Model2A, d_obj.pk) self.admin_post_delete(Model2A, d_obj.pk)
self.assertRaises(Model2A.DoesNotExist, lambda: d_obj.refresh_from_db()) self.assertRaises(Model2A.DoesNotExist, lambda: d_obj.refresh_from_db())
@ -77,6 +99,8 @@ class PolymorphicAdminTests(AdminTestCase):
parent = InlineParent.objects.create(title='FOO') parent = InlineParent.objects.create(title='FOO')
self.assertEqual(parent.inline_children.count(), 0) self.assertEqual(parent.inline_children.count(), 0)
# -- get edit page
response = self.admin_get_change(InlineParent, parent.pk) response = self.admin_get_change(InlineParent, parent.pk)
# Make sure the fieldset has the right data exposed in data-inline-formset # Make sure the fieldset has the right data exposed in data-inline-formset
@ -84,6 +108,7 @@ class PolymorphicAdminTests(AdminTestCase):
self.assertContains(response, escape('"type": "inlinemodela"')) self.assertContains(response, escape('"type": "inlinemodela"'))
self.assertContains(response, escape('"type": "inlinemodelb"')) self.assertContains(response, escape('"type": "inlinemodelb"'))
# -- post edit page
self.admin_post_change(InlineParent, parent.pk, { self.admin_post_change(InlineParent, parent.pk, {
'title': 'FOO2', 'title': 'FOO2',
'inline_children-INITIAL_FORMS': 0, 'inline_children-INITIAL_FORMS': 0,