Loading tests/admin_widgets/models.py +2 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,8 @@ class Inventory(models.Model): 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) Loading tests/admin_widgets/tests.py +100 −7 Original line number Diff line number Diff line Loading @@ -90,15 +90,15 @@ class AdminFormfieldForDBFieldTests(TestCase): 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): Loading Loading @@ -201,7 +201,7 @@ class AdminForeignKeyRawIdWidget(DjangoTestCase): 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. Loading @@ -215,7 +215,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('%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.') Loading Loading @@ -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' No newline at end of file tests/admin_widgets/widgetadmin.py +1 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ class CarTireAdmin(admin.ModelAdmin): 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): Loading Loading
tests/admin_widgets/models.py +2 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,8 @@ class Inventory(models.Model): 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) Loading
tests/admin_widgets/tests.py +100 −7 Original line number Diff line number Diff line Loading @@ -90,15 +90,15 @@ class AdminFormfieldForDBFieldTests(TestCase): 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): Loading Loading @@ -201,7 +201,7 @@ class AdminForeignKeyRawIdWidget(DjangoTestCase): 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. Loading @@ -215,7 +215,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('%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.') Loading Loading @@ -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' No newline at end of file
tests/admin_widgets/widgetadmin.py +1 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ class CarTireAdmin(admin.ModelAdmin): 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): Loading