Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Added some Selenium tests for the admin raw id widget.

  • Loading branch information...
commit 995ffbb2a60c80217bf4cbe028b7712fafaf11f2 1 parent 1593a86
@jphalip jphalip authored
View
3  tests/admin_widgets/models.py
@@ -56,7 +56,8 @@ def __str__(self):
return self.name
class Event(models.Model):
- band = models.ForeignKey(Band, limit_choices_to=models.Q(pk__gt=0))
+ main_band = models.ForeignKey(Band, limit_choices_to=models.Q(pk__gt=0), related_name='events_main_band_at')
+ supporting_bands = models.ManyToManyField(Band, null=True, blank=True, related_name='events_supporting_band_at')
start_date = models.DateField(blank=True, null=True)
start_time = models.TimeField(blank=True, null=True)
description = models.TextField(blank=True)
View
107 tests/admin_widgets/tests.py
@@ -90,15 +90,15 @@ def testFileField(self):
self.assertFormfield(models.Album, 'cover_art', widgets.AdminFileWidget)
def testForeignKey(self):
- self.assertFormfield(models.Event, 'band', forms.Select)
+ self.assertFormfield(models.Event, 'main_band', forms.Select)
def testRawIDForeignKey(self):
- self.assertFormfield(models.Event, 'band', widgets.ForeignKeyRawIdWidget,
- raw_id_fields=['band'])
+ self.assertFormfield(models.Event, 'main_band', widgets.ForeignKeyRawIdWidget,
+ raw_id_fields=['main_band'])
def testRadioFieldsForeignKey(self):
- ff = self.assertFormfield(models.Event, 'band', widgets.AdminRadioSelect,
- radio_fields={'band':admin.VERTICAL})
+ ff = self.assertFormfield(models.Event, 'main_band', widgets.AdminRadioSelect,
+ radio_fields={'main_band':admin.VERTICAL})
self.assertEqual(ff.empty_label, None)
def testManyToMany(self):
@@ -201,7 +201,7 @@ def test_nonexistent_target_id(self):
pk = band.pk
band.delete()
post_data = {
- "band": '%s' % pk,
+ "main_band": '%s' % pk,
}
# Try posting with a non-existent pk in a raw id field: this
# should result in an error message, not a server exception.
@@ -215,7 +215,7 @@ def test_invalid_target_id(self):
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('%s/admin_widgets/event/add/' % self.admin_root,
- {"band": test_str})
+ {"main_band": test_str})
self.assertContains(response,
'Select a valid choice. That choice is not one of the available choices.')
@@ -819,3 +819,96 @@ class HorizontalVerticalFilterSeleniumChromeTests(HorizontalVerticalFilterSeleni
class HorizontalVerticalFilterSeleniumIETests(HorizontalVerticalFilterSeleniumFirefoxTests):
webdriver_class = 'selenium.webdriver.ie.webdriver.WebDriver'
+
+
+@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
+class AdminRawIdWidgetSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase):
+ available_apps = ['admin_widgets'] + AdminSeleniumWebDriverTestCase.available_apps
+ fixtures = ['admin-widgets-users.xml']
+ urls = "admin_widgets.urls"
+ webdriver_class = 'selenium.webdriver.firefox.webdriver.WebDriver'
+
+ def setUp(self):
+ models.Band.objects.create(id=42, name='Bogey Blues')
+ models.Band.objects.create(id=98, name='Green Potatoes')
+ super(AdminRawIdWidgetSeleniumFirefoxTests, self).setUp()
+
+ 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/'))
+ main_window = self.selenium.current_window_handle
+
+ # No value has been selected yet
+ self.assertEqual(
+ self.selenium.find_element_by_id('id_main_band').get_attribute('value'),
+ '')
+
+ # Open the popup window and click on a band
+ self.selenium.find_element_by_id('lookup_id_main_band').click()
+ self.selenium.switch_to_window('id_main_band')
+ link = self.selenium.find_element_by_link_text('Bogey Blues')
+ self.assertTrue('/band/42/' in link.get_attribute('href'))
+ link.click()
+
+ # The field now contains the selected band's id
+ self.selenium.switch_to_window(main_window)
+ self.assertEqual(
+ self.selenium.find_element_by_id('id_main_band').get_attribute('value'),
+ '42')
+
+ # Reopen the popup window and click on another band
+ self.selenium.find_element_by_id('lookup_id_main_band').click()
+ self.selenium.switch_to_window('id_main_band')
+ link = self.selenium.find_element_by_link_text('Green Potatoes')
+ self.assertTrue('/band/98/' in link.get_attribute('href'))
+ link.click()
+
+ # The field now contains the other selected band's id
+ self.selenium.switch_to_window(main_window)
+ self.assertEqual(
+ self.selenium.find_element_by_id('id_main_band').get_attribute('value'),
+ '98')
+
+ 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/'))
+ main_window = self.selenium.current_window_handle
+
+ # No value has been selected yet
+ self.assertEqual(
+ self.selenium.find_element_by_id('id_supporting_bands').get_attribute('value'),
+ '')
+
+ # Open the popup window and click on a band
+ self.selenium.find_element_by_id('lookup_id_supporting_bands').click()
+ self.selenium.switch_to_window('id_supporting_bands')
+ link = self.selenium.find_element_by_link_text('Bogey Blues')
+ self.assertTrue('/band/42/' in link.get_attribute('href'))
+ link.click()
+
+ # The field now contains the selected band's id
+ self.selenium.switch_to_window(main_window)
+ self.assertEqual(
+ self.selenium.find_element_by_id('id_supporting_bands').get_attribute('value'),
+ '42')
+
+ # Reopen the popup window and click on another band
+ self.selenium.find_element_by_id('lookup_id_supporting_bands').click()
+ self.selenium.switch_to_window('id_supporting_bands')
+ link = self.selenium.find_element_by_link_text('Green Potatoes')
+ self.assertTrue('/band/98/' in link.get_attribute('href'))
+ link.click()
+
+ # The field now contains the two selected bands' ids
+ self.selenium.switch_to_window(main_window)
+ self.assertEqual(
+ self.selenium.find_element_by_id('id_supporting_bands').get_attribute('value'),
+ '42,98')
+
+class AdminRawIdWidgetSeleniumChromeTests(AdminRawIdWidgetSeleniumFirefoxTests):
+ webdriver_class = 'selenium.webdriver.chrome.webdriver.WebDriver'
+
+class AdminRawIdWidgetSeleniumIETests(AdminRawIdWidgetSeleniumFirefoxTests):
+ webdriver_class = 'selenium.webdriver.ie.webdriver.WebDriver'
View
2  tests/admin_widgets/widgetadmin.py
@@ -18,7 +18,7 @@ def formfield_for_foreignkey(self, db_field, request, **kwargs):
return super(CarTireAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
class EventAdmin(admin.ModelAdmin):
- raw_id_fields = ['band']
+ raw_id_fields = ['main_band', 'supporting_bands']
class SchoolAdmin(admin.ModelAdmin):
Please sign in to comment.
Something went wrong with that request. Please try again.