diff options
Diffstat (limited to 'tests/admin_inlines/tests.py')
| -rw-r--r-- | tests/admin_inlines/tests.py | 90 |
1 files changed, 47 insertions, 43 deletions
diff --git a/tests/admin_inlines/tests.py b/tests/admin_inlines/tests.py index 78889be30e..bad1508948 100644 --- a/tests/admin_inlines/tests.py +++ b/tests/admin_inlines/tests.py @@ -7,6 +7,7 @@ from django.contrib.admin.helpers import InlineAdminForm from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase from django.contrib.auth.models import Permission, User from django.contrib.contenttypes.models import ContentType +from django.core.urlresolvers import reverse from django.test import RequestFactory, TestCase, override_settings from django.utils.encoding import force_text @@ -31,7 +32,6 @@ class TestInline(TestCase): holder = Holder(dummy=13) holder.save() Inner(dummy=42, holder=holder).save() - self.change_url = '/admin/admin_inlines/holder/%i/' % holder.id result = self.client.login(username='super', password='secret') self.assertEqual(result, True) @@ -41,7 +41,10 @@ class TestInline(TestCase): """ can_delete should be passed to inlineformset factory. """ - response = self.client.get(self.change_url) + holder = Holder.objects.get(dummy=13) + response = self.client.get( + reverse('admin:admin_inlines_holder_change', args=(holder.id,)) + ) inner_formset = response.context['inline_admin_formsets'][0].formset expected = InnerInline.can_delete actual = inner_formset.can_delete @@ -51,13 +54,14 @@ class TestInline(TestCase): """Bug #13174.""" holder = Holder.objects.create(dummy=42) Inner.objects.create(holder=holder, dummy=42, readonly='') - response = self.client.get('/admin/admin_inlines/holder/%i/' - % holder.id) + response = self.client.get( + reverse('admin:admin_inlines_holder_change', args=(holder.id,)) + ) self.assertContains(response, '<label>Inner readonly label:</label>') def test_many_to_many_inlines(self): "Autogenerated many-to-many inlines are displayed correctly (#13407)" - response = self.client.get('/admin/admin_inlines/author/add/') + response = self.client.get(reverse('admin:admin_inlines_author_add')) # The heading for the m2m inline block uses the right text self.assertContains(response, '<h2>Author-book relationships</h2>') # The "add another" label is correct @@ -78,7 +82,7 @@ class TestInline(TestCase): 'max_weight': 0, 'shoppingweakness_set-0-item': item.id, } - response = self.client.post('/admin/admin_inlines/fashionista/add/', data) + response = self.client.post(reverse('admin:admin_inlines_fashionista_add'), data) self.assertEqual(response.status_code, 302) self.assertEqual(len(Fashionista.objects.filter(person__firstname='Imelda')), 1) @@ -95,7 +99,7 @@ class TestInline(TestCase): 'title_set-0-title1': 'a title', 'title_set-0-title2': 'a different title', } - response = self.client.post('/admin/admin_inlines/titlecollection/add/', data) + response = self.client.post(reverse('admin:admin_inlines_titlecollection_add'), data) # Here colspan is "4": two fields (title1 and title2), one hidden field and the delete checkbox. self.assertContains(response, '<tr><td colspan="4"><ul class="errorlist nonfield"><li>The two titles must be the same</li></ul></td></tr>') @@ -103,14 +107,14 @@ class TestInline(TestCase): """Admin inline `readonly_field` shouldn't invoke parent ModelAdmin callable""" # Identically named callable isn't present in the parent ModelAdmin, # rendering of the add view shouldn't explode - response = self.client.get('/admin/admin_inlines/novel/add/') + response = self.client.get(reverse('admin:admin_inlines_novel_add')) self.assertEqual(response.status_code, 200) # View should have the child inlines section self.assertContains(response, '<div class="inline-group" id="chapter_set-group">') def test_callable_lookup(self): """Admin inline should invoke local callable when its name is listed in readonly_fields""" - response = self.client.get('/admin/admin_inlines/poll/add/') + response = self.client.get(reverse('admin:admin_inlines_poll_add')) self.assertEqual(response.status_code, 200) # Add parent object view should have the child inlines section self.assertContains(response, '<div class="inline-group" id="question_set-group">') @@ -124,11 +128,11 @@ class TestInline(TestCase): using both the stacked and tabular layouts. Ref #8190. """ - response = self.client.get('/admin/admin_inlines/holder4/add/') + response = self.client.get(reverse('admin:admin_inlines_holder4_add')) self.assertContains(response, '<p class="help">Awesome stacked help text is awesome.</p>', 4) self.assertContains(response, '<img src="/static/admin/img/icon-unknown.gif" class="help help-tooltip" width="10" height="10" alt="(Awesome tabular help text is awesome.)" title="Awesome tabular help text is awesome." />', 1) # ReadOnly fields - response = self.client.get('/admin/admin_inlines/capofamiglia/add/') + response = self.client.get(reverse('admin:admin_inlines_capofamiglia_add')) self.assertContains(response, '<img src="/static/admin/img/icon-unknown.gif" class="help help-tooltip" width="10" height="10" alt="(Help text for ReadOnlyInline)" title="Help text for ReadOnlyInline" />', 1) def test_inline_hidden_field_no_column(self): @@ -136,7 +140,7 @@ class TestInline(TestCase): parent = SomeParentModel.objects.create(name='a') SomeChildModel.objects.create(name='b', position='0', parent=parent) SomeChildModel.objects.create(name='c', position='1', parent=parent) - response = self.client.get('/admin/admin_inlines/someparentmodel/%s/' % parent.pk) + response = self.client.get(reverse('admin:admin_inlines_someparentmodel_change', args=(parent.pk,))) self.assertNotContains(response, '<td class="field-position">') self.assertContains(response, ( '<input id="id_somechildmodel_set-1-position" ' @@ -147,7 +151,7 @@ class TestInline(TestCase): Ensure that multiple inlines with related_name='+' have correct form prefixes. Bug #16838. """ - response = self.client.get('/admin/admin_inlines/capofamiglia/add/') + response = self.client.get(reverse('admin:admin_inlines_capofamiglia_add')) self.assertContains(response, '<input type="hidden" name="-1-0-id" id="id_-1-0-id" />', html=True) @@ -173,7 +177,7 @@ class TestInline(TestCase): """ holder = Holder.objects.create(pk=123456789, dummy=42) inner = Inner.objects.create(pk=987654321, holder=holder, dummy=42, readonly='') - response = self.client.get('/admin/admin_inlines/holder/%i/' % holder.id) + response = self.client.get(reverse('admin:admin_inlines_holder_change', args=(holder.id,))) inner_shortcut = 'r/%s/%s/' % (ContentType.objects.get_for_model(inner).pk, inner.pk) self.assertContains(response, inner_shortcut) @@ -185,7 +189,7 @@ class TestInline(TestCase): parent = ParentModelWithCustomPk.objects.create(my_own_pk="foo", name="Foo") child1 = ChildModel1.objects.create(my_own_pk="bar", name="Bar", parent=parent) child2 = ChildModel2.objects.create(my_own_pk="baz", name="Baz", parent=parent) - response = self.client.get('/admin/admin_inlines/parentmodelwithcustompk/foo/') + response = self.client.get(reverse('admin:admin_inlines_parentmodelwithcustompk_change', args=('foo',))) child1_shortcut = 'r/%s/%s/' % (ContentType.objects.get_for_model(child1).pk, child1.pk) child2_shortcut = 'r/%s/%s/' % (ContentType.objects.get_for_model(child2).pk, child2.pk) self.assertContains(response, child1_shortcut) @@ -204,7 +208,7 @@ class TestInline(TestCase): 'sighting_set-0-place': 'Zone 51', '_save': 'Save', } - response = self.client.post('/admin/admin_inlines/extraterrestrial/add/', data) + response = self.client.post(reverse('admin:admin_inlines_extraterrestrial_add'), data) self.assertEqual(response.status_code, 302) self.assertEqual(Sighting.objects.filter(et__name='Martian').count(), 1) @@ -218,11 +222,11 @@ class TestInline(TestCase): # The total number of forms will remain the same in either case total_forms_hidden = '<input id="id_binarytree_set-TOTAL_FORMS" name="binarytree_set-TOTAL_FORMS" type="hidden" value="2" />' - response = self.client.get('/admin/admin_inlines/binarytree/add/') + response = self.client.get(reverse('admin:admin_inlines_binarytree_add')) self.assertContains(response, max_forms_input % 3) self.assertContains(response, total_forms_hidden) - response = self.client.get("/admin/admin_inlines/binarytree/%d/" % bt_head.id) + response = self.client.get(reverse('admin:admin_inlines_binarytree_change', args=(bt_head.id,))) self.assertContains(response, max_forms_input % 2) self.assertContains(response, total_forms_hidden) @@ -241,7 +245,7 @@ class TestInline(TestCase): min_forms = '<input id="id_binarytree_set-MIN_NUM_FORMS" name="binarytree_set-MIN_NUM_FORMS" type="hidden" value="2" />' total_forms = '<input id="id_binarytree_set-TOTAL_FORMS" name="binarytree_set-TOTAL_FORMS" type="hidden" value="5" />' - request = self.factory.get('/admin/admin_inlines/binarytree/add/') + request = self.factory.get(reverse('admin:admin_inlines_binarytree_add')) request.user = User(username='super', is_superuser=True) response = modeladmin.changeform_view(request) self.assertContains(response, min_forms) @@ -269,20 +273,20 @@ class TestInline(TestCase): min_forms = '<input id="id_binarytree_set-MIN_NUM_FORMS" name="binarytree_set-MIN_NUM_FORMS" type="hidden" value="%d" />' total_forms = '<input id="id_binarytree_set-TOTAL_FORMS" name="binarytree_set-TOTAL_FORMS" type="hidden" value="%d" />' - request = self.factory.get('/admin/admin_inlines/binarytree/add/') + request = self.factory.get(reverse('admin:admin_inlines_binarytree_add')) request.user = User(username='super', is_superuser=True) response = modeladmin.changeform_view(request) self.assertContains(response, min_forms % 2) self.assertContains(response, total_forms % 5) - request = self.factory.get("/admin/admin_inlines/binarytree/%d/" % bt_head.id) + request = self.factory.get(reverse('admin:admin_inlines_binarytree_change', args=(bt_head.id,))) request.user = User(username='super', is_superuser=True) response = modeladmin.changeform_view(request, object_id=str(bt_head.id)) self.assertContains(response, min_forms % 5) self.assertContains(response, total_forms % 8) def test_inline_nonauto_noneditable_pk(self): - response = self.client.get('/admin/admin_inlines/author/add/') + response = self.client.get(reverse('admin:admin_inlines_author_add')) self.assertContains(response, '<input id="id_nonautopkbook_set-0-rand_pk" name="nonautopkbook_set-0-rand_pk" type="hidden" />', html=True) @@ -291,7 +295,7 @@ class TestInline(TestCase): html=True) def test_inline_editable_pk(self): - response = self.client.get('/admin/admin_inlines/author/add/') + response = self.client.get(reverse('admin:admin_inlines_author_add')) self.assertContains(response, '<input class="vIntegerField" id="id_editablepkbook_set-0-manual_pk" name="editablepkbook_set-0-manual_pk" type="text" />', html=True, count=1) @@ -302,7 +306,7 @@ class TestInline(TestCase): def test_stacked_inline_edit_form_contains_has_original_class(self): holder = Holder.objects.create(dummy=1) holder.inner_set.create(dummy=1) - response = self.client.get('/admin/admin_inlines/holder/%s/' % holder.pk) + response = self.client.get(reverse('admin:admin_inlines_holder_change', args=(holder.pk,))) self.assertContains( response, '<div class="inline-related has_original" id="inner_set-0">', @@ -323,10 +327,10 @@ class TestInline(TestCase): ('inner4stacked', item1.pk), ('inner4tabular', item2.pk), ) - response = self.client.get('/admin/admin_inlines/holder4/%s/' % holder.pk) + response = self.client.get(reverse('admin:admin_inlines_holder4_change', args=(holder.pk,))) self.assertTrue(response.context['inline_admin_formset'].opts.has_registered_model) for model, pk in items: - url = '/admin/admin_inlines/%s/%s/' % (model, pk) + url = reverse('admin:admin_inlines_%s_change' % model, args=(pk,)) self.assertContains(response, '<a href="%s" %s' % (url, INLINE_CHANGELINK_HTML)) def test_inlines_show_change_link_unregistered(self): @@ -334,7 +338,7 @@ class TestInline(TestCase): parent = ParentModelWithCustomPk.objects.create(my_own_pk="foo", name="Foo") ChildModel1.objects.create(my_own_pk="bar", name="Bar", parent=parent) ChildModel2.objects.create(my_own_pk="baz", name="Baz", parent=parent) - response = self.client.get('/admin/admin_inlines/parentmodelwithcustompk/foo/') + response = self.client.get(reverse('admin:admin_inlines_parentmodelwithcustompk_change', args=('foo',))) self.assertFalse(response.context['inline_admin_formset'].opts.has_registered_model) self.assertNotContains(response, INLINE_CHANGELINK_HTML) @@ -342,7 +346,7 @@ class TestInline(TestCase): "Inlines `show_change_link` disabled by default." poll = Poll.objects.create(name="New poll") Question.objects.create(poll=poll) - response = self.client.get('/admin/admin_inlines/poll/%s/' % poll.pk) + response = self.client.get(reverse('admin:admin_inlines_poll_change', args=(poll.pk,))) self.assertTrue(response.context['inline_admin_formset'].opts.has_registered_model) self.assertNotContains(response, INLINE_CHANGELINK_HTML) @@ -361,7 +365,7 @@ class TestInlineMedia(TestCase): holder = Holder(dummy=13) holder.save() Inner(dummy=42, holder=holder).save() - change_url = '/admin/admin_inlines/holder/%i/' % holder.id + change_url = reverse('admin:admin_inlines_holder_change', args=(holder.id,)) response = self.client.get(change_url) self.assertContains(response, 'my_awesome_admin_scripts.js') @@ -369,7 +373,7 @@ class TestInlineMedia(TestCase): holder = Holder3(dummy=13) holder.save() Inner3(dummy=42, holder=holder).save() - change_url = '/admin/admin_inlines/holder3/%i/' % holder.id + change_url = reverse('admin:admin_inlines_holder3_change', args=(holder.id,)) response = self.client.get(change_url) self.assertContains(response, 'my_awesome_inline_scripts.js') @@ -377,7 +381,7 @@ class TestInlineMedia(TestCase): holder = Holder2(dummy=13) holder.save() Inner2(dummy=42, holder=holder).save() - change_url = '/admin/admin_inlines/holder2/%i/' % holder.id + change_url = reverse('admin:admin_inlines_holder2_change', args=(holder.id,)) response = self.client.get(change_url) self.assertContains(response, 'my_awesome_admin_scripts.js') self.assertContains(response, 'my_awesome_inline_scripts.js') @@ -438,7 +442,7 @@ class TestInlineProtectedOnDelete(TestCase): chapter = Chapter.objects.create(novel=lotr, name='Many Meetings') foot_note = FootNote.objects.create(chapter=chapter, note='yadda yadda') - change_url = '/admin/admin_inlines/novel/%i/' % lotr.id + change_url = reverse('admin:admin_inlines_novel_change', args=(lotr.id,)) response = self.client.get(change_url) data = { 'name': lotr.name, @@ -492,14 +496,14 @@ class TestInlinePermissions(TestCase): author = Author.objects.create(pk=1, name='The Author') book = author.books.create(name='The inline Book') - self.author_change_url = '/admin/admin_inlines/author/%i/' % author.id + self.author_change_url = reverse('admin:admin_inlines_author_change', args=(author.id,)) # Get the ID of the automatically created intermediate model for the Author-Book m2m author_book_auto_m2m_intermediate = Author.books.through.objects.get(author=author, book=book) self.author_book_auto_m2m_intermediate_id = author_book_auto_m2m_intermediate.pk holder = Holder2.objects.create(dummy=13) inner2 = Inner2.objects.create(dummy=42, holder=holder) - self.holder_change_url = '/admin/admin_inlines/holder2/%i/' % holder.id + self.holder_change_url = reverse('admin:admin_inlines_holder2_change', args=(holder.id,)) self.inner2_id = inner2.id self.assertEqual( @@ -507,14 +511,14 @@ class TestInlinePermissions(TestCase): True) def test_inline_add_m2m_noperm(self): - response = self.client.get('/admin/admin_inlines/author/add/') + response = self.client.get(reverse('admin:admin_inlines_author_add')) # No change permission on books, so no inline self.assertNotContains(response, '<h2>Author-book relationships</h2>') self.assertNotContains(response, 'Add another Author-Book Relationship') self.assertNotContains(response, 'id="id_Author_books-TOTAL_FORMS"') def test_inline_add_fk_noperm(self): - response = self.client.get('/admin/admin_inlines/holder2/add/') + response = self.client.get(reverse('admin:admin_inlines_holder2_add')) # No permissions on Inner2s, so no inline self.assertNotContains(response, '<h2>Inner2s</h2>') self.assertNotContains(response, 'Add another Inner2') @@ -537,7 +541,7 @@ class TestInlinePermissions(TestCase): def test_inline_add_m2m_add_perm(self): permission = Permission.objects.get(codename='add_book', content_type=self.book_ct) self.user.user_permissions.add(permission) - response = self.client.get('/admin/admin_inlines/author/add/') + response = self.client.get(reverse('admin:admin_inlines_author_add')) # No change permission on Books, so no inline self.assertNotContains(response, '<h2>Author-book relationships</h2>') self.assertNotContains(response, 'Add another Author-Book Relationship') @@ -546,7 +550,7 @@ class TestInlinePermissions(TestCase): def test_inline_add_fk_add_perm(self): permission = Permission.objects.get(codename='add_inner2', content_type=self.inner_ct) self.user.user_permissions.add(permission) - response = self.client.get('/admin/admin_inlines/holder2/add/') + response = self.client.get(reverse('admin:admin_inlines_holder2_add')) # Add permission on inner2s, so we get the inline self.assertContains(response, '<h2>Inner2s</h2>') self.assertContains(response, 'Add another Inner2') @@ -666,7 +670,7 @@ class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): """ self.admin_login(username='super', password='secret') self.selenium.get('%s%s' % (self.live_server_url, - '/admin/admin_inlines/holder4/add/')) + reverse('admin:admin_inlines_holder4_add'))) inline_id = '#inner4stacked_set-group' rows_length = lambda: len(self.selenium.find_elements_by_css_selector( @@ -682,7 +686,7 @@ class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): def test_delete_stackeds(self): self.admin_login(username='super', password='secret') self.selenium.get('%s%s' % (self.live_server_url, - '/admin/admin_inlines/holder4/add/')) + reverse('admin:admin_inlines_holder4_add'))) inline_id = '#inner4stacked_set-group' rows_length = lambda: len(self.selenium.find_elements_by_css_selector( @@ -707,7 +711,7 @@ class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): """ self.admin_login(username='super', password='secret') self.selenium.get('%s%s' % (self.live_server_url, - '/admin/admin_inlines/profilecollection/add/')) + reverse('admin:admin_inlines_profilecollection_add'))) # Check that there's only one inline to start with and that it has the # correct ID. @@ -764,7 +768,7 @@ class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): def test_delete_inlines(self): self.admin_login(username='super', password='secret') self.selenium.get('%s%s' % (self.live_server_url, - '/admin/admin_inlines/profilecollection/add/')) + reverse('admin:admin_inlines_profilecollection_add'))) # Add a few inlines self.selenium.find_element_by_link_text('Add another Profile').click() @@ -802,7 +806,7 @@ class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): def test_alternating_rows(self): self.admin_login(username='super', password='secret') self.selenium.get('%s%s' % (self.live_server_url, - '/admin/admin_inlines/profilecollection/add/')) + reverse('admin:admin_inlines_profilecollection_add'))) # Add a few inlines self.selenium.find_element_by_link_text('Add another Profile').click() |
