diff options
author | Nishanth Amuluru | 2011-01-08 11:20:57 +0530 |
---|---|---|
committer | Nishanth Amuluru | 2011-01-08 11:20:57 +0530 |
commit | 65411d01d448ff0cd4abd14eee14cf60b5f8fc20 (patch) | |
tree | b4c404363c4c63a61d6e2f8bd26c5b057c1fb09d /parts/django/tests/modeltests/model_forms/tests.py | |
parent | 2e35094d43b4cc6974172e1febf76abb50f086ec (diff) | |
download | pytask-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.py | 185 |
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()) + |