From 2d3b47183a089cf6620da90a6cb7cd1c3025a7e0 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Mon, 27 Sep 2010 15:13:17 +0000 Subject: [PATCH] Migrated custom_columns_regress doctests. Thanks to Sebastian Hillig. git-svn-id: http://code.djangoproject.com/svn/django/trunk@13885 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- tests/regressiontests/backends/models.py | 1 - .../custom_columns_regress/models.py | 64 -------------- .../custom_columns_regress/tests.py | 86 +++++++++++++++++++ 3 files changed, 86 insertions(+), 65 deletions(-) create mode 100644 tests/regressiontests/custom_columns_regress/tests.py diff --git a/tests/regressiontests/backends/models.py b/tests/regressiontests/backends/models.py index 4592761ccd..82da8cdd91 100644 --- a/tests/regressiontests/backends/models.py +++ b/tests/regressiontests/backends/models.py @@ -54,5 +54,4 @@ class Post(models.Model): class Meta: db_table = 'CaseSensitive_Post' -qn = connection.ops.quote_name diff --git a/tests/regressiontests/custom_columns_regress/models.py b/tests/regressiontests/custom_columns_regress/models.py index c55daf2588..93de2370af 100644 --- a/tests/regressiontests/custom_columns_regress/models.py +++ b/tests/regressiontests/custom_columns_regress/models.py @@ -33,68 +33,4 @@ class Author(models.Model): ordering = ('last_name','first_name') -__test__ = {'API_TESTS':""" -# Create a Author. ->>> a = Author(first_name='John', last_name='Smith') ->>> a.save() ->>> a.Author_ID -1 - -# Create another author ->>> a2 = Author(first_name='Peter', last_name='Jones') ->>> a2.save() - -# Create an article ->>> art = Article(headline='Django lets you build web apps easily', primary_author=a) ->>> art.save() ->>> art.authors = [a, a2] - -# Although the table and column names on Author have been set to custom values, -# nothing about using the Author model has changed... - -# Query the available authors ->>> Author.objects.all() -[, ] - ->>> Author.objects.filter(first_name__exact='John') -[] - ->>> Author.objects.get(first_name__exact='John') - - ->>> Author.objects.filter(firstname__exact='John') -Traceback (most recent call last): - ... -FieldError: Cannot resolve keyword 'firstname' into field. Choices are: Author_ID, article, first_name, last_name, primary_set - ->>> a = Author.objects.get(last_name__exact='Smith') ->>> a.first_name -u'John' ->>> a.last_name -u'Smith' ->>> a.firstname -Traceback (most recent call last): - ... -AttributeError: 'Author' object has no attribute 'firstname' ->>> a.last -Traceback (most recent call last): - ... -AttributeError: 'Author' object has no attribute 'last' - -# Although the Article table uses a custom m2m table, -# nothing about using the m2m relationship has changed... - -# Get all the authors for an article ->>> art.authors.all() -[, ] - -# Get the articles for an author ->>> a.article_set.all() -[] - -# Query the authors across the m2m relation ->>> art.authors.filter(last_name='Jones') -[] - -"""} diff --git a/tests/regressiontests/custom_columns_regress/tests.py b/tests/regressiontests/custom_columns_regress/tests.py new file mode 100644 index 0000000000..6f6c4ecf94 --- /dev/null +++ b/tests/regressiontests/custom_columns_regress/tests.py @@ -0,0 +1,86 @@ +from django.test import TestCase +from django.core.exceptions import FieldError + +from models import Author, Article + +def pks(objects): + """ Return pks to be able to compare lists""" + return [o.pk for o in objects] + +class CustomColumnRegression(TestCase): + + def assertRaisesMessage(self, exc, msg, func, *args, **kwargs): + try: + func(*args, **kwargs) + except Exception, e: + self.assertEqual(msg, str(e)) + self.assertTrue(isinstance(e, exc), "Expected %s, got %s" % (exc, type(e))) + + def setUp(self): + self.a1 = Author.objects.create(first_name='John', last_name='Smith') + self.a2 = Author.objects.create(first_name='Peter', last_name='Jones') + self.authors = [self.a1, self.a2] + + def test_basic_creation(self): + self.assertEqual(self.a1.Author_ID, 1) + + art = Article(headline='Django lets you build web apps easily', primary_author=self.a1) + art.save() + art.authors = [self.a1, self.a2] + + def test_author_querying(self): + self.assertQuerysetEqual( + Author.objects.all().order_by('last_name'), + ['', ''] + ) + + def test_author_filtering(self): + self.assertQuerysetEqual( + Author.objects.filter(first_name__exact='John'), + [''] + ) + + def test_author_get(self): + self.assertEqual(self.a1, Author.objects.get(first_name__exact='John')) + + def test_filter_on_nonexistant_field(self): + self.assertRaisesMessage( + FieldError, + "Cannot resolve keyword 'firstname' into field. Choices are: Author_ID, article, first_name, last_name, primary_set", + Author.objects.filter, + firstname__exact='John' + ) + + def test_author_get_attributes(self): + a = Author.objects.get(last_name__exact='Smith') + self.assertEqual('John', a.first_name) + self.assertEqual('Smith', a.last_name) + self.assertRaisesMessage( + AttributeError, + "'Author' object has no attribute 'firstname'", + getattr, + a, 'firstname' + ) + + self.assertRaisesMessage( + AttributeError, + "'Author' object has no attribute 'last'", + getattr, + a, 'last' + ) + + def test_m2m_table(self): + art = Article.objects.create(headline='Django lets you build web apps easily', primary_author=self.a1) + art.authors = self.authors + self.assertQuerysetEqual( + art.authors.all().order_by('last_name'), + ['', ''] + ) + self.assertQuerysetEqual( + self.a1.article_set.all(), + [''] + ) + self.assertQuerysetEqual( + art.authors.filter(last_name='Jones'), + [''] + )