mirror of
https://github.com/django/django.git
synced 2025-07-24 13:44:32 +00:00
Replaced hardcoded URLs in admin_* tests
Refs #15779. This will allow easier admin URL changes, when needed. Thanks Simon Charette for the review.
This commit is contained in:
parent
9033003d97
commit
32e6a7d3a5
8 changed files with 693 additions and 647 deletions
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue