From c795c185754002435e0ef98dc2233d4c7b054c06 Mon Sep 17 00:00:00 2001 From: Diederik van der Boor Date: Sat, 30 Sep 2017 18:33:19 +0200 Subject: [PATCH] Add admin history, add type, and add page tests --- polymorphic/tests/admintestcase.py | 38 ++++++++++++++++++++++++++++-- polymorphic/tests/test_admin.py | 31 +++++++++++++++++++++--- 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/polymorphic/tests/admintestcase.py b/polymorphic/tests/admintestcase.py index 78d7a0d..fb2e560 100644 --- a/polymorphic/tests/admintestcase.py +++ b/polymorphic/tests/admintestcase.py @@ -76,16 +76,30 @@ class AdminTestCase(TestCase): admin_instance = self.get_admin_instance(model) 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): admin_instance = self.get_admin_instance(model) 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. """ 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) self.assertFormSuccess(request.path, response) return response @@ -120,6 +134,26 @@ class AdminTestCase(TestCase): self.assertFormSuccess(request.path, 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): """ Make a direct "add" call to the admin page, circumvening login checks. diff --git a/polymorphic/tests/test_admin.py b/polymorphic/tests/test_admin.py index b71d90d..00ffd67 100644 --- a/polymorphic/tests/test_admin.py +++ b/polymorphic/tests/test_admin.py @@ -31,11 +31,28 @@ class PolymorphicAdminTests(AdminTestCase): }), ) - # Now test which results are returned - d_obj = Model2D.objects.create(field1='A', field2='B', field3='C', field4='D') + # -- add page + 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 - # See that the child object was returned + # -- edit response = self.admin_get_change(Model2A, d_obj.pk) self.assertContains(response, 'field4') 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.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.assertRaises(Model2A.DoesNotExist, lambda: d_obj.refresh_from_db()) @@ -77,6 +99,8 @@ class PolymorphicAdminTests(AdminTestCase): parent = InlineParent.objects.create(title='FOO') self.assertEqual(parent.inline_children.count(), 0) + + # -- get edit page response = self.admin_get_change(InlineParent, parent.pk) # 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": "inlinemodelb"')) + # -- post edit page self.admin_post_change(InlineParent, parent.pk, { 'title': 'FOO2', 'inline_children-INITIAL_FORMS': 0,