From 1bb3ed72644c68ae3cac9ee26cf522bff837a59d Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 12 May 2007 04:19:21 +0000 Subject: [PATCH] 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 --- tests/regressiontests/forms/models.py | 246 ++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) 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 + + + + +
Hold down "Control", or "Command" on a Mac, to select more than one. + +# 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 + + + + +
Hold down "Control", or "Command" on a Mac, to select more than one. + +# Check that the form is valid +>>> f.is_valid() +True + +# Form can be saved! +>>> f.save() + + +# 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 + + + + +
Hold down "Control", or "Command" on a Mac, to select more than one. + +# 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 + + + + +
Hold down "Control", or "Command" on a Mac, to select more than one. + +# 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 + + + + +
Hold down "Control", or "Command" on a Mac, to select more than one. + +# Check that the form is valid +>>> f.is_valid() +True + +# Form can be saved! +>>> f.save() + + +# 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 + + +
  • This field is required.
+
  • This field is required.
+
Hold down "Control", or "Command" on a Mac, to select more than one. + +# 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. + +"""}