~ubuntu-branches/ubuntu/quantal/python-django/quantal-security

« back to all changes in this revision

Viewing changes to tests/regressiontests/model_forms_regress/tests.py

  • Committer: Bazaar Package Importer
  • Author(s): Jamie Strandboge
  • Date: 2010-10-12 11:34:35 UTC
  • mfrom: (1.2.7 upstream)
  • mto: This revision was merged to the branch mainline in revision 30.
  • Revision ID: james.westby@ubuntu.com-20101012113435-9lnsrh0i3mxozbt0
Tags: upstream-1.2.3
ImportĀ upstreamĀ versionĀ 1.2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
from django.conf import settings
7
7
from django.test import TestCase
8
8
 
9
 
from models import Person, RealPerson, Triple, FilePathModel, Article, Publication, CustomFF, Author, Author1
 
9
from models import Person, RealPerson, Triple, FilePathModel, Article, \
 
10
    Publication, CustomFF, Author, Author1, Homepage
10
11
 
11
12
 
12
13
class ModelMultipleChoiceFieldTests(TestCase):
212
213
    def test_11183(self):
213
214
        form1 = ModelChoiceForm()
214
215
        field1 = form1.fields['person']
215
 
        # To allow the widget to change the queryset of field1.widget.choices correctly, 
 
216
        # To allow the widget to change the queryset of field1.widget.choices correctly,
216
217
        # without affecting other forms, the following must hold:
217
218
        self.assert_(field1 is not ModelChoiceForm.base_fields['person'])
218
219
        self.assert_(field1.widget.choices.field is field1)
 
220
 
 
221
class HomepageForm(forms.ModelForm):
 
222
    class Meta:
 
223
        model = Homepage
 
224
 
 
225
class URLFieldTests(TestCase):
 
226
    def test_url_on_modelform(self):
 
227
        "Check basic URL field validation on model forms"
 
228
        self.assertFalse(HomepageForm({'url': 'foo'}).is_valid())
 
229
        self.assertFalse(HomepageForm({'url': 'http://'}).is_valid())
 
230
        self.assertFalse(HomepageForm({'url': 'http://example'}).is_valid())
 
231
        self.assertFalse(HomepageForm({'url': 'http://example.'}).is_valid())
 
232
        self.assertFalse(HomepageForm({'url': 'http://com.'}).is_valid())
 
233
 
 
234
        self.assertTrue(HomepageForm({'url': 'http://localhost'}).is_valid())
 
235
        self.assertTrue(HomepageForm({'url': 'http://example.com'}).is_valid())
 
236
        self.assertTrue(HomepageForm({'url': 'http://www.example.com'}).is_valid())
 
237
        self.assertTrue(HomepageForm({'url': 'http://www.example.com:8000'}).is_valid())
 
238
        self.assertTrue(HomepageForm({'url': 'http://www.example.com/test'}).is_valid())
 
239
        self.assertTrue(HomepageForm({'url': 'http://www.example.com:8000/test'}).is_valid())
 
240
        self.assertTrue(HomepageForm({'url': 'http://example.com/foo/bar'}).is_valid())
 
241
 
 
242
    def test_http_prefixing(self):
 
243
        "If the http:// prefix is omitted on form input, the field adds it again. (Refs #13613)"
 
244
        form = HomepageForm({'url': 'example.com'})
 
245
        form.is_valid()
 
246
        # self.assertTrue(form.is_valid())
 
247
        # self.assertEquals(form.cleaned_data['url'], 'http://example.com/')
 
248
 
 
249
        form = HomepageForm({'url': 'example.com/test'})
 
250
        form.is_valid()
 
251
        # self.assertTrue(form.is_valid())
 
252
        # self.assertEquals(form.cleaned_data['url'], 'http://example.com/test')
 
253
 
 
254
 
 
255
class FormFieldCallbackTests(TestCase):
 
256
 
 
257
    def test_baseform_with_widgets_in_meta(self):
 
258
        """Regression for #13095: Using base forms with widgets defined in Meta should not raise errors."""
 
259
        widget = forms.Textarea()
 
260
 
 
261
        class BaseForm(forms.ModelForm):
 
262
            class Meta:
 
263
                model = Person
 
264
                widgets = {'name': widget}
 
265
 
 
266
        Form = modelform_factory(Person, form=BaseForm)
 
267
        self.assertTrue(Form.base_fields['name'].widget is widget)
 
268
 
 
269
    def test_custom_callback(self):
 
270
        """Test that a custom formfield_callback is used if provided"""
 
271
 
 
272
        callback_args = []
 
273
 
 
274
        def callback(db_field, **kwargs):
 
275
            callback_args.append((db_field, kwargs))
 
276
            return db_field.formfield(**kwargs)
 
277
 
 
278
        widget = forms.Textarea()
 
279
 
 
280
        class BaseForm(forms.ModelForm):
 
281
            class Meta:
 
282
                model = Person
 
283
                widgets = {'name': widget}
 
284
 
 
285
        _ = modelform_factory(Person, form=BaseForm,
 
286
                              formfield_callback=callback)
 
287
        id_field, name_field = Person._meta.fields
 
288
 
 
289
        self.assertEqual(callback_args,
 
290
                         [(id_field, {}), (name_field, {'widget': widget})])
 
291
 
 
292
    def test_bad_callback(self):
 
293
        # A bad callback provided by user still gives an error
 
294
        self.assertRaises(TypeError, modelform_factory, Person,
 
295
                          formfield_callback='not a function or callable')
 
296