Example #1
0
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'))
Example #2
0
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()
Example #3
0
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()