From 28e8b5442500d6cd5b207c2998279265d17fcf8e Mon Sep 17 00:00:00 2001 From: Ben Cail Date: Mon, 6 Apr 2015 14:29:13 -0400 Subject: [PATCH 1/3] add a failing test for Select2Widget (hashedSelector not defined) --- tests/test_widgets.py | 16 ++++++++++++++++ tests/testapp/forms/__init__.py | 9 +++++++++ tests/testapp/urls.py | 4 +++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/tests/test_widgets.py b/tests/test_widgets.py index 1039575..13f85ef 100644 --- a/tests/test_widgets.py +++ b/tests/test_widgets.py @@ -1,6 +1,10 @@ # -*- coding:utf-8 -*- from __future__ import print_function, unicode_literals +import pytest +from django.core.urlresolvers import reverse +from selenium.common.exceptions import NoSuchElementException + class TestWidgets(object): url = "" @@ -14,3 +18,15 @@ class TestWidgets(object): from django_select2.widgets import HeavySelect2Widget new_widget = HeavySelect2Widget(data_url="/") assert new_widget.is_hidden is False + + +class TestSelect2Widget(object): + url = reverse('select2_widget') + + def test_selecting(self, db, client, live_server, driver): + driver.get(live_server + self.url) + with pytest.raises(NoSuchElementException): + error = driver.find_element_by_xpath('//body[@JSError]') + pytest.fail(error.get_attribute('JSError')) + elem = driver.find_element_by_id('s2id_id_number') + elem.click() diff --git a/tests/testapp/forms/__init__.py b/tests/testapp/forms/__init__.py index b73bfe2..17acd26 100644 --- a/tests/testapp/forms/__init__.py +++ b/tests/testapp/forms/__init__.py @@ -4,6 +4,7 @@ from __future__ import absolute_import, unicode_literals from django import forms from django_select2.fields import Select2MultipleWidget +from django_select2.widgets import Select2Widget from tests.testapp import models from . import fields @@ -51,3 +52,11 @@ class AlbumModelForm(forms.ModelForm): class AlbumForm(forms.Form): title = forms.CharField(max_length=255) artist = fields.ArtistField() + + +class Select2WidgetForm(forms.Form): + NUMBER_CHOICES = [ (1, 'One'), + (2, 'Two'), + (3, 'Three'), + (4, 'Four') ] + number = forms.ChoiceField(widget=Select2Widget(), choices=NUMBER_CHOICES) diff --git a/tests/testapp/urls.py b/tests/testapp/urls.py index 5ece1a8..59b7306 100644 --- a/tests/testapp/urls.py +++ b/tests/testapp/urls.py @@ -3,11 +3,13 @@ from __future__ import absolute_import, unicode_literals from django.conf.urls import include, patterns, url -from .forms import ArtistForm +from .forms import ArtistForm, Select2WidgetForm from .views import TemplateFormView urlpatterns = patterns( '', + url(r'select2_widget', + TemplateFormView.as_view(form_class=Select2WidgetForm), name='select2_widget'), url(r'single_value_model_field', TemplateFormView.as_view(form_class=ArtistForm), name='single_value_model_field'), From 12b00c108408a98bfe4b9a214d4c94592e1f2b54 Mon Sep 17 00:00:00 2001 From: Ben Cail Date: Mon, 6 Apr 2015 14:41:24 -0400 Subject: [PATCH 2/3] define hashedSelector in Select2Mixin --- django_select2/widgets.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/django_select2/widgets.py b/django_select2/widgets.py index 12ff7c9..e7ff9d7 100644 --- a/django_select2/widgets.py +++ b/django_select2/widgets.py @@ -184,8 +184,9 @@ class Select2Mixin(object): """ options = json.dumps(self.get_options()) options = options.replace('"*START*', '').replace('*END*"', '') - # selector variable must already be passed to this - return '$(hashedSelector).select2(%s);' % (options) + js = 'var hashedSelector = "#" + "%s";' % id_ + js += '$(hashedSelector).select2(%s);' % (options) + return js def render(self, name, value, attrs=None, choices=()): """ From 537c8ec40be684a38ec374dd064a9fa65f4572f0 Mon Sep 17 00:00:00 2001 From: Ben Cail Date: Wed, 8 Apr 2015 08:47:34 -0400 Subject: [PATCH 3/3] Select2Widget test: move general error check to the end of the function; test that the select2 results get displayed when the widget is clicked --- tests/test_widgets.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/test_widgets.py b/tests/test_widgets.py index 13f85ef..f7560c0 100644 --- a/tests/test_widgets.py +++ b/tests/test_widgets.py @@ -25,8 +25,11 @@ class TestSelect2Widget(object): def test_selecting(self, db, client, live_server, driver): driver.get(live_server + self.url) + dropdown = driver.find_element_by_css_selector('.select2-results') + assert dropdown.is_displayed() is False + elem = driver.find_element_by_css_selector('.select2-choice') + elem.click() + assert dropdown.is_displayed() is True with pytest.raises(NoSuchElementException): error = driver.find_element_by_xpath('//body[@JSError]') pytest.fail(error.get_attribute('JSError')) - elem = driver.find_element_by_id('s2id_id_number') - elem.click()