From 19bd2b6f028f766e68ff4a26a1bc27be77ad71be Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sun, 12 Sep 2010 20:04:21 +0000 Subject: [PATCH] Migrated get_object_or_404 doctests. Thanks to Alex Gaynor. git-svn-id: http://code.djangoproject.com/svn/django/trunk@13784 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- tests/modeltests/get_object_or_404/models.py | 73 ------------------ tests/modeltests/get_object_or_404/tests.py | 80 ++++++++++++++++++++ 2 files changed, 80 insertions(+), 73 deletions(-) create mode 100644 tests/modeltests/get_object_or_404/tests.py diff --git a/tests/modeltests/get_object_or_404/models.py b/tests/modeltests/get_object_or_404/models.py index b2812e61e7..eb3cd8254d 100644 --- a/tests/modeltests/get_object_or_404/models.py +++ b/tests/modeltests/get_object_or_404/models.py @@ -32,76 +32,3 @@ class Article(models.Model): def __unicode__(self): return self.title - -__test__ = {'API_TESTS':""" -# Create some Authors. ->>> a = Author.objects.create(name="Brave Sir Robin") ->>> a.save() ->>> a2 = Author.objects.create(name="Patsy") ->>> a2.save() - -# No Articles yet, so we should get a Http404 error. ->>> get_object_or_404(Article, title="Foo") -Traceback (most recent call last): -... -Http404: No Article matches the given query. - -# Create an Article. ->>> article = Article.objects.create(title="Run away!") ->>> article.authors = [a, a2] ->>> article.save() - -# get_object_or_404 can be passed a Model to query. ->>> get_object_or_404(Article, title__contains="Run") - - -# We can also use the Article manager through an Author object. ->>> get_object_or_404(a.article_set, title__contains="Run") - - -# No articles containing "Camelot". This should raise a Http404 error. ->>> get_object_or_404(a.article_set, title__contains="Camelot") -Traceback (most recent call last): -... -Http404: No Article matches the given query. - -# Custom managers can be used too. ->>> get_object_or_404(Article.by_a_sir, title="Run away!") - - -# QuerySets can be used too. ->>> get_object_or_404(Article.objects.all(), title__contains="Run") - - -# Just as when using a get() lookup, you will get an error if more than one -# object is returned. ->>> get_object_or_404(Author.objects.all()) -Traceback (most recent call last): -... -MultipleObjectsReturned: get() returned more than one Author -- it returned ...! Lookup parameters were {} - -# Using an EmptyQuerySet raises a Http404 error. ->>> get_object_or_404(Article.objects.none(), title__contains="Run") -Traceback (most recent call last): -... -Http404: No Article matches the given query. - -# get_list_or_404 can be used to get lists of objects ->>> get_list_or_404(a.article_set, title__icontains='Run') -[] - -# Http404 is returned if the list is empty. ->>> get_list_or_404(a.article_set, title__icontains='Shrubbery') -Traceback (most recent call last): -... -Http404: No Article matches the given query. - -# Custom managers can be used too. ->>> get_list_or_404(Article.by_a_sir, title__icontains="Run") -[] - -# QuerySets can be used too. ->>> get_list_or_404(Article.objects.all(), title__icontains="Run") -[] - -"""} diff --git a/tests/modeltests/get_object_or_404/tests.py b/tests/modeltests/get_object_or_404/tests.py new file mode 100644 index 0000000000..b8c4f7510b --- /dev/null +++ b/tests/modeltests/get_object_or_404/tests.py @@ -0,0 +1,80 @@ +from django.http import Http404 +from django.shortcuts import get_object_or_404, get_list_or_404 +from django.test import TestCase + +from models import Author, Article + + +class GetObjectOr404Tests(TestCase): + def test_get_object_or_404(self): + a1 = Author.objects.create(name="Brave Sir Robin") + a2 = Author.objects.create(name="Patsy") + + # No Articles yet, so we should get a Http404 error. + self.assertRaises(Http404, get_object_or_404, Article, title="Foo") + + article = Article.objects.create(title="Run away!") + article.authors = [a1, a2] + # get_object_or_404 can be passed a Model to query. + self.assertEqual( + get_object_or_404(Article, title__contains="Run"), + article + ) + + # We can also use the Article manager through an Author object. + self.assertEqual( + get_object_or_404(a1.article_set, title__contains="Run"), + article + ) + + # No articles containing "Camelot". This should raise a Http404 error. + self.assertRaises(Http404, + get_object_or_404, a1.article_set, title__contains="Camelot" + ) + + # Custom managers can be used too. + self.assertEqual( + get_object_or_404(Article.by_a_sir, title="Run away!"), + article + ) + + # QuerySets can be used too. + self.assertEqual( + get_object_or_404(Article.objects.all(), title__contains="Run"), + article + ) + + # Just as when using a get() lookup, you will get an error if more than + # one object is returned. + + self.assertRaises(Author.MultipleObjectsReturned, + get_object_or_404, Author.objects.all() + ) + + # Using an EmptyQuerySet raises a Http404 error. + self.assertRaises(Http404, + get_object_or_404, Article.objects.none(), title__contains="Run" + ) + + # get_list_or_404 can be used to get lists of objects + self.assertEqual( + get_list_or_404(a1.article_set, title__icontains="Run"), + [article] + ) + + # Http404 is returned if the list is empty. + self.assertRaises(Http404, + get_list_or_404, a1.article_set, title__icontains="Shrubbery" + ) + + # Custom managers can be used too. + self.assertEqual( + get_list_or_404(Article.by_a_sir, title__icontains="Run"), + [article] + ) + + # QuerySets can be used too. + self.assertEqual( + get_list_or_404(Article.objects.all(), title__icontains="Run"), + [article] + )