summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/modeltests/get_earliest_or_latest/__init__.py (renamed from tests/modeltests/get_latest/__init__.py)0
-rw-r--r--tests/modeltests/get_earliest_or_latest/models.py (renamed from tests/modeltests/get_latest/models.py)8
-rw-r--r--tests/modeltests/get_earliest_or_latest/tests.py123
-rw-r--r--tests/modeltests/get_latest/tests.py58
4 files changed, 126 insertions, 63 deletions
diff --git a/tests/modeltests/get_latest/__init__.py b/tests/modeltests/get_earliest_or_latest/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/modeltests/get_latest/__init__.py
+++ b/tests/modeltests/get_earliest_or_latest/__init__.py
diff --git a/tests/modeltests/get_latest/models.py b/tests/modeltests/get_earliest_or_latest/models.py
index fe594dd802..2453eaaccd 100644
--- a/tests/modeltests/get_latest/models.py
+++ b/tests/modeltests/get_earliest_or_latest/models.py
@@ -9,10 +9,8 @@ farthest into the future."
"""
from django.db import models
-from django.utils.encoding import python_2_unicode_compatible
-@python_2_unicode_compatible
class Article(models.Model):
headline = models.CharField(max_length=100)
pub_date = models.DateField()
@@ -20,15 +18,15 @@ class Article(models.Model):
class Meta:
get_latest_by = 'pub_date'
- def __str__(self):
+ def __unicode__(self):
return self.headline
-@python_2_unicode_compatible
+
class Person(models.Model):
name = models.CharField(max_length=30)
birthday = models.DateField()
# Note that this model doesn't have "get_latest_by" set.
- def __str__(self):
+ def __unicode__(self):
return self.name
diff --git a/tests/modeltests/get_earliest_or_latest/tests.py b/tests/modeltests/get_earliest_or_latest/tests.py
new file mode 100644
index 0000000000..6317a0974c
--- /dev/null
+++ b/tests/modeltests/get_earliest_or_latest/tests.py
@@ -0,0 +1,123 @@
+from __future__ import absolute_import
+
+from datetime import datetime
+
+from django.test import TestCase
+
+from .models import Article, Person
+
+
+class EarliestOrLatestTests(TestCase):
+ """Tests for the earliest() and latest() objects methods"""
+
+ def tearDown(self):
+ """Makes sure Article has a get_latest_by"""
+ if not Article._meta.get_latest_by:
+ Article._meta.get_latest_by = 'pub_date'
+
+ def test_earliest(self):
+ # Because no Articles exist yet, earliest() raises ArticleDoesNotExist.
+ self.assertRaises(Article.DoesNotExist, Article.objects.earliest)
+
+ a1 = Article.objects.create(
+ headline="Article 1", pub_date=datetime(2005, 7, 26),
+ expire_date=datetime(2005, 9, 1)
+ )
+ a2 = Article.objects.create(
+ headline="Article 2", pub_date=datetime(2005, 7, 27),
+ expire_date=datetime(2005, 7, 28)
+ )
+ a3 = Article.objects.create(
+ headline="Article 3", pub_date=datetime(2005, 7, 28),
+ expire_date=datetime(2005, 8, 27)
+ )
+ a4 = Article.objects.create(
+ headline="Article 4", pub_date=datetime(2005, 7, 28),
+ expire_date=datetime(2005, 7, 30)
+ )
+
+ # Get the earliest Article.
+ self.assertEqual(Article.objects.earliest(), a1)
+ # Get the earliest Article that matches certain filters.
+ self.assertEqual(
+ Article.objects.filter(pub_date__gt=datetime(2005, 7, 26)).earliest(),
+ a2
+ )
+
+ # Pass a custom field name to earliest() to change the field that's used
+ # to determine the earliest object.
+ self.assertEqual(Article.objects.earliest('expire_date'), a2)
+ self.assertEqual(Article.objects.filter(
+ pub_date__gt=datetime(2005, 7, 26)).earliest('expire_date'), a2)
+
+ # Ensure that earliest() overrides any other ordering specified on the
+ # query. Refs #11283.
+ self.assertEqual(Article.objects.order_by('id').earliest(), a1)
+
+ # Ensure that error is raised if the user forgot to add a get_latest_by
+ # in the Model.Meta
+ Article.objects.model._meta.get_latest_by = None
+ self.assertRaisesMessage(
+ AssertionError,
+ "earliest() and latest() require either a field_name parameter or "
+ "'get_latest_by' in the model",
+ lambda: Article.objects.earliest(),
+ )
+
+ def test_latest(self):
+ # Because no Articles exist yet, latest() raises ArticleDoesNotExist.
+ self.assertRaises(Article.DoesNotExist, Article.objects.latest)
+
+ a1 = Article.objects.create(
+ headline="Article 1", pub_date=datetime(2005, 7, 26),
+ expire_date=datetime(2005, 9, 1)
+ )
+ a2 = Article.objects.create(
+ headline="Article 2", pub_date=datetime(2005, 7, 27),
+ expire_date=datetime(2005, 7, 28)
+ )
+ a3 = Article.objects.create(
+ headline="Article 3", pub_date=datetime(2005, 7, 27),
+ expire_date=datetime(2005, 8, 27)
+ )
+ a4 = Article.objects.create(
+ headline="Article 4", pub_date=datetime(2005, 7, 28),
+ expire_date=datetime(2005, 7, 30)
+ )
+
+ # Get the latest Article.
+ self.assertEqual(Article.objects.latest(), a4)
+ # Get the latest Article that matches certain filters.
+ self.assertEqual(
+ Article.objects.filter(pub_date__lt=datetime(2005, 7, 27)).latest(),
+ a1
+ )
+
+ # Pass a custom field name to latest() to change the field that's used
+ # to determine the latest object.
+ self.assertEqual(Article.objects.latest('expire_date'), a1)
+ self.assertEqual(
+ Article.objects.filter(pub_date__gt=datetime(2005, 7, 26)).latest('expire_date'),
+ a3,
+ )
+
+ # Ensure that latest() overrides any other ordering specified on the query. Refs #11283.
+ self.assertEqual(Article.objects.order_by('id').latest(), a4)
+
+ # Ensure that error is raised if the user forgot to add a get_latest_by
+ # in the Model.Meta
+ Article.objects.model._meta.get_latest_by = None
+ self.assertRaisesMessage(
+ AssertionError,
+ "earliest() and latest() require either a field_name parameter or "
+ "'get_latest_by' in the model",
+ lambda: Article.objects.latest(),
+ )
+
+ def test_latest_manual(self):
+ # You can still use latest() with a model that doesn't have
+ # "get_latest_by" set -- just pass in the field name manually.
+ p1 = Person.objects.create(name="Ralph", birthday=datetime(1950, 1, 1))
+ p2 = Person.objects.create(name="Stephanie", birthday=datetime(1960, 2, 3))
+ self.assertRaises(AssertionError, Person.objects.latest)
+ self.assertEqual(Person.objects.latest("birthday"), p2)
diff --git a/tests/modeltests/get_latest/tests.py b/tests/modeltests/get_latest/tests.py
deleted file mode 100644
index 948af6045a..0000000000
--- a/tests/modeltests/get_latest/tests.py
+++ /dev/null
@@ -1,58 +0,0 @@
-from __future__ import absolute_import
-
-from datetime import datetime
-
-from django.test import TestCase
-
-from .models import Article, Person
-
-
-class LatestTests(TestCase):
- def test_latest(self):
- # Because no Articles exist yet, latest() raises ArticleDoesNotExist.
- self.assertRaises(Article.DoesNotExist, Article.objects.latest)
-
- a1 = Article.objects.create(
- headline="Article 1", pub_date=datetime(2005, 7, 26),
- expire_date=datetime(2005, 9, 1)
- )
- a2 = Article.objects.create(
- headline="Article 2", pub_date=datetime(2005, 7, 27),
- expire_date=datetime(2005, 7, 28)
- )
- a3 = Article.objects.create(
- headline="Article 3", pub_date=datetime(2005, 7, 27),
- expire_date=datetime(2005, 8, 27)
- )
- a4 = Article.objects.create(
- headline="Article 4", pub_date=datetime(2005, 7, 28),
- expire_date=datetime(2005, 7, 30)
- )
-
- # Get the latest Article.
- self.assertEqual(Article.objects.latest(), a4)
- # Get the latest Article that matches certain filters.
- self.assertEqual(
- Article.objects.filter(pub_date__lt=datetime(2005, 7, 27)).latest(),
- a1
- )
-
- # Pass a custom field name to latest() to change the field that's used
- # to determine the latest object.
- self.assertEqual(Article.objects.latest('expire_date'), a1)
- self.assertEqual(
- Article.objects.filter(pub_date__gt=datetime(2005, 7, 26)).latest('expire_date'),
- a3,
- )
-
- # Ensure that latest() overrides any other ordering specified on the query. Refs #11283.
- self.assertEqual(Article.objects.order_by('id').latest(), a4)
-
- def test_latest_manual(self):
- # You can still use latest() with a model that doesn't have
- # "get_latest_by" set -- just pass in the field name manually.
- p1 = Person.objects.create(name="Ralph", birthday=datetime(1950, 1, 1))
- p2 = Person.objects.create(name="Stephanie", birthday=datetime(1960, 2, 3))
- self.assertRaises(AssertionError, Person.objects.latest)
-
- self.assertEqual(Person.objects.latest("birthday"), p2)