mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[1.8.x] Replaced hardcoded URLs in admin_* tests
Refs #15779. This will allow easier admin URL changes, when needed.
Thanks Simon Charette for the review.
Backport of 32e6a7d3a5 from master
			
			
This commit is contained in:
		| @@ -79,7 +79,7 @@ class UserAdmin(admin.ModelAdmin): | ||||
|  | ||||
|     def get_urls(self): | ||||
|         return [ | ||||
|             url(r'^(\d+)/password/$', self.admin_site.admin_view(self.user_change_password)), | ||||
|             url(r'^(\d+)/password/$', self.admin_site.admin_view(self.user_change_password), name='auth_user_password_change'), | ||||
|         ] + super(UserAdmin, self).get_urls() | ||||
|  | ||||
|     def lookup_allowed(self, lookup, value): | ||||
|   | ||||
| @@ -365,7 +365,7 @@ class ChangeListTests(TestCase): | ||||
|             username='super', email='super@localhost', password='secret') | ||||
|         self.client.login(username='super', password='secret') | ||||
|         event = Event.objects.create(date=datetime.date.today()) | ||||
|         response = self.client.get('/admin/admin_changelist/event/') | ||||
|         response = self.client.get(reverse('admin:admin_changelist_event_changelist')) | ||||
|         self.assertContains(response, formats.localize(event.date)) | ||||
|         self.assertNotContains(response, six.text_type(event.date)) | ||||
|  | ||||
| @@ -678,7 +678,7 @@ class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): | ||||
|         """ | ||||
|         self.admin_login(username='super', password='secret') | ||||
|         self.selenium.get('%s%s' % (self.live_server_url, | ||||
|                                     '/admin/auth/user/')) | ||||
|                                     reverse('admin:auth_user_changelist'))) | ||||
|  | ||||
|         form_id = '#changelist-form' | ||||
|  | ||||
|   | ||||
| @@ -26,7 +26,9 @@ class AdminCustomUrlsTest(TestCase): | ||||
|         """ | ||||
|         Ensure GET on the add_view works. | ||||
|         """ | ||||
|         response = self.client.get('/admin/admin_custom_urls/action/!add/') | ||||
|         add_url = reverse('admin:admin_custom_urls_action_add') | ||||
|         self.assertTrue(add_url.endswith('/!add/')) | ||||
|         response = self.client.get(add_url) | ||||
|         self.assertIsInstance(response, TemplateResponse) | ||||
|         self.assertEqual(response.status_code, 200) | ||||
|  | ||||
| @@ -35,7 +37,7 @@ class AdminCustomUrlsTest(TestCase): | ||||
|         Ensure GET on the add_view plus specifying a field value in the query | ||||
|         string works. | ||||
|         """ | ||||
|         response = self.client.get('/admin/admin_custom_urls/action/!add/', {'name': 'My Action'}) | ||||
|         response = self.client.get(reverse('admin:admin_custom_urls_action_add'), {'name': 'My Action'}) | ||||
|         self.assertEqual(response.status_code, 200) | ||||
|         self.assertContains(response, 'value="My Action"') | ||||
|  | ||||
| @@ -48,7 +50,7 @@ class AdminCustomUrlsTest(TestCase): | ||||
|             "name": 'Action added through a popup', | ||||
|             "description": "Description of added action", | ||||
|         } | ||||
|         response = self.client.post('/admin/admin_custom_urls/action/!add/', post_data) | ||||
|         response = self.client.post(reverse('admin:admin_custom_urls_action_add'), post_data) | ||||
|         self.assertEqual(response.status_code, 200) | ||||
|         self.assertContains(response, 'dismissAddRelatedObjectPopup') | ||||
|         self.assertContains(response, 'Action added through a popup') | ||||
|   | ||||
| @@ -2,21 +2,25 @@ from __future__ import unicode_literals | ||||
|  | ||||
| import warnings | ||||
|  | ||||
| from django.contrib.admin import TabularInline, ModelAdmin | ||||
| from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase | ||||
| from django.contrib.admin import ModelAdmin, TabularInline | ||||
| from django.contrib.admin.helpers import InlineAdminForm | ||||
| from django.contrib.auth.models import User, Permission | ||||
| from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase | ||||
| from django.contrib.auth.models import Permission, User | ||||
| from django.contrib.contenttypes.models import ContentType | ||||
| from django.test import TestCase, override_settings, RequestFactory | ||||
| from django.core.urlresolvers import reverse | ||||
| from django.test import RequestFactory, TestCase, override_settings | ||||
| from django.utils.encoding import force_text | ||||
|  | ||||
| # local test models | ||||
| from .admin import InnerInline, site as admin_site | ||||
| from .models import (Holder, Inner, Holder2, Inner2, Holder3, Inner3, Person, | ||||
|     OutfitItem, Fashionista, Teacher, Parent, Child, Author, Book, Profile, | ||||
|     ProfileCollection, ParentModelWithCustomPk, ChildModel1, ChildModel2, | ||||
|     Sighting, Novel, Chapter, FootNote, BinaryTree, SomeParentModel, | ||||
|     SomeChildModel, Poll, Question, Inner4Stacked, Inner4Tabular, Holder4) | ||||
| from .admin import site as admin_site | ||||
| from .admin import InnerInline | ||||
| from .models import ( | ||||
|     Author, BinaryTree, Book, Chapter, Child, ChildModel1, ChildModel2, | ||||
|     Fashionista, FootNote, Holder, Holder2, Holder3, Holder4, Inner, Inner2, | ||||
|     Inner3, Inner4Stacked, Inner4Tabular, Novel, OutfitItem, Parent, | ||||
|     ParentModelWithCustomPk, Person, Poll, Profile, | ||||
|     ProfileCollection, Question, Sighting, SomeChildModel, | ||||
|     SomeParentModel, Teacher, | ||||
| ) | ||||
|  | ||||
| INLINE_CHANGELINK_HTML = 'class="inlinechangelink">Change</a>' | ||||
|  | ||||
| @@ -30,7 +34,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) | ||||
| @@ -40,7 +43,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 | ||||
| @@ -50,13 +56,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 | ||||
| @@ -77,7 +84,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) | ||||
|  | ||||
| @@ -94,7 +101,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>') | ||||
|  | ||||
| @@ -102,14 +109,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">') | ||||
| @@ -123,11 +130,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): | ||||
| @@ -135,7 +142,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" ' | ||||
| @@ -146,7 +153,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) | ||||
| @@ -172,7 +179,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) | ||||
|  | ||||
| @@ -184,7 +191,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) | ||||
| @@ -203,7 +210,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) | ||||
|  | ||||
| @@ -217,11 +224,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) | ||||
|  | ||||
| @@ -240,7 +247,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) | ||||
| @@ -268,20 +275,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) | ||||
| @@ -290,7 +297,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) | ||||
| @@ -301,7 +308,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">', | ||||
| @@ -322,10 +329,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): | ||||
| @@ -333,7 +340,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) | ||||
|  | ||||
| @@ -341,7 +348,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) | ||||
|  | ||||
| @@ -360,7 +367,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') | ||||
|  | ||||
| @@ -368,7 +375,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') | ||||
|  | ||||
| @@ -376,7 +383,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') | ||||
| @@ -437,7 +444,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, | ||||
| @@ -491,14 +498,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( | ||||
| @@ -506,14 +513,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') | ||||
| @@ -536,7 +543,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') | ||||
| @@ -545,7 +552,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') | ||||
| @@ -665,7 +672,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( | ||||
| @@ -681,7 +688,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( | ||||
| @@ -706,7 +713,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. | ||||
| @@ -763,7 +770,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() | ||||
| @@ -801,7 +808,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() | ||||
|   | ||||
| @@ -27,7 +27,7 @@ class Admin2(admin.AdminSite): | ||||
|  | ||||
|     def get_urls(self): | ||||
|         return [ | ||||
|             url(r'^my_view/$', self.admin_view(self.my_view)), | ||||
|             url(r'^my_view/$', self.admin_view(self.my_view), name='my_view'), | ||||
|         ] + super(Admin2, self).get_urls() | ||||
|  | ||||
|     def my_view(self, request): | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -5,10 +5,10 @@ from . import views, customadmin, custom_has_permission_admin, admin | ||||
|  | ||||
| urlpatterns = [ | ||||
|     url(r'^test_admin/admin/doc/', include('django.contrib.admindocs.urls')), | ||||
|     url(r'^test_admin/admin/secure-view/$', views.secure_view), | ||||
|     url(r'^test_admin/admin/secure-view/$', views.secure_view, name='secure_view'), | ||||
|     url(r'^test_admin/admin/', include(admin.site.urls)), | ||||
|     url(r'^test_admin/admin2/', include(customadmin.site.urls)), | ||||
|     url(r'^test_admin/admin3/', include(admin.site.urls), dict(form_url='pony')), | ||||
|     url(r'^test_admin/admin3/', include(admin.site.get_urls(), 'admin3', 'admin'), dict(form_url='pony')), | ||||
|     url(r'^test_admin/admin4/', include(customadmin.simple_site.urls)), | ||||
|     url(r'^test_admin/admin5/', include(admin.site2.urls)), | ||||
|     url(r'^test_admin/admin7/', include(admin.site7.urls)), | ||||
|   | ||||
| @@ -19,6 +19,7 @@ from django.contrib.admin import widgets | ||||
| from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase | ||||
| from django.core.files.storage import default_storage | ||||
| from django.core.files.uploadedfile import SimpleUploadedFile | ||||
| from django.core.urlresolvers import reverse | ||||
| from django.db.models import CharField, DateField | ||||
| from django.test import TestCase as DjangoTestCase | ||||
| from django.test import override_settings | ||||
| @@ -177,7 +178,7 @@ class AdminFormfieldForDBFieldWithRequestTests(DjangoTestCase): | ||||
|         Ensure the user can only see their own cars in the foreign key dropdown. | ||||
|         """ | ||||
|         self.client.login(username="super", password="secret") | ||||
|         response = self.client.get("/admin_widgets/cartire/add/") | ||||
|         response = self.client.get(reverse('admin:admin_widgets_cartire_add')) | ||||
|         self.assertNotContains(response, "BMW M3") | ||||
|         self.assertContains(response, "Volkswagon Passat") | ||||
|  | ||||
| @@ -191,7 +192,7 @@ class AdminForeignKeyWidgetChangeList(DjangoTestCase): | ||||
|         self.client.login(username="super", password="secret") | ||||
|  | ||||
|     def test_changelist_ForeignKey(self): | ||||
|         response = self.client.get('/admin_widgets/car/') | ||||
|         response = self.client.get(reverse('admin:admin_widgets_car_changelist')) | ||||
|         self.assertContains(response, '/auth/user/add/') | ||||
|  | ||||
|  | ||||
| @@ -212,7 +213,7 @@ class AdminForeignKeyRawIdWidget(DjangoTestCase): | ||||
|         } | ||||
|         # Try posting with a non-existent pk in a raw id field: this | ||||
|         # should result in an error message, not a server exception. | ||||
|         response = self.client.post('/admin_widgets/event/add/', post_data) | ||||
|         response = self.client.post(reverse('admin:admin_widgets_event_add'), post_data) | ||||
|         self.assertContains(response, | ||||
|             'Select a valid choice. That choice is not one of the available choices.') | ||||
|  | ||||
| @@ -220,7 +221,7 @@ class AdminForeignKeyRawIdWidget(DjangoTestCase): | ||||
|  | ||||
|         for test_str in ('Iñtërnâtiônàlizætiøn', "1234'", -1234): | ||||
|             # This should result in an error message, not a server exception. | ||||
|             response = self.client.post('/admin_widgets/event/add/', | ||||
|             response = self.client.post(reverse('admin:admin_widgets_event_add'), | ||||
|                 {"main_band": test_str}) | ||||
|  | ||||
|             self.assertContains(response, | ||||
| @@ -386,7 +387,7 @@ class AdminFileWidgetTests(DjangoTestCase): | ||||
|         File widgets should render as a link when they're marked "read only." | ||||
|         """ | ||||
|         self.client.login(username="super", password="secret") | ||||
|         response = self.client.get('/admin_widgets/album/%s/' % self.album.id) | ||||
|         response = self.client.get(reverse('admin:admin_widgets_album_change', args=(self.album.id,))) | ||||
|         self.assertContains( | ||||
|             response, | ||||
|             '<p><a href="%(STORAGE_URL)salbums/hybrid_theory.jpg">' | ||||
| @@ -585,7 +586,7 @@ class DateTimePickerSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): | ||||
|         self.admin_login(username='super', password='secret', login_url='/') | ||||
|         # Open a page that has a date and time picker widgets | ||||
|         self.selenium.get('%s%s' % (self.live_server_url, | ||||
|             '/admin_widgets/member/add/')) | ||||
|             reverse('admin:admin_widgets_member_add'))) | ||||
|  | ||||
|         # First, with the date picker widget --------------------------------- | ||||
|         # Check that the date picker is hidden | ||||
| @@ -625,7 +626,7 @@ class DateTimePickerSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): | ||||
|         self.admin_login(username='super', password='secret', login_url='/') | ||||
|         # Open a page that has a date and time picker widgets | ||||
|         self.selenium.get('%s%s' % (self.live_server_url, | ||||
|             '/admin_widgets/member/add/')) | ||||
|             reverse('admin:admin_widgets_member_add'))) | ||||
|  | ||||
|         # fill in the birth date. | ||||
|         self.selenium.find_element_by_id('id_birthdate_0').send_keys('2013-06-01') | ||||
| @@ -649,7 +650,7 @@ class DateTimePickerSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): | ||||
|         self.admin_login(username='super', password='secret', login_url='/') | ||||
|         # Open a page that has a date and time picker widgets | ||||
|         self.selenium.get('%s%s' % (self.live_server_url, | ||||
|             '/admin_widgets/member/add/')) | ||||
|             reverse('admin:admin_widgets_member_add'))) | ||||
|  | ||||
|         # fill in the birth date. | ||||
|         self.selenium.find_element_by_id('id_birthdate_0').send_keys('2013-06-01') | ||||
| @@ -675,7 +676,7 @@ class DateTimePickerSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): | ||||
|         self.admin_login(username='super', password='secret', login_url='/') | ||||
|         # Open a page that has a date and time picker widgets | ||||
|         self.selenium.get('%s%s' % (self.live_server_url, | ||||
|             '/admin_widgets/member/add/')) | ||||
|             reverse('admin:admin_widgets_member_add'))) | ||||
|  | ||||
|         # Click the calendar icon | ||||
|         self.selenium.find_element_by_id('calendarlink0').click() | ||||
| @@ -721,7 +722,7 @@ class DateTimePickerSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): | ||||
|  | ||||
|                 # Open a page that has a date picker widget | ||||
|                 self.selenium.get('{}{}'.format(self.live_server_url, | ||||
|                     '/admin_widgets/member/{}/'.format(member.pk))) | ||||
|                     reverse('admin:admin_widgets_member_change', args=(member.pk,)))) | ||||
|  | ||||
|                 # Click on the calendar icon | ||||
|                 self.selenium.find_element_by_id('calendarlink0').click() | ||||
| @@ -775,7 +776,7 @@ class DateTimePickerShortcutsSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase | ||||
|         now = datetime.now() | ||||
|  | ||||
|         self.selenium.get('%s%s' % (self.live_server_url, | ||||
|             '/admin_widgets/member/add/')) | ||||
|             reverse('admin:admin_widgets_member_add'))) | ||||
|  | ||||
|         self.selenium.find_element_by_id('id_name').send_keys('test') | ||||
|  | ||||
| @@ -952,8 +953,8 @@ class HorizontalVerticalFilterSeleniumFirefoxTests(AdminSeleniumWebDriverTestCas | ||||
|         self.school.save() | ||||
|  | ||||
|         self.admin_login(username='super', password='secret', login_url='/') | ||||
|         self.selenium.get( | ||||
|             '%s%s' % (self.live_server_url, '/admin_widgets/school/%s/' % self.school.id)) | ||||
|         self.selenium.get('%s%s' % ( | ||||
|             self.live_server_url, reverse('admin:admin_widgets_school_change', args=(self.school.id,)))) | ||||
|  | ||||
|         self.wait_page_loaded() | ||||
|         self.execute_basic_operations('vertical', 'students') | ||||
| @@ -981,7 +982,7 @@ class HorizontalVerticalFilterSeleniumFirefoxTests(AdminSeleniumWebDriverTestCas | ||||
|  | ||||
|         self.admin_login(username='super', password='secret', login_url='/') | ||||
|         self.selenium.get( | ||||
|             '%s%s' % (self.live_server_url, '/admin_widgets/school/%s/' % self.school.id)) | ||||
|             '%s%s' % (self.live_server_url, reverse('admin:admin_widgets_school_change', args=(self.school.id,)))) | ||||
|  | ||||
|         for field_name in ['students', 'alumni']: | ||||
|             from_box = '#id_%s_from' % field_name | ||||
| @@ -1082,7 +1083,7 @@ class AdminRawIdWidgetSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): | ||||
|     def test_ForeignKey(self): | ||||
|         self.admin_login(username='super', password='secret', login_url='/') | ||||
|         self.selenium.get( | ||||
|             '%s%s' % (self.live_server_url, '/admin_widgets/event/add/')) | ||||
|             '%s%s' % (self.live_server_url, reverse('admin:admin_widgets_event_add'))) | ||||
|         main_window = self.selenium.current_window_handle | ||||
|  | ||||
|         # No value has been selected yet | ||||
| @@ -1117,7 +1118,7 @@ class AdminRawIdWidgetSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): | ||||
|     def test_many_to_many(self): | ||||
|         self.admin_login(username='super', password='secret', login_url='/') | ||||
|         self.selenium.get( | ||||
|             '%s%s' % (self.live_server_url, '/admin_widgets/event/add/')) | ||||
|             '%s%s' % (self.live_server_url, reverse('admin:admin_widgets_event_add'))) | ||||
|         main_window = self.selenium.current_window_handle | ||||
|  | ||||
|         # No value has been selected yet | ||||
| @@ -1169,7 +1170,7 @@ class RelatedFieldWidgetSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): | ||||
|         self.admin_login(username='super', password='secret', login_url='/') | ||||
|         self.selenium.get('%s%s' % ( | ||||
|             self.live_server_url, | ||||
|             '/admin_widgets/profile/add/')) | ||||
|             reverse('admin:admin_widgets_profile_add'))) | ||||
|  | ||||
|         main_window = self.selenium.current_window_handle | ||||
|         # Click the Add User button to add new | ||||
|   | ||||
		Reference in New Issue
	
	Block a user