Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

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
  • Loading branch information...
commit 1bb3ed72644c68ae3cac9ee26cf522bff837a59d 1 parent 5a803f5
@freakboy3742 freakboy3742 authored
Showing with 246 additions and 0 deletions.
  1. +246 −0 tests/regressiontests/forms/models.py
View
246 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.
+
+"""}
Please sign in to comment.
Something went wrong with that request. Please try again.