parts/django/tests/modeltests/get_latest/tests.py
changeset 69 c6bca38c1cbf
equal deleted inserted replaced
68:5ff1fc726848 69:c6bca38c1cbf
       
     1 from datetime import datetime
       
     2 
       
     3 from django.test import TestCase
       
     4 
       
     5 from models import Article, Person
       
     6 
       
     7 
       
     8 class LatestTests(TestCase):
       
     9     def test_latest(self):
       
    10         # Because no Articles exist yet, latest() raises ArticleDoesNotExist.
       
    11         self.assertRaises(Article.DoesNotExist, Article.objects.latest)
       
    12 
       
    13         a1 = Article.objects.create(
       
    14             headline="Article 1", pub_date=datetime(2005, 7, 26),
       
    15             expire_date=datetime(2005, 9, 1)
       
    16         )
       
    17         a2 = Article.objects.create(
       
    18             headline="Article 2", pub_date=datetime(2005, 7, 27),
       
    19             expire_date=datetime(2005, 7, 28)
       
    20         )
       
    21         a3 = Article.objects.create(
       
    22             headline="Article 3", pub_date=datetime(2005, 7, 27),
       
    23             expire_date=datetime(2005, 8, 27)
       
    24         )
       
    25         a4 = Article.objects.create(
       
    26             headline="Article 4", pub_date=datetime(2005, 7, 28),
       
    27             expire_date=datetime(2005, 7, 30)
       
    28         )
       
    29 
       
    30         # Get the latest Article.
       
    31         self.assertEqual(Article.objects.latest(), a4)
       
    32         # Get the latest Article that matches certain filters.
       
    33         self.assertEqual(
       
    34             Article.objects.filter(pub_date__lt=datetime(2005, 7, 27)).latest(),
       
    35             a1
       
    36         )
       
    37 
       
    38         # Pass a custom field name to latest() to change the field that's used
       
    39         # to determine the latest object.
       
    40         self.assertEqual(Article.objects.latest('expire_date'), a1)
       
    41         self.assertEqual(
       
    42             Article.objects.filter(pub_date__gt=datetime(2005, 7, 26)).latest('expire_date'),
       
    43             a3,
       
    44         )
       
    45 
       
    46     def test_latest_manual(self):
       
    47         # You can still use latest() with a model that doesn't have
       
    48         # "get_latest_by" set -- just pass in the field name manually.
       
    49         p1 = Person.objects.create(name="Ralph", birthday=datetime(1950, 1, 1))
       
    50         p2 = Person.objects.create(name="Stephanie", birthday=datetime(1960, 2, 3))
       
    51         self.assertRaises(AssertionError, Person.objects.latest)
       
    52 
       
    53         self.assertEqual(Person.objects.latest("birthday"), p2)