summaryrefslogtreecommitdiff
path: root/parts/django/tests/modeltests/model_forms/tests.py
diff options
context:
space:
mode:
authorNishanth Amuluru2011-01-08 11:20:57 +0530
committerNishanth Amuluru2011-01-08 11:20:57 +0530
commit65411d01d448ff0cd4abd14eee14cf60b5f8fc20 (patch)
treeb4c404363c4c63a61d6e2f8bd26c5b057c1fb09d /parts/django/tests/modeltests/model_forms/tests.py
parent2e35094d43b4cc6974172e1febf76abb50f086ec (diff)
downloadpytask-65411d01d448ff0cd4abd14eee14cf60b5f8fc20.tar.gz
pytask-65411d01d448ff0cd4abd14eee14cf60b5f8fc20.tar.bz2
pytask-65411d01d448ff0cd4abd14eee14cf60b5f8fc20.zip
Added buildout stuff and made changes accordingly
--HG-- rename : profile/management/__init__.py => eggs/djangorecipe-0.20-py2.6.egg/EGG-INFO/dependency_links.txt rename : profile/management/__init__.py => eggs/djangorecipe-0.20-py2.6.egg/EGG-INFO/not-zip-safe rename : profile/management/__init__.py => eggs/infrae.subversion-1.4.5-py2.6.egg/EGG-INFO/dependency_links.txt rename : profile/management/__init__.py => eggs/infrae.subversion-1.4.5-py2.6.egg/EGG-INFO/not-zip-safe rename : profile/management/__init__.py => eggs/mercurial-1.7.3-py2.6-linux-x86_64.egg/EGG-INFO/dependency_links.txt rename : profile/management/__init__.py => eggs/mercurial-1.7.3-py2.6-linux-x86_64.egg/EGG-INFO/not-zip-safe rename : profile/management/__init__.py => eggs/py-1.4.0-py2.6.egg/EGG-INFO/dependency_links.txt rename : profile/management/__init__.py => eggs/py-1.4.0-py2.6.egg/EGG-INFO/not-zip-safe rename : profile/management/__init__.py => eggs/zc.buildout-1.5.2-py2.6.egg/EGG-INFO/dependency_links.txt rename : profile/management/__init__.py => eggs/zc.buildout-1.5.2-py2.6.egg/EGG-INFO/not-zip-safe rename : profile/management/__init__.py => eggs/zc.recipe.egg-1.3.2-py2.6.egg/EGG-INFO/dependency_links.txt rename : profile/management/__init__.py => eggs/zc.recipe.egg-1.3.2-py2.6.egg/EGG-INFO/not-zip-safe rename : profile/management/__init__.py => parts/django/Django.egg-info/dependency_links.txt rename : taskapp/models.py => parts/django/django/conf/app_template/models.py rename : taskapp/tests.py => parts/django/django/conf/app_template/tests.py rename : taskapp/views.py => parts/django/django/conf/app_template/views.py rename : taskapp/views.py => parts/django/django/contrib/gis/tests/geo3d/views.py rename : profile/management/__init__.py => parts/django/tests/modeltests/delete/__init__.py rename : profile/management/__init__.py => parts/django/tests/modeltests/files/__init__.py rename : profile/management/__init__.py => parts/django/tests/modeltests/invalid_models/__init__.py rename : profile/management/__init__.py => parts/django/tests/modeltests/m2m_signals/__init__.py rename : profile/management/__init__.py => parts/django/tests/modeltests/model_package/__init__.py rename : profile/management/__init__.py => parts/django/tests/regressiontests/bash_completion/__init__.py rename : profile/management/__init__.py => parts/django/tests/regressiontests/bash_completion/management/__init__.py rename : profile/management/__init__.py => parts/django/tests/regressiontests/bash_completion/management/commands/__init__.py rename : profile/management/__init__.py => parts/django/tests/regressiontests/bash_completion/models.py rename : profile/management/__init__.py => parts/django/tests/regressiontests/delete_regress/__init__.py rename : profile/management/__init__.py => parts/django/tests/regressiontests/file_storage/__init__.py rename : profile/management/__init__.py => parts/django/tests/regressiontests/max_lengths/__init__.py rename : profile/forms.py => pytask/profile/forms.py rename : profile/management/__init__.py => pytask/profile/management/__init__.py rename : profile/management/commands/seed_db.py => pytask/profile/management/commands/seed_db.py rename : profile/models.py => pytask/profile/models.py rename : profile/templatetags/user_tags.py => pytask/profile/templatetags/user_tags.py rename : taskapp/tests.py => pytask/profile/tests.py rename : profile/urls.py => pytask/profile/urls.py rename : profile/utils.py => pytask/profile/utils.py rename : profile/views.py => pytask/profile/views.py rename : static/css/base.css => pytask/static/css/base.css rename : taskapp/tests.py => pytask/taskapp/tests.py rename : taskapp/views.py => pytask/taskapp/views.py rename : templates/base.html => pytask/templates/base.html rename : templates/profile/browse_notifications.html => pytask/templates/profile/browse_notifications.html rename : templates/profile/edit.html => pytask/templates/profile/edit.html rename : templates/profile/view.html => pytask/templates/profile/view.html rename : templates/profile/view_notification.html => pytask/templates/profile/view_notification.html rename : templates/registration/activate.html => pytask/templates/registration/activate.html rename : templates/registration/activation_email.txt => pytask/templates/registration/activation_email.txt rename : templates/registration/activation_email_subject.txt => pytask/templates/registration/activation_email_subject.txt rename : templates/registration/logged_out.html => pytask/templates/registration/logged_out.html rename : templates/registration/login.html => pytask/templates/registration/login.html rename : templates/registration/logout.html => pytask/templates/registration/logout.html rename : templates/registration/password_change_done.html => pytask/templates/registration/password_change_done.html rename : templates/registration/password_change_form.html => pytask/templates/registration/password_change_form.html rename : templates/registration/password_reset_complete.html => pytask/templates/registration/password_reset_complete.html rename : templates/registration/password_reset_confirm.html => pytask/templates/registration/password_reset_confirm.html rename : templates/registration/password_reset_done.html => pytask/templates/registration/password_reset_done.html rename : templates/registration/password_reset_email.html => pytask/templates/registration/password_reset_email.html rename : templates/registration/password_reset_form.html => pytask/templates/registration/password_reset_form.html rename : templates/registration/registration_complete.html => pytask/templates/registration/registration_complete.html rename : templates/registration/registration_form.html => pytask/templates/registration/registration_form.html rename : utils.py => pytask/utils.py
Diffstat (limited to 'parts/django/tests/modeltests/model_forms/tests.py')
-rw-r--r--parts/django/tests/modeltests/model_forms/tests.py185
1 files changed, 185 insertions, 0 deletions
diff --git a/parts/django/tests/modeltests/model_forms/tests.py b/parts/django/tests/modeltests/model_forms/tests.py
new file mode 100644
index 0000000..c5647c7
--- /dev/null
+++ b/parts/django/tests/modeltests/model_forms/tests.py
@@ -0,0 +1,185 @@
+import datetime
+from django.test import TestCase
+from django import forms
+from models import Category, Writer, Book, DerivedBook, Post
+from mforms import (ProductForm, PriceForm, BookForm, DerivedBookForm,
+ ExplicitPKForm, PostForm, DerivedPostForm, CustomWriterForm)
+
+
+class IncompleteCategoryFormWithFields(forms.ModelForm):
+ """
+ A form that replaces the model's url field with a custom one. This should
+ prevent the model field's validation from being called.
+ """
+ url = forms.CharField(required=False)
+
+ class Meta:
+ fields = ('name', 'slug')
+ model = Category
+
+class IncompleteCategoryFormWithExclude(forms.ModelForm):
+ """
+ A form that replaces the model's url field with a custom one. This should
+ prevent the model field's validation from being called.
+ """
+ url = forms.CharField(required=False)
+
+ class Meta:
+ exclude = ['url']
+ model = Category
+
+
+class ValidationTest(TestCase):
+ def test_validates_with_replaced_field_not_specified(self):
+ form = IncompleteCategoryFormWithFields(data={'name': 'some name', 'slug': 'some-slug'})
+ assert form.is_valid()
+
+ def test_validates_with_replaced_field_excluded(self):
+ form = IncompleteCategoryFormWithExclude(data={'name': 'some name', 'slug': 'some-slug'})
+ assert form.is_valid()
+
+ def test_notrequired_overrides_notblank(self):
+ form = CustomWriterForm({})
+ assert form.is_valid()
+
+# unique/unique_together validation
+class UniqueTest(TestCase):
+ def setUp(self):
+ self.writer = Writer.objects.create(name='Mike Royko')
+
+ def test_simple_unique(self):
+ form = ProductForm({'slug': 'teddy-bear-blue'})
+ self.assertTrue(form.is_valid())
+ obj = form.save()
+ form = ProductForm({'slug': 'teddy-bear-blue'})
+ self.assertEqual(len(form.errors), 1)
+ self.assertEqual(form.errors['slug'], [u'Product with this Slug already exists.'])
+ form = ProductForm({'slug': 'teddy-bear-blue'}, instance=obj)
+ self.assertTrue(form.is_valid())
+
+ def test_unique_together(self):
+ """ModelForm test of unique_together constraint"""
+ form = PriceForm({'price': '6.00', 'quantity': '1'})
+ self.assertTrue(form.is_valid())
+ form.save()
+ form = PriceForm({'price': '6.00', 'quantity': '1'})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(len(form.errors), 1)
+ self.assertEqual(form.errors['__all__'], [u'Price with this Price and Quantity already exists.'])
+
+ def test_unique_null(self):
+ title = 'I May Be Wrong But I Doubt It'
+ form = BookForm({'title': title, 'author': self.writer.pk})
+ self.assertTrue(form.is_valid())
+ form.save()
+ form = BookForm({'title': title, 'author': self.writer.pk})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(len(form.errors), 1)
+ self.assertEqual(form.errors['__all__'], [u'Book with this Title and Author already exists.'])
+ form = BookForm({'title': title})
+ self.assertTrue(form.is_valid())
+ form.save()
+ form = BookForm({'title': title})
+ self.assertTrue(form.is_valid())
+
+ def test_inherited_unique(self):
+ title = 'Boss'
+ Book.objects.create(title=title, author=self.writer, special_id=1)
+ form = DerivedBookForm({'title': 'Other', 'author': self.writer.pk, 'special_id': u'1', 'isbn': '12345'})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(len(form.errors), 1)
+ self.assertEqual(form.errors['special_id'], [u'Book with this Special id already exists.'])
+
+ def test_inherited_unique_together(self):
+ title = 'Boss'
+ form = BookForm({'title': title, 'author': self.writer.pk})
+ self.assertTrue(form.is_valid())
+ form.save()
+ form = DerivedBookForm({'title': title, 'author': self.writer.pk, 'isbn': '12345'})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(len(form.errors), 1)
+ self.assertEqual(form.errors['__all__'], [u'Book with this Title and Author already exists.'])
+
+ def test_abstract_inherited_unique(self):
+ title = 'Boss'
+ isbn = '12345'
+ dbook = DerivedBook.objects.create(title=title, author=self.writer, isbn=isbn)
+ form = DerivedBookForm({'title': 'Other', 'author': self.writer.pk, 'isbn': isbn})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(len(form.errors), 1)
+ self.assertEqual(form.errors['isbn'], [u'Derived book with this Isbn already exists.'])
+
+ def test_abstract_inherited_unique_together(self):
+ title = 'Boss'
+ isbn = '12345'
+ dbook = DerivedBook.objects.create(title=title, author=self.writer, isbn=isbn)
+ form = DerivedBookForm({'title': 'Other', 'author': self.writer.pk, 'isbn': '9876', 'suffix1': u'0', 'suffix2': u'0'})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(len(form.errors), 1)
+ self.assertEqual(form.errors['__all__'], [u'Derived book with this Suffix1 and Suffix2 already exists.'])
+
+ def test_explicitpk_unspecified(self):
+ """Test for primary_key being in the form and failing validation."""
+ form = ExplicitPKForm({'key': u'', 'desc': u'' })
+ self.assertFalse(form.is_valid())
+
+ def test_explicitpk_unique(self):
+ """Ensure keys and blank character strings are tested for uniqueness."""
+ form = ExplicitPKForm({'key': u'key1', 'desc': u''})
+ self.assertTrue(form.is_valid())
+ form.save()
+ form = ExplicitPKForm({'key': u'key1', 'desc': u''})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(len(form.errors), 3)
+ self.assertEqual(form.errors['__all__'], [u'Explicit pk with this Key and Desc already exists.'])
+ self.assertEqual(form.errors['desc'], [u'Explicit pk with this Desc already exists.'])
+ self.assertEqual(form.errors['key'], [u'Explicit pk with this Key already exists.'])
+
+ def test_unique_for_date(self):
+ p = Post.objects.create(title="Django 1.0 is released",
+ slug="Django 1.0", subtitle="Finally", posted=datetime.date(2008, 9, 3))
+ form = PostForm({'title': "Django 1.0 is released", 'posted': '2008-09-03'})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(len(form.errors), 1)
+ self.assertEqual(form.errors['title'], [u'Title must be unique for Posted date.'])
+ form = PostForm({'title': "Work on Django 1.1 begins", 'posted': '2008-09-03'})
+ self.assertTrue(form.is_valid())
+ form = PostForm({'title': "Django 1.0 is released", 'posted': '2008-09-04'})
+ self.assertTrue(form.is_valid())
+ form = PostForm({'slug': "Django 1.0", 'posted': '2008-01-01'})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(len(form.errors), 1)
+ self.assertEqual(form.errors['slug'], [u'Slug must be unique for Posted year.'])
+ form = PostForm({'subtitle': "Finally", 'posted': '2008-09-30'})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(form.errors['subtitle'], [u'Subtitle must be unique for Posted month.'])
+ form = PostForm({'subtitle': "Finally", "title": "Django 1.0 is released",
+ "slug": "Django 1.0", 'posted': '2008-09-03'}, instance=p)
+ self.assertTrue(form.is_valid())
+ form = PostForm({'title': "Django 1.0 is released"})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(len(form.errors), 1)
+ self.assertEqual(form.errors['posted'], [u'This field is required.'])
+
+ def test_inherited_unique_for_date(self):
+ p = Post.objects.create(title="Django 1.0 is released",
+ slug="Django 1.0", subtitle="Finally", posted=datetime.date(2008, 9, 3))
+ form = DerivedPostForm({'title': "Django 1.0 is released", 'posted': '2008-09-03'})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(len(form.errors), 1)
+ self.assertEqual(form.errors['title'], [u'Title must be unique for Posted date.'])
+ form = DerivedPostForm({'title': "Work on Django 1.1 begins", 'posted': '2008-09-03'})
+ self.assertTrue(form.is_valid())
+ form = DerivedPostForm({'title': "Django 1.0 is released", 'posted': '2008-09-04'})
+ self.assertTrue(form.is_valid())
+ form = DerivedPostForm({'slug': "Django 1.0", 'posted': '2008-01-01'})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(len(form.errors), 1)
+ self.assertEqual(form.errors['slug'], [u'Slug must be unique for Posted year.'])
+ form = DerivedPostForm({'subtitle': "Finally", 'posted': '2008-09-30'})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(form.errors['subtitle'], [u'Subtitle must be unique for Posted month.'])
+ form = DerivedPostForm({'subtitle': "Finally", "title": "Django 1.0 is released",
+ "slug": "Django 1.0", 'posted': '2008-09-03'}, instance=p)
+ self.assertTrue(form.is_valid())
+