diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2007-05-12 04:19:21 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2007-05-12 04:19:21 +0000 |
| commit | 1bb3ed72644c68ae3cac9ee26cf522bff837a59d (patch) | |
| tree | 05c874e7deb2aca158c1ca51d62e3edb9ea81e38 /tests/regressiontests/forms/models.py | |
| parent | 5a803f5ebd9825c9e3b5845aa70bb0ce61384cfa (diff) | |
Added unit tests for form_for_model and form_for_instance.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@5196 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/forms/models.py')
| -rw-r--r-- | tests/regressiontests/forms/models.py | 246 |
1 files changed, 246 insertions, 0 deletions
diff --git a/tests/regressiontests/forms/models.py b/tests/regressiontests/forms/models.py index e69de29bb2..114256d2ec 100644 --- a/tests/regressiontests/forms/models.py +++ b/tests/regressiontests/forms/models.py @@ -0,0 +1,246 @@ +""" +Tests for the model services for forms. +""" + +from django.db import models +from django.newforms.models import form_for_instance, form_for_model +from datetime import date + +class Publication(models.Model): + title = models.CharField(maxlength=30) + + def __str__(self): + return self.title + + class Meta: + ordering = ('title',) + +class Author(models.Model): + first_name = models.CharField(maxlength=30) + last_name = models.CharField(maxlength=30) + + def __str__(self): + return '%s %s' % (self.first_name, self.last_name) + + class Meta: + ordering = ('last_name','first_name') + +class Article(models.Model): + headline = models.CharField(maxlength=100) + publication = models.ForeignKey(Publication) + price = models.FloatField(decimal_places=2, max_digits=8) + authors = models.ManyToManyField(Author) + pub_date = models.DateTimeField() + + def __str__(self): + return self.headline + + class Meta: + ordering = ('headline',) + +__test__ = {'API_TESTS':""" +# Create some Authors. +>>> a = Author(first_name='John', last_name='Smith') +>>> a.save() + +>>> a2 = Author(first_name='Peter', last_name='Jones') +>>> a2.save() + +>>> a3 = Author(first_name='Alice', last_name='Fletcher') +>>> a3.save() + +# Create some Publications. +>>> p1 = Publication(id=None, title='The Python Journal') +>>> p1.save() + +>>> p2 = Publication(id=None, title='Science News') +>>> p2.save() + +# Create an article +>>> art = Article(headline='Django lets you build web apps easily', publication=p1, pub_date=date(2006,02,05), price=2.50) +>>> art.save() + +>>> art.authors = [a, a2] + +########################################################### +# form_from_model +########################################################### + +# Create the Form for the Article model +>>> ArticleForm = form_for_model(Article) + +# Instantiate the form with no data +>>> f = ArticleForm() +>>> print f +<tr><th><label for="id_headline">Headline:</label></th><td><input id="id_headline" type="text" name="headline" maxlength="100" /></td></tr> +<tr><th><label for="id_publication">Publication:</label></th><td><select name="publication" id="id_publication"> +<option value="" selected="selected">---------</option> +<option value="2">Science News</option> +<option value="1">The Python Journal</option> +</select></td></tr> +<tr><th><label for="id_price">Price:</label></th><td><input type="text" name="price" id="id_price" /></td></tr> +<tr><th><label for="id_pub_date">Pub date:</label></th><td><input type="text" name="pub_date" id="id_pub_date" /></td></tr> +<tr><th><label for="id_authors">Authors:</label></th><td><select multiple="multiple" name="authors" id="id_authors"> +<option value="3">Alice Fletcher</option> +<option value="2">Peter Jones</option> +<option value="1">John Smith</option> +</select><br /> Hold down "Control", or "Command" on a Mac, to select more than one.</td></tr> + +# Check that the form is not valid +>>> f.is_valid() +False + +# Attempt to save the form. Fail, because form cannot be validated +>>> f.save() +Traceback (most recent call last): +... +AttributeError: 'ArticleForm' object has no attribute 'clean_data' + +# Instantiate the form with data +>>> f = ArticleForm({'headline':'Django cures cancer!', 'publication': 1, 'price':'3.20', 'pub_date':'2006-11-08', 'authors':[1,2]}) +>>> print f +<tr><th><label for="id_headline">Headline:</label></th><td><input id="id_headline" type="text" name="headline" value="Django cures cancer!" maxlength="100" /></td></tr> +<tr><th><label for="id_publication">Publication:</label></th><td><select name="publication" id="id_publication"> +<option value="">---------</option> +<option value="2">Science News</option> +<option value="1" selected="selected">The Python Journal</option> +</select></td></tr> +<tr><th><label for="id_price">Price:</label></th><td><input type="text" name="price" value="3.20" id="id_price" /></td></tr> +<tr><th><label for="id_pub_date">Pub date:</label></th><td><input type="text" name="pub_date" value="2006-11-08" id="id_pub_date" /></td></tr> +<tr><th><label for="id_authors">Authors:</label></th><td><select multiple="multiple" name="authors" id="id_authors"> +<option value="3">Alice Fletcher</option> +<option value="2" selected="selected">Peter Jones</option> +<option value="1" selected="selected">John Smith</option> +</select><br /> Hold down "Control", or "Command" on a Mac, to select more than one.</td></tr> + +# Check that the form is valid +>>> f.is_valid() +True + +# Form can be saved! +>>> f.save() +<Article: Django cures cancer!> + +# There are now 2 articles +>>> Article.objects.count() +2 + +# Instantiate the form with data that is missing some fields +>>> f = ArticleForm({'headline':'Django cures cancer!', 'publication': 1, 'authors':[1,2]}) +>>> print f +<tr><th><label for="id_headline">Headline:</label></th><td><input id="id_headline" type="text" name="headline" value="Django cures cancer!" maxlength="100" /></td></tr> +<tr><th><label for="id_publication">Publication:</label></th><td><select name="publication" id="id_publication"> +<option value="">---------</option> +<option value="2">Science News</option> +<option value="1" selected="selected">The Python Journal</option> +</select></td></tr> +<tr><th><label for="id_price">Price:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="price" id="id_price" /></td></tr> +<tr><th><label for="id_pub_date">Pub date:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="pub_date" id="id_pub_date" /></td></tr> +<tr><th><label for="id_authors">Authors:</label></th><td><select multiple="multiple" name="authors" id="id_authors"> +<option value="3">Alice Fletcher</option> +<option value="2" selected="selected">Peter Jones</option> +<option value="1" selected="selected">John Smith</option> +</select><br /> Hold down "Control", or "Command" on a Mac, to select more than one.</td></tr> + +# Check that the form is not valid +>>> f.is_valid() +False + +# Attempt to save the form. Fail, because form cannot be validated +>>> f.save() +Traceback (most recent call last): +... +ValueError: The Article could not be created because the data didn't validate. + +########################################################### +# form_from_instance +########################################################### + +# Create a Form for an instance of Article +>>> ArticleInstanceForm = form_for_instance(art) + +# Instantiate the form with no data +>>> f = ArticleInstanceForm() +>>> print f +<tr><th><label for="id_headline">Headline:</label></th><td><input id="id_headline" type="text" name="headline" value="Django lets you build web apps easily" maxlength="100" /></td></tr> +<tr><th><label for="id_publication">Publication:</label></th><td><select name="publication" id="id_publication"> +<option value="">---------</option> +<option value="2">Science News</option> +<option value="1" selected="selected">The Python Journal</option> +</select></td></tr> +<tr><th><label for="id_price">Price:</label></th><td><input type="text" name="price" value="2.5" id="id_price" /></td></tr> +<tr><th><label for="id_pub_date">Pub date:</label></th><td><input type="text" name="pub_date" value="2006-02-05" id="id_pub_date" /></td></tr> +<tr><th><label for="id_authors">Authors:</label></th><td><select multiple="multiple" name="authors" id="id_authors"> +<option value="3">Alice Fletcher</option> +<option value="2" selected="selected">Peter Jones</option> +<option value="1" selected="selected">John Smith</option> +</select><br /> Hold down "Control", or "Command" on a Mac, to select more than one.</td></tr> + +# Check that the form is not valid (no data dictionary provided) +>>> f.is_valid() +False + +# Attempt to save the form. Fail, because form cannot be validated +>>> f.save() +Traceback (most recent call last): +... +AttributeError: 'ArticleInstanceForm' object has no attribute 'clean_data' + +# Instantiate the form with data +>>> f = ArticleInstanceForm({'headline':'Nasa uses Python', 'publication': 2, 'price':'4.70', 'pub_date':'2007-01-21', 'authors': [3]}) +>>> print f +<tr><th><label for="id_headline">Headline:</label></th><td><input id="id_headline" type="text" name="headline" value="Nasa uses Python" maxlength="100" /></td></tr> +<tr><th><label for="id_publication">Publication:</label></th><td><select name="publication" id="id_publication"> +<option value="">---------</option> +<option value="2" selected="selected">Science News</option> +<option value="1">The Python Journal</option> +</select></td></tr> +<tr><th><label for="id_price">Price:</label></th><td><input type="text" name="price" value="4.70" id="id_price" /></td></tr> +<tr><th><label for="id_pub_date">Pub date:</label></th><td><input type="text" name="pub_date" value="2007-01-21" id="id_pub_date" /></td></tr> +<tr><th><label for="id_authors">Authors:</label></th><td><select multiple="multiple" name="authors" id="id_authors"> +<option value="3" selected="selected">Alice Fletcher</option> +<option value="2">Peter Jones</option> +<option value="1">John Smith</option> +</select><br /> Hold down "Control", or "Command" on a Mac, to select more than one.</td></tr> + +# Check that the form is valid +>>> f.is_valid() +True + +# Form can be saved! +>>> f.save() +<Article: Nasa uses Python> + +# There are still only 2 articles, as we have saved an existing instance +>>> Article.objects.count() +2 + + +# Instantiate the form with data that is missing some fields +>>> f = ArticleInstanceForm({'headline':'Nasa uses Python', 'publication': 2, 'authors': [3]}) +>>> print f +<tr><th><label for="id_headline">Headline:</label></th><td><input id="id_headline" type="text" name="headline" value="Nasa uses Python" maxlength="100" /></td></tr> +<tr><th><label for="id_publication">Publication:</label></th><td><select name="publication" id="id_publication"> +<option value="">---------</option> +<option value="2" selected="selected">Science News</option> +<option value="1">The Python Journal</option> +</select></td></tr> +<tr><th><label for="id_price">Price:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="price" id="id_price" /></td></tr> +<tr><th><label for="id_pub_date">Pub date:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="pub_date" id="id_pub_date" /></td></tr> +<tr><th><label for="id_authors">Authors:</label></th><td><select multiple="multiple" name="authors" id="id_authors"> +<option value="3" selected="selected">Alice Fletcher</option> +<option value="2">Peter Jones</option> +<option value="1">John Smith</option> +</select><br /> Hold down "Control", or "Command" on a Mac, to select more than one.</td></tr> + +# Check that the form is not valid +>>> f.is_valid() +False + +# Attempt to save the form. Fail, because form cannot be validated +>>> f.save() +Traceback (most recent call last): +... +ValueError: The Article could not be changed because the data didn't validate. + +"""} |
