2013-02-19 02:07:28 +01:00
|
|
|
from __future__ import absolute_import
|
|
|
|
from __future__ import unicode_literals
|
2013-02-25 23:13:39 +01:00
|
|
|
|
2013-02-19 02:07:28 +01:00
|
|
|
from django.test import TestCase
|
2013-02-26 08:45:30 +01:00
|
|
|
from django.forms import TextInput, Select
|
2013-02-25 23:13:39 +01:00
|
|
|
|
2015-07-31 13:17:58 +02:00
|
|
|
from django_filters.widgets import BooleanWidget
|
2016-02-05 05:16:44 +01:00
|
|
|
from django_filters.widgets import CSVWidget
|
2013-02-19 02:07:28 +01:00
|
|
|
from django_filters.widgets import RangeWidget
|
|
|
|
from django_filters.widgets import LinkWidget
|
|
|
|
from django_filters.widgets import LookupTypeWidget
|
|
|
|
|
|
|
|
|
|
|
|
class LookupTypeWidgetTests(TestCase):
|
2013-03-28 22:59:20 +01:00
|
|
|
|
2013-02-19 02:07:28 +01:00
|
|
|
def test_widget_requires_field(self):
|
|
|
|
with self.assertRaises(TypeError):
|
|
|
|
LookupTypeWidget()
|
|
|
|
|
2013-02-26 08:45:30 +01:00
|
|
|
def test_widget_render(self):
|
|
|
|
widgets = [TextInput(), Select(choices=(('a', 'a'), ('b', 'b')))]
|
|
|
|
w = LookupTypeWidget(widgets)
|
|
|
|
self.assertHTMLEqual(w.render('price', ''), """
|
|
|
|
<input name="price_0" type="text" />
|
|
|
|
<select name="price_1">
|
|
|
|
<option value="a">a</option>
|
|
|
|
<option value="b">b</option>
|
|
|
|
</select>""")
|
|
|
|
|
|
|
|
self.assertHTMLEqual(w.render('price', None), """
|
|
|
|
<input name="price_0" type="text" />
|
|
|
|
<select name="price_1">
|
|
|
|
<option value="a">a</option>
|
|
|
|
<option value="b">b</option>
|
|
|
|
</select>""")
|
|
|
|
|
|
|
|
self.assertHTMLEqual(w.render('price', ['2', 'a']), """
|
|
|
|
<input name="price_0" type="text" value="2" />
|
|
|
|
<select name="price_1">
|
|
|
|
<option selected="selected" value="a">a</option>
|
|
|
|
<option value="b">b</option>
|
|
|
|
</select>""")
|
|
|
|
|
2013-02-19 02:07:28 +01:00
|
|
|
|
|
|
|
class LinkWidgetTests(TestCase):
|
2013-03-28 22:59:20 +01:00
|
|
|
|
2013-02-19 02:07:28 +01:00
|
|
|
def test_widget_without_choices(self):
|
|
|
|
w = LinkWidget()
|
|
|
|
self.assertEqual(len(w.choices), 0)
|
|
|
|
self.assertHTMLEqual(w.render('price', ''), """<ul />""")
|
|
|
|
|
|
|
|
def test_widget(self):
|
|
|
|
choices = (
|
|
|
|
('test-val1', 'test-label1'),
|
2013-02-25 23:13:39 +01:00
|
|
|
('test-val2', 'test-label2'),
|
|
|
|
)
|
2013-02-19 02:07:28 +01:00
|
|
|
w = LinkWidget(choices=choices)
|
|
|
|
self.assertEqual(len(w.choices), 2)
|
|
|
|
self.assertHTMLEqual(w.render('price', ''), """
|
|
|
|
<ul>
|
|
|
|
<li><a href="?price=test-val1">test-label1</a></li>
|
|
|
|
<li><a href="?price=test-val2">test-label2</a></li>
|
|
|
|
</ul>""")
|
|
|
|
|
2013-02-26 08:45:30 +01:00
|
|
|
self.assertHTMLEqual(w.render('price', None), """
|
|
|
|
<ul>
|
|
|
|
<li><a href="?price=test-val1">test-label1</a></li>
|
|
|
|
<li><a href="?price=test-val2">test-label2</a></li>
|
|
|
|
</ul>""")
|
|
|
|
|
2013-02-19 02:07:28 +01:00
|
|
|
self.assertHTMLEqual(w.render('price', 'test-val1'), """
|
|
|
|
<ul>
|
2013-02-25 23:13:39 +01:00
|
|
|
<li><a class="selected"
|
|
|
|
href="?price=test-val1">test-label1</a></li>
|
2013-02-19 02:07:28 +01:00
|
|
|
<li><a href="?price=test-val2">test-label2</a></li>
|
|
|
|
</ul>""")
|
|
|
|
|
2013-02-26 08:45:30 +01:00
|
|
|
def test_widget_with_option_groups(self):
|
|
|
|
choices = (
|
|
|
|
('Audio', (
|
|
|
|
('vinyl', 'Vinyl'),
|
|
|
|
('cd', 'CD'),
|
|
|
|
)
|
|
|
|
),
|
|
|
|
('Video', (
|
|
|
|
('vhs', 'VHS Tape'),
|
|
|
|
('dvd', 'DVD'),
|
|
|
|
)
|
|
|
|
),
|
|
|
|
('unknown', 'Unknown'),
|
|
|
|
)
|
|
|
|
|
|
|
|
w = LinkWidget(choices=choices)
|
|
|
|
self.assertHTMLEqual(w.render('media', ''), """
|
|
|
|
<ul>
|
|
|
|
<li><a href="?media=vinyl">Vinyl</a></li>
|
|
|
|
<li><a href="?media=cd">CD</a></li>
|
|
|
|
<li><a href="?media=vhs">VHS Tape</a></li>
|
|
|
|
<li><a href="?media=dvd">DVD</a></li>
|
|
|
|
<li><a href="?media=unknown">Unknown</a></li>
|
|
|
|
</ul>""")
|
|
|
|
|
|
|
|
def test_widget_with_blank_choice(self):
|
|
|
|
choices = (
|
|
|
|
('', '---------'),
|
|
|
|
('test-val1', 'test-label1'),
|
|
|
|
('test-val2', 'test-label2'),
|
|
|
|
)
|
|
|
|
|
|
|
|
w = LinkWidget(choices=choices)
|
|
|
|
self.assertHTMLEqual(w.render('price', ''), """
|
|
|
|
<ul>
|
|
|
|
<li><a class="selected" href="?price=">All</a></li>
|
|
|
|
<li><a href="?price=test-val1">test-label1</a></li>
|
|
|
|
<li><a href="?price=test-val2">test-label2</a></li>
|
|
|
|
</ul>""")
|
|
|
|
|
|
|
|
def test_widget_value_from_datadict(self):
|
|
|
|
w = LinkWidget()
|
|
|
|
data = {'price': 'test-val1'}
|
|
|
|
result = w.value_from_datadict(data, {}, 'price')
|
|
|
|
self.assertEqual(result, 'test-val1')
|
|
|
|
|
2013-02-19 02:07:28 +01:00
|
|
|
|
|
|
|
class RangeWidgetTests(TestCase):
|
|
|
|
|
|
|
|
def test_widget(self):
|
|
|
|
w = RangeWidget()
|
|
|
|
self.assertEqual(len(w.widgets), 2)
|
|
|
|
self.assertHTMLEqual(w.render('price', ''), """
|
|
|
|
<input type="text" name="price_0" />
|
|
|
|
-
|
|
|
|
<input type="text" name="price_1" />""")
|
|
|
|
|
|
|
|
self.assertHTMLEqual(w.render('price', slice(5.99, 9.99)), """
|
|
|
|
<input type="text" name="price_0" value="5.99" />
|
|
|
|
-
|
|
|
|
<input type="text" name="price_1" value="9.99" />""")
|
|
|
|
|
2015-10-07 16:07:25 +02:00
|
|
|
def test_widget_attributes(self):
|
|
|
|
w = RangeWidget(attrs={'type': 'date'})
|
|
|
|
self.assertEqual(len(w.widgets), 2)
|
|
|
|
self.assertHTMLEqual(w.render('date', ''), """
|
|
|
|
<input type="date" name="date_0" />
|
|
|
|
-
|
|
|
|
<input type="date" name="date_1" />""")
|
|
|
|
|
2015-07-31 13:17:58 +02:00
|
|
|
|
|
|
|
class BooleanWidgetTests(TestCase):
|
|
|
|
"""
|
|
|
|
"""
|
2016-02-22 22:50:09 +01:00
|
|
|
def test_widget_render(self):
|
|
|
|
w = BooleanWidget()
|
|
|
|
self.assertHTMLEqual(w.render('price', ''), """
|
|
|
|
<select name="price">
|
|
|
|
<option selected="selected" value="">Unknown</option>
|
|
|
|
<option value="true">Yes</option>
|
|
|
|
<option value="false">No</option>
|
|
|
|
</select>""")
|
|
|
|
|
2015-07-31 13:17:58 +02:00
|
|
|
def test_widget_value_from_datadict(self):
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
w = BooleanWidget()
|
|
|
|
|
|
|
|
trueActive = {'active': 'true'}
|
|
|
|
result = w.value_from_datadict(trueActive, {}, 'active')
|
|
|
|
self.assertEqual(result, True)
|
|
|
|
|
|
|
|
falseActive = {'active': 'false'}
|
|
|
|
result = w.value_from_datadict(falseActive, {}, 'active')
|
|
|
|
self.assertEqual(result, False)
|
|
|
|
|
|
|
|
result = w.value_from_datadict({}, {}, 'active')
|
|
|
|
self.assertEqual(result, None)
|
2015-12-21 22:37:33 +01:00
|
|
|
|
|
|
|
|
2016-02-05 05:16:44 +01:00
|
|
|
class CSVWidgetTests(TestCase):
|
2015-12-21 22:37:33 +01:00
|
|
|
def test_widget(self):
|
2016-02-05 05:16:44 +01:00
|
|
|
w = CSVWidget()
|
|
|
|
self.assertHTMLEqual(w.render('price', None), """
|
|
|
|
<input type="text" name="price" />""")
|
|
|
|
|
2015-12-21 22:37:33 +01:00
|
|
|
self.assertHTMLEqual(w.render('price', ''), """
|
|
|
|
<input type="text" name="price" />""")
|
|
|
|
|
|
|
|
self.assertHTMLEqual(w.render('price', '1,2'), """
|
|
|
|
<input type="text" name="price" value="1,2" />""")
|
|
|
|
|
|
|
|
self.assertHTMLEqual(w.render('price', ['1', '2']), """
|
|
|
|
<input type="text" name="price" value="1,2" />""")
|
|
|
|
|
2016-02-05 05:16:44 +01:00
|
|
|
self.assertHTMLEqual(w.render('price', [1, 2]), """
|
|
|
|
<input type="text" name="price" value="1,2" />""")
|
|
|
|
|
2015-12-21 22:37:33 +01:00
|
|
|
def test_widget_value_from_datadict(self):
|
2016-02-05 05:16:44 +01:00
|
|
|
w = CSVWidget()
|
2016-02-05 08:01:12 +01:00
|
|
|
|
|
|
|
data = {'price': None}
|
|
|
|
result = w.value_from_datadict(data, {}, 'price')
|
|
|
|
self.assertEqual(result, None)
|
|
|
|
|
2015-12-21 22:37:33 +01:00
|
|
|
data = {'price': '1'}
|
|
|
|
result = w.value_from_datadict(data, {}, 'price')
|
|
|
|
self.assertEqual(result, ['1'])
|
|
|
|
|
|
|
|
data = {'price': '1,2'}
|
|
|
|
result = w.value_from_datadict(data, {}, 'price')
|
|
|
|
self.assertEqual(result, ['1', '2'])
|
|
|
|
|
2016-02-05 08:01:12 +01:00
|
|
|
data = {'price': '1,,2'}
|
2015-12-21 22:37:33 +01:00
|
|
|
result = w.value_from_datadict(data, {}, 'price')
|
2016-02-05 08:01:12 +01:00
|
|
|
self.assertEqual(result, ['1', '', '2'])
|
2015-12-21 22:37:33 +01:00
|
|
|
|
2016-08-10 23:14:57 +02:00
|
|
|
data = {'price': '1,'}
|
|
|
|
result = w.value_from_datadict(data, {}, 'price')
|
|
|
|
self.assertEqual(result, ['1', ''])
|
|
|
|
|
|
|
|
data = {'price': ','}
|
|
|
|
result = w.value_from_datadict(data, {}, 'price')
|
|
|
|
self.assertEqual(result, ['', ''])
|
|
|
|
|
2015-12-21 22:37:33 +01:00
|
|
|
data = {'price': ''}
|
|
|
|
result = w.value_from_datadict(data, {}, 'price')
|
2016-08-10 23:14:57 +02:00
|
|
|
self.assertEqual(result, [])
|
2015-12-21 22:37:33 +01:00
|
|
|
|
|
|
|
result = w.value_from_datadict({}, {}, 'price')
|
2016-02-05 05:16:44 +01:00
|
|
|
self.assertEqual(result, None)
|