class TestHeavySelect2Mixin(TestSelect2Mixin): url = reverse('heavy_select2_widget') form = forms.HeavySelect2WidgetForm(initial={'primary_genre': 1}) widget_cls = HeavySelect2Widget def test_initial_data(self): assert 'One' in self.form.as_p() def test_initial_form_class(self): widget = self.widget_cls(data_view='heavy_data_1', attrs={'class': 'my-class'}) assert 'my-class' in widget.render('name', None) assert 'django-select2' in widget.render('name', None) assert 'django-select2-heavy' in widget.render('name', None), widget.render( 'name', None) def test_selected_option(self, db): not_required_field = self.form.fields['primary_genre'] assert not_required_field.required is False assert '<option value="1" selected="selected">One</option>' in \ not_required_field.widget.render('primary_genre', 1, choices=NUMBER_CHOICES), \ not_required_field.widget.render('primary_genre', 1, choices=NUMBER_CHOICES) def test_many_selected_option(self, db, genres): field = HeavySelect2MultipleWidgetForm().fields['genres'] widget_output = field.widget.render('genres', [1, 2], choices=NUMBER_CHOICES) selected_option = '<option value="{pk}" selected="selected">{value}</option>'.format( pk=1, value='One') selected_option2 = '<option value="{pk}" selected="selected">{value}</option>'.format( pk=2, value='Two') assert selected_option in widget_output, widget_output assert selected_option2 in widget_output def test_multiple_widgets(self, db, live_server, driver): driver.get(live_server + self.url) with pytest.raises(NoSuchElementException): driver.find_element_by_css_selector('.select2-results') elem1, elem2 = driver.find_elements_by_css_selector( '.select2-selection') elem1.click() result1 = driver.find_element_by_css_selector( '.select2-results li:first-child').text elem2.click() result2 = driver.find_element_by_css_selector( '.select2-results li:first-child').text assert result1 != result2 with pytest.raises(NoSuchElementException): error = driver.find_element_by_xpath('//body[@JSError]') pytest.fail(error.get_attribute('JSError'))
class TestHeavySelect2Mixin(TestSelect2Mixin): url = reverse('heavy_select2_widget') form = forms.HeavySelect2WidgetForm(initial={'primary_genre': 1}) widget_cls = HeavySelect2Widget def test_initial_data(self): assert 'One' in self.form.as_p() def test_initial_form_class(self): widget = self.widget_cls(data_view='heavy_data_1', attrs={'class': 'my-class'}) assert 'my-class' in widget.render('name', None) assert 'django-select2' in widget.render('name', None) assert 'django-select2-heavy' in widget.render('name', None), widget.render( 'name', None) def test_selected_option(self, db): not_required_field = self.form.fields['primary_genre'] assert not_required_field.required is False assert '<option value="1" selected="selected">One</option>' in \ not_required_field.widget.render('primary_genre', 1) or \ '<option value="1" selected>One</option>' in \ not_required_field.widget.render('primary_genre', 1), \ not_required_field.widget.render('primary_genre', 1) def test_many_selected_option(self, db, genres): field = HeavySelect2MultipleWidgetForm().fields['genres'] field.widget.choices = NUMBER_CHOICES widget_output = field.widget.render('genres', [1, 2]) selected_option = '<option value="{pk}" selected="selected">{value}</option>'.format( pk=1, value='One') selected_option_a = '<option value="{pk}" selected>{value}</option>'.format( pk=1, value='One') selected_option2 = '<option value="{pk}" selected="selected">{value}</option>'.format( pk=2, value='Two') selected_option2a = '<option value="{pk}" selected>{value}</option>'.format( pk=2, value='Two') assert selected_option in widget_output or selected_option_a in widget_output, widget_output assert selected_option2 in widget_output or selected_option2a in widget_output def test_multiple_widgets(self, db, live_server, driver): driver.get(live_server + self.url) with pytest.raises(NoSuchElementException): driver.find_element_by_css_selector('.select2-results') elem1, elem2 = driver.find_elements_by_css_selector( '.select2-selection') elem1.click() result1 = WebDriverWait(driver, 60).until( expected_conditions.presence_of_element_located( (By.CSS_SELECTOR, '.select2-results li:first-child'))).text elem2.click() result2 = WebDriverWait(driver, 60).until( expected_conditions.presence_of_element_located( (By.CSS_SELECTOR, '.select2-results li:first-child'))).text assert result1 != result2 with pytest.raises(NoSuchElementException): error = driver.find_element_by_xpath('//body[@JSError]') pytest.fail(error.get_attribute('JSError')) def test_get_url(self): widget = self.widget_cls(data_view='heavy_data_1', attrs={'class': 'my-class'}) assert isinstance(widget.get_url(), text_type) def test_can_not_pickle(self): widget = self.widget_cls(data_view='heavy_data_1', attrs={'class': 'my-class'}) class NoPickle(object): pass widget.no_pickle = NoPickle() with pytest.raises(NotImplementedError): widget.set_to_cache()
class TestHeavySelect2Mixin(TestSelect2Mixin): url = reverse("heavy_select2_widget") form = forms.HeavySelect2WidgetForm(initial={"primary_genre": 1}) widget_cls = HeavySelect2Widget def test_initial_data(self): assert "One" in self.form.as_p() def test_initial_form_class(self): widget = self.widget_cls(data_view="heavy_data_1", attrs={"class": "my-class"}) assert "my-class" in widget.render("name", None) assert "django-select2" in widget.render("name", None) assert "django-select2-heavy" in widget.render("name", None), widget.render( "name", None) def test_selected_option(self, db): not_required_field = self.form.fields["primary_genre"] assert not_required_field.required is False assert ('<option value="1" selected="selected">One</option>' in not_required_field.widget.render("primary_genre", 1) or '<option value="1" selected>One</option>' in not_required_field.widget.render( "primary_genre", 1)), (not_required_field.widget.render( "primary_genre", 1)) def test_many_selected_option(self, db, genres): field = HeavySelect2MultipleWidgetForm().fields["genres"] field.widget.choices = NUMBER_CHOICES widget_output = field.widget.render("genres", [1, 2]) selected_option = ( '<option value="{pk}" selected="selected">{value}</option>'.format( pk=1, value="One")) selected_option_a = '<option value="{pk}" selected>{value}</option>'.format( pk=1, value="One") selected_option2 = ( '<option value="{pk}" selected="selected">{value}</option>'.format( pk=2, value="Two")) selected_option2a = '<option value="{pk}" selected>{value}</option>'.format( pk=2, value="Two") assert (selected_option in widget_output or selected_option_a in widget_output), widget_output assert selected_option2 in widget_output or selected_option2a in widget_output def test_multiple_widgets(self, db, live_server, driver): driver.get(live_server + self.url) with pytest.raises(NoSuchElementException): driver.find_element_by_css_selector(".select2-results") elem1, elem2 = driver.find_elements_by_css_selector( ".select2-selection") elem1.click() search1 = driver.find_element_by_css_selector(".select2-search__field") search1.send_keys("fo") result1 = (WebDriverWait(driver, 60).until( expected_conditions.presence_of_element_located( (By.CSS_SELECTOR, ".select2-results li:first-child"))).text) elem2.click() search2 = driver.find_element_by_css_selector(".select2-search__field") search2.send_keys("fo") result2 = (WebDriverWait(driver, 60).until( expected_conditions.presence_of_element_located( (By.CSS_SELECTOR, ".select2-results li:first-child"))).text) assert result1 != result2 with pytest.raises(NoSuchElementException): error = driver.find_element_by_xpath("//body[@JSError]") pytest.fail(error.get_attribute("JSError")) def test_get_url(self): widget = self.widget_cls(data_view="heavy_data_1", attrs={"class": "my-class"}) assert isinstance(widget.get_url(), str) def test_can_not_pickle(self): widget = self.widget_cls(data_view="heavy_data_1", attrs={"class": "my-class"}) class NoPickle: pass widget.no_pickle = NoPickle() with pytest.raises(NotImplementedError): widget.set_to_cache()