Add base csv widget tests

This commit is contained in:
Ryan P Kilby 2016-09-23 18:06:56 -04:00
parent 8aba6498f5
commit 9aa98cee97
3 changed files with 83 additions and 4 deletions

View File

@ -3,14 +3,12 @@ from __future__ import unicode_literals
from datetime import datetime, time, timedelta, tzinfo
import decimal
import unittest
import django
from django import forms
from django.test import TestCase, override_settings
from django.utils.timezone import make_aware, get_default_timezone
from django_filters.widgets import RangeWidget
from django_filters.widgets import BaseCSVWidget, CSVWidget, RangeWidget
from django_filters.fields import (
Lookup, LookupTypeField, BaseCSVField, BaseRangeField, RangeField,
DateRangeField, DateTimeRangeField, TimeRangeField, IsoDateTimeField
@ -196,6 +194,25 @@ class BaseCSVFieldTests(TestCase):
with self.assertRaises(forms.ValidationError):
self.field.clean(['a', 'b', 'c'])
def test_derived_widget(self):
with self.assertRaises(AssertionError) as excinfo:
BaseCSVField(widget=RangeWidget())
msg = str(excinfo.exception)
self.assertIn("'BaseCSVField.widget' must be a widget class", msg)
self.assertIn("RangeWidget", msg)
widget = CSVWidget()
field = BaseCSVField(widget=widget)
self.assertIs(field.widget, widget)
field = BaseCSVField(widget=CSVWidget)
self.assertIsInstance(field.widget, CSVWidget)
field = BaseCSVField(widget=forms.Select)
self.assertIsInstance(field.widget, forms.Select)
self.assertIsInstance(field.widget, BaseCSVWidget)
class BaseRangeFieldTests(TestCase):
def setUp(self):

View File

@ -9,7 +9,7 @@ import warnings
from django import forms
from django.test import TestCase, override_settings
from django_filters import filters
from django_filters import filters, widgets
from django_filters.fields import (
Lookup,
RangeField,
@ -1097,3 +1097,10 @@ class OrderingFilterTests(TestCase):
with self.assertRaises(AssertionError) as ctx:
f([0, 1, 2])
self.assertEqual(str(ctx.exception), "'fields' must contain strings or (field name, param name) pairs.")
def test_widget(self):
f = OrderingFilter()
widget = f.field.widget
self.assertIsInstance(widget, widgets.BaseCSVWidget)
self.assertIsInstance(widget, forms.Select)

View File

@ -5,6 +5,7 @@ from django.test import TestCase
from django.forms import TextInput, Select
from django_filters.widgets import BooleanWidget
from django_filters.widgets import BaseCSVWidget
from django_filters.widgets import CSVWidget
from django_filters.widgets import RangeWidget
from django_filters.widgets import LinkWidget
@ -182,6 +183,9 @@ class CSVWidgetTests(TestCase):
self.assertHTMLEqual(w.render('price', ''), """
<input type="text" name="price" />""")
self.assertHTMLEqual(w.render('price', '1'), """
<input type="text" name="price" value="1" />""")
self.assertHTMLEqual(w.render('price', '1,2'), """
<input type="text" name="price" value="1,2" />""")
@ -224,3 +228,54 @@ class CSVWidgetTests(TestCase):
result = w.value_from_datadict({}, {}, 'price')
self.assertEqual(result, None)
class CSVSelectTests(TestCase):
class CSVSelect(BaseCSVWidget, Select):
pass
def test_widget(self):
w = self.CSVSelect(choices=((1, 'a'), (2, 'b')))
self.assertHTMLEqual(
w.render('price', None),
"""
<select name="price">
<option value="1">a</option>
<option value="2">b</option>
</select>
"""
)
self.assertHTMLEqual(
w.render('price', ''),
"""
<select name="price">
<option value="1">a</option>
<option value="2">b</option>
</select>
""")
self.assertHTMLEqual(
w.render('price', '1'),
"""
<select name="price">
<option selected="selected" value="1">a</option>
<option value="2">b</option>
</select>
""")
self.assertHTMLEqual(
w.render('price', '1,2'),
"""
<select name="price">
<option value="1">a</option>
<option value="2">b</option>
</select>
"""
)
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" />""")