mirror of
https://github.com/Hopiu/django-select2.git
synced 2026-03-17 05:50:23 +00:00
137 lines
5.2 KiB
Python
137 lines
5.2 KiB
Python
# -*- coding:utf-8 -*-
|
|
from __future__ import print_function, unicode_literals
|
|
|
|
import json
|
|
from collections import Iterable
|
|
|
|
import pytest
|
|
from django.core import signing
|
|
from django.core.urlresolvers import reverse
|
|
from django.db.models import QuerySet
|
|
from model_mommy import mommy
|
|
from selenium.common.exceptions import NoSuchElementException
|
|
from six import text_type
|
|
|
|
from django_select2.cache import cache
|
|
from django_select2.forms import ModelSelect2Widget
|
|
from tests.testapp.models import Genre
|
|
|
|
|
|
class TestWidgets(object):
|
|
url = ""
|
|
|
|
def test_is_hidden_multiple(self):
|
|
from django_select2.forms import HeavySelect2MultipleWidget
|
|
new_widget = HeavySelect2MultipleWidget(data_url="/")
|
|
assert new_widget.is_hidden is False
|
|
|
|
def test_is_hidden(self):
|
|
from django_select2.forms 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)
|
|
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'))
|
|
|
|
|
|
class TestHeavySelect2Widget(object):
|
|
url = reverse('heavy_select2_widget')
|
|
|
|
def test_heavy_select(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'))
|
|
|
|
|
|
class TestHeavySelect2MultipleWidget(object):
|
|
url = reverse('heavy_select2_multiple_widget')
|
|
|
|
def test_heavy_select_multiple(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-choices')
|
|
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'))
|
|
|
|
|
|
class TestHeavySelect2Mixin(object):
|
|
@pytest.fixture(autouse=True)
|
|
def genres(self, db):
|
|
mommy.make(Genre, 100)
|
|
|
|
def test_get_queryset(self):
|
|
widget = ModelSelect2Widget()
|
|
with pytest.raises(NotImplementedError):
|
|
widget.get_queryset()
|
|
widget.model = Genre
|
|
assert isinstance(widget.get_queryset(), QuerySet)
|
|
widget.model = None
|
|
widget.queryset = Genre.objects.all()
|
|
assert isinstance(widget.get_queryset(), QuerySet)
|
|
|
|
def test_get_search_fields(self):
|
|
widget = ModelSelect2Widget()
|
|
with pytest.raises(NotImplementedError):
|
|
widget.get_search_fields()
|
|
|
|
widget.search_fields = ['title__icontains']
|
|
assert isinstance(widget.get_search_fields(), Iterable)
|
|
assert all(isinstance(x, text_type) for x in widget.get_search_fields())
|
|
|
|
def test_model_kwarg(self):
|
|
widget = ModelSelect2Widget(model=Genre, search_fields=['title__icontains'])
|
|
genre = Genre.objects.last()
|
|
result = widget.filter_queryset(genre.title)
|
|
assert result.exists()
|
|
|
|
def test_queryset_kwarg(self):
|
|
widget = ModelSelect2Widget(queryset=Genre.objects, search_fields=['title__icontains'])
|
|
genre = Genre.objects.last()
|
|
result = widget.filter_queryset(genre.title)
|
|
assert result.exists()
|
|
|
|
def test_widget_id(self):
|
|
widget = ModelSelect2Widget()
|
|
widget.render('name', 'value')
|
|
assert widget.widget_id
|
|
assert signing.loads(widget.widget_id) == id(widget)
|
|
|
|
def test_render(self):
|
|
widget = ModelSelect2Widget()
|
|
widget.render('name', 'value')
|
|
cached_widget = cache.get(widget._get_cache_key())
|
|
assert isinstance(cached_widget, ModelSelect2Widget)
|
|
assert cached_widget.widget_id == widget.widget_id
|
|
|
|
def test_ajax_view_registration(self, client):
|
|
widget = ModelSelect2Widget(queryset=Genre.objects, search_fields=['title__icontains'])
|
|
widget.render('name', 'value')
|
|
url = reverse('django_select2_central_json')
|
|
genre = Genre.objects.last()
|
|
response = client.get(url, data=dict(field_id=widget.widget_id, term=genre.title))
|
|
assert response.status_code == 200, response.content
|
|
data = json.loads(response.content.decode('utf-8'))
|
|
assert data['results']
|
|
assert genre.pk in [result['id'] for result in data['results']]
|