1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
|
import django
from django.test import TestCase
from django.utils.unittest import skipIf
import floppyforms.__future__ as forms
from floppyforms.__future__.models import modelform_factory, modelformset_factory, inlineformset_factory
from .models import Registration, AllFields
class BaseModelFormFieldRewritingTests(object):
'''
A base class to mixin generic tests to check if the form fields on a
modelform where set correctly to their floppyformic brother.
A subclass must implement the ``get_test_object``, ``check_field`` and ``check_widget`` methods.
'''
def test_auto_boolean(self):
form_obj = self.get_test_object('boolean')
self.check_field(form_obj, 'boolean', forms.BooleanField)
def test_auto_char(self):
form_obj = self.get_test_object('char')
self.check_field(form_obj, 'char', forms.CharField)
def test_auto_comma_separated(self):
form_obj = self.get_test_object('comma_separated')
self.check_field(form_obj, 'comma_separated', forms.CharField)
def test_auto_date(self):
form_obj = self.get_test_object('date')
self.check_field(form_obj, 'date', forms.DateField)
def test_auto_datetime(self):
form_obj = self.get_test_object('datetime')
self.check_field(form_obj, 'datetime', forms.DateTimeField)
def test_auto_decimal(self):
form_obj = self.get_test_object('decimal')
self.check_field(form_obj, 'decimal', forms.DecimalField)
def test_auto_email(self):
form_obj = self.get_test_object('email')
self.check_field(form_obj, 'email', forms.EmailField)
def test_auto_file_path(self):
form_obj = self.get_test_object('file_path')
self.check_field(form_obj, 'file_path', forms.FilePathField)
def test_auto_float_field(self):
form_obj = self.get_test_object('float_field')
self.check_field(form_obj, 'float_field', forms.FloatField)
def test_auto_integer(self):
form_obj = self.get_test_object('integer')
self.check_field(form_obj, 'integer', forms.IntegerField)
def test_auto_big_integer(self):
form_obj = self.get_test_object('big_integer')
self.check_field(form_obj, 'big_integer', forms.IntegerField)
def test_auto_ip_address(self):
form_obj = self.get_test_object('ip_address')
self.check_field(form_obj, 'ip_address', forms.IPAddressField)
def test_auto_generic_ip_address(self):
form_obj = self.get_test_object('generic_ip_address')
self.check_field(form_obj, 'generic_ip_address', forms.GenericIPAddressField)
def test_auto_null_boolean(self):
form_obj = self.get_test_object('null_boolean')
self.check_field(form_obj, 'null_boolean', forms.NullBooleanField)
def test_auto_positive_integer(self):
form_obj = self.get_test_object('positive_integer')
self.check_field(form_obj, 'positive_integer', forms.IntegerField)
def test_auto_positive_small_integer(self):
form_obj = self.get_test_object('positive_small_integer')
self.check_field(form_obj, 'positive_small_integer', forms.IntegerField)
def test_auto_slug(self):
form_obj = self.get_test_object('slug')
self.check_field(form_obj, 'slug', forms.SlugField)
def test_auto_small_integer(self):
form_obj = self.get_test_object('small_integer')
self.check_field(form_obj, 'small_integer', forms.IntegerField)
def test_auto_text(self):
form_obj = self.get_test_object('text')
self.check_field(form_obj, 'text', forms.CharField)
self.check_widget(form_obj, 'text', forms.Textarea)
def test_auto_time(self):
form_obj = self.get_test_object('time')
self.check_field(form_obj, 'time', forms.TimeField)
def test_auto_url(self):
form_obj = self.get_test_object('url')
self.check_field(form_obj, 'url', forms.URLField)
def test_auto_file_field(self):
form_obj = self.get_test_object('file_field')
self.check_field(form_obj, 'file_field', forms.FileField)
def test_auto_image(self):
form_obj = self.get_test_object('image')
self.check_field(form_obj, 'image', forms.ImageField)
def test_auto_fk(self):
form_obj = self.get_test_object('fk')
self.check_field(form_obj, 'fk', forms.ModelChoiceField)
def test_auto_m2m(self):
form_obj = self.get_test_object('m2m')
self.check_field(form_obj, 'm2m', forms.ModelMultipleChoiceField)
def test_auto_one(self):
form_obj = self.get_test_object('one')
self.check_field(form_obj, 'one', forms.ModelChoiceField)
def test_auto_choices(self):
form_obj = self.get_test_object('choices')
self.check_field(form_obj, 'choices', forms.TypedChoiceField)
@skipIf(django.VERSION < (1, 6), 'Only applies to Django >= 1.6')
class ModelFormTests(BaseModelFormFieldRewritingTests, TestCase):
def get_test_object(self, field_name):
class Form(forms.ModelForm):
class Meta:
model = AllFields
fields = (field_name,)
return Form
def check_field(self, Form, field_name, field_class):
self.assertIsInstance(Form.base_fields[field_name], field_class)
def check_widget(self, Form, field_name, widget_class):
self.assertIsInstance(Form.base_fields[field_name].widget, widget_class)
@skipIf(django.VERSION < (1, 6), 'Only applies to Django >= 1.6')
class ModelFormFactoryTests(BaseModelFormFieldRewritingTests, TestCase):
def get_test_object(self, field_name):
return modelform_factory(AllFields, form=forms.ModelForm,
fields=(field_name,))
def check_field(self, Form, field_name, field_class):
self.assertIsInstance(Form.base_fields[field_name], field_class)
def check_widget(self, Form, field_name, widget_class):
self.assertIsInstance(Form.base_fields[field_name].widget, widget_class)
@skipIf(django.VERSION < (1, 6), 'Only applies to Django >= 1.6')
class ModelFormSetFactoryTests(BaseModelFormFieldRewritingTests, TestCase):
def get_test_object(self, field_name):
return modelformset_factory(
AllFields,
form=forms.ModelForm,
fields=(field_name,))
def check_field(self, Formset, field_name, field_class):
self.assertIsInstance(Formset.form.base_fields[field_name], field_class)
def check_widget(self, Formset, field_name, widget_class):
self.assertIsInstance(Formset.form.base_fields[field_name].widget, widget_class)
@skipIf(django.VERSION < (1, 6), 'Only applies to Django >= 1.6')
class InlineFormSetFactoryTests(BaseModelFormFieldRewritingTests, TestCase):
def get_test_object(self, field_name):
return inlineformset_factory(
Registration,
AllFields,
fk_name='fk',
form=forms.ModelForm,
fields=(field_name,))
def check_field(self, Formset, field_name, field_class):
self.assertIsInstance(Formset.form.base_fields[field_name], field_class)
def check_widget(self, Formset, field_name, widget_class):
self.assertIsInstance(Formset.form.base_fields[field_name].widget, widget_class)
|