parts/django/tests/regressiontests/custom_columns_regress/tests.py
changeset 307 c6bca38c1cbf
equal deleted inserted replaced
306:5ff1fc726848 307:c6bca38c1cbf
       
     1 from django.test import TestCase
       
     2 from django.core.exceptions import FieldError
       
     3 
       
     4 from models import Author, Article
       
     5 
       
     6 def pks(objects):
       
     7     """ Return pks to be able to compare lists"""
       
     8     return [o.pk for o in objects]
       
     9 
       
    10 class CustomColumnRegression(TestCase):
       
    11 
       
    12     def assertRaisesMessage(self, exc, msg, func, *args, **kwargs):
       
    13         try:
       
    14             func(*args, **kwargs)
       
    15         except Exception, e:
       
    16             self.assertEqual(msg, str(e))
       
    17             self.assertTrue(isinstance(e, exc), "Expected %s, got %s" % (exc, type(e)))
       
    18 
       
    19     def setUp(self):
       
    20         self.a1 = Author.objects.create(first_name='John', last_name='Smith')
       
    21         self.a2 = Author.objects.create(first_name='Peter', last_name='Jones')
       
    22         self.authors = [self.a1, self.a2]
       
    23 
       
    24     def test_basic_creation(self):
       
    25         art = Article(headline='Django lets you build Web apps easily', primary_author=self.a1)
       
    26         art.save()
       
    27         art.authors = [self.a1, self.a2]
       
    28 
       
    29     def test_author_querying(self):
       
    30         self.assertQuerysetEqual(
       
    31             Author.objects.all().order_by('last_name'),
       
    32             ['<Author: Peter Jones>', '<Author: John Smith>']
       
    33         )
       
    34 
       
    35     def test_author_filtering(self):
       
    36         self.assertQuerysetEqual(
       
    37             Author.objects.filter(first_name__exact='John'),
       
    38             ['<Author: John Smith>']
       
    39         )
       
    40 
       
    41     def test_author_get(self):
       
    42         self.assertEqual(self.a1, Author.objects.get(first_name__exact='John'))
       
    43 
       
    44     def test_filter_on_nonexistant_field(self):
       
    45         self.assertRaisesMessage(
       
    46             FieldError,
       
    47             "Cannot resolve keyword 'firstname' into field. Choices are: Author_ID, article, first_name, last_name, primary_set",
       
    48             Author.objects.filter,
       
    49             firstname__exact='John'
       
    50         )
       
    51 
       
    52     def test_author_get_attributes(self):
       
    53         a = Author.objects.get(last_name__exact='Smith')
       
    54         self.assertEqual('John', a.first_name)
       
    55         self.assertEqual('Smith', a.last_name)
       
    56         self.assertRaisesMessage(
       
    57             AttributeError,
       
    58             "'Author' object has no attribute 'firstname'",
       
    59             getattr,
       
    60             a, 'firstname'
       
    61         )
       
    62 
       
    63         self.assertRaisesMessage(
       
    64             AttributeError,
       
    65             "'Author' object has no attribute 'last'",
       
    66             getattr,
       
    67             a, 'last'
       
    68         )
       
    69 
       
    70     def test_m2m_table(self):
       
    71         art = Article.objects.create(headline='Django lets you build Web apps easily', primary_author=self.a1)
       
    72         art.authors = self.authors
       
    73         self.assertQuerysetEqual(
       
    74             art.authors.all().order_by('last_name'),
       
    75             ['<Author: Peter Jones>', '<Author: John Smith>']
       
    76         )
       
    77         self.assertQuerysetEqual(
       
    78             self.a1.article_set.all(),
       
    79             ['<Article: Django lets you build Web apps easily>']
       
    80         )
       
    81         self.assertQuerysetEqual(
       
    82             art.authors.filter(last_name='Jones'),
       
    83             ['<Author: Peter Jones>']
       
    84         )