mirror of
https://github.com/django/django.git
synced 2025-11-19 03:08:59 +00:00
Fixed #7602 -- Corrected lookup keyword arguments in archive_month and archive_week to properly range when date_field is from DateField. Thanks nullie for the original patch and Colin Grady for the test coverage.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8476 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
264771f1b6
commit
a64dc39fb7
5 changed files with 101 additions and 61 deletions
|
|
@ -21,7 +21,6 @@ class BaseArticle(models.Model):
|
|||
title = models.CharField(max_length=100)
|
||||
slug = models.SlugField()
|
||||
author = models.ForeignKey(Author)
|
||||
date_created = models.DateTimeField()
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
|
@ -30,11 +29,20 @@ class BaseArticle(models.Model):
|
|||
return self.title
|
||||
|
||||
class Article(BaseArticle):
|
||||
pass
|
||||
date_created = models.DateTimeField()
|
||||
|
||||
class UrlArticle(BaseArticle):
|
||||
"""
|
||||
An Article class with a get_absolute_url defined.
|
||||
"""
|
||||
date_created = models.DateTimeField()
|
||||
|
||||
def get_absolute_url(self):
|
||||
return '/urlarticles/%s/' % self.slug
|
||||
|
||||
class DateArticle(BaseArticle):
|
||||
"""
|
||||
An article Model with a DateField instead of DateTimeField,
|
||||
for testing #7602
|
||||
"""
|
||||
date_created = models.DateField()
|
||||
|
|
|
|||
|
|
@ -1,71 +1,92 @@
|
|||
# coding: utf-8
|
||||
from django.test import TestCase
|
||||
from datetime import datetime
|
||||
from datetime import timedelta
|
||||
from regressiontests.views.models import Article, Author
|
||||
# coding: utf-8
|
||||
from django.test import TestCase
|
||||
from datetime import datetime
|
||||
from datetime import timedelta
|
||||
from regressiontests.views.models import Article, Author, DateArticle
|
||||
|
||||
class ObjectDetailTest(TestCase):
|
||||
fixtures = ['testdata.json']
|
||||
def setUp(self):
|
||||
fixtures = ['testdata.json']
|
||||
def setUp(self):
|
||||
# Correct the date for the current article
|
||||
current_article = Article.objects.get(title="Current Article")
|
||||
current_article.date_created = datetime.now()
|
||||
current_article.save()
|
||||
|
||||
def test_finds_past(self):
|
||||
"date_based.object_detail can view a page in the past"
|
||||
response = self.client.get('/views/date_based/object_detail/2001/01/01/old_article/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['object'].title, "Old Article")
|
||||
|
||||
def test_object_detail_finds_today(self):
|
||||
"date_based.object_detail can view a page from today"
|
||||
today_url = datetime.now().strftime('%Y/%m/%d')
|
||||
response = self.client.get('/views/date_based/object_detail/%s/current_article/' % today_url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['object'].title, "Current Article")
|
||||
|
||||
def test_object_detail_ignores_future(self):
|
||||
"date_based.object_detail can view a page from the future, but only if allowed."
|
||||
response = self.client.get('/views/date_based/object_detail/3000/01/01/future_article/')
|
||||
self.assertEqual(response.status_code, 404)
|
||||
current_article.date_created = datetime.now()
|
||||
current_article.save()
|
||||
|
||||
def test_object_detail_allowed_future_if_enabled(self):
|
||||
def test_finds_past(self):
|
||||
"date_based.object_detail can view a page in the past"
|
||||
response = self.client.get('/views/date_based/object_detail/2001/01/01/old_article/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['object'].title, "Old Article")
|
||||
|
||||
def test_object_detail_finds_today(self):
|
||||
"date_based.object_detail can view a page from today"
|
||||
today_url = datetime.now().strftime('%Y/%m/%d')
|
||||
response = self.client.get('/views/date_based/object_detail/%s/current_article/' % today_url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['object'].title, "Current Article")
|
||||
|
||||
def test_object_detail_ignores_future(self):
|
||||
"date_based.object_detail can view a page from the future, but only if allowed."
|
||||
response = self.client.get('/views/date_based/object_detail/3000/01/01/future_article/')
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_object_detail_allowed_future_if_enabled(self):
|
||||
"date_based.object_detail can view a page from the future if explicitly allowed."
|
||||
response = self.client.get('/views/date_based/object_detail/3000/01/01/future_article/allow_future/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['object'].title, "Future Article")
|
||||
|
||||
class MonthArchiveTest(TestCase):
|
||||
def test_archive_month_includes_only_month(self):
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['object'].title, "Future Article")
|
||||
|
||||
class MonthArchiveTest(TestCase):
|
||||
def test_archive_month_includes_only_month(self):
|
||||
"Regression for #3031: Archives around Feburary include only one month"
|
||||
author = Author(name="John Smith")
|
||||
author.save()
|
||||
|
||||
# 2004 was a leap year, so it should be weird enough to not cheat
|
||||
first_second_of_feb = datetime(2004, 2, 1, 0, 0, 1)
|
||||
first_second_of_mar = datetime(2004, 3, 1, 0, 0, 1)
|
||||
two_seconds = timedelta(0, 2, 0)
|
||||
article = Article(title="example", author=author)
|
||||
# 2004 was a leap year, so it should be weird enough to not cheat
|
||||
first_second_of_feb = datetime(2004, 2, 1, 0, 0, 1)
|
||||
first_second_of_mar = datetime(2004, 3, 1, 0, 0, 1)
|
||||
two_seconds = timedelta(0, 2, 0)
|
||||
article = Article(title="example", author=author)
|
||||
|
||||
article.date_created = first_second_of_feb
|
||||
article.save()
|
||||
response = self.client.get('/views/date_based/archive_month/2004/02/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
article.date_created = first_second_of_feb-two_seconds
|
||||
article.save()
|
||||
response = self.client.get('/views/date_based/archive_month/2004/02/')
|
||||
self.assertEqual(response.status_code, 404)
|
||||
article.date_created = first_second_of_feb
|
||||
article.save()
|
||||
response = self.client.get('/views/date_based/archive_month/2004/02/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
article.date_created = first_second_of_mar-two_seconds
|
||||
article.save()
|
||||
response = self.client.get('/views/date_based/archive_month/2004/02/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
article.date_created = first_second_of_feb-two_seconds
|
||||
article.save()
|
||||
response = self.client.get('/views/date_based/archive_month/2004/02/')
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
article.date_created = first_second_of_mar-two_seconds
|
||||
article.save()
|
||||
response = self.client.get('/views/date_based/archive_month/2004/02/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
article.date_created = first_second_of_mar
|
||||
article.save()
|
||||
response = self.client.get('/views/date_based/archive_month/2004/02/')
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
article2 = DateArticle(title="example", author=author)
|
||||
|
||||
article2.date_created = first_second_of_feb.date()
|
||||
article2.save()
|
||||
response = self.client.get('/views/date_based/datefield/archive_month/2004/02/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
article2.date_created = (first_second_of_feb-two_seconds).date()
|
||||
article2.save()
|
||||
response = self.client.get('/views/date_based/datefield/archive_month/2004/02/')
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
article2.date_created = (first_second_of_mar-two_seconds).date()
|
||||
article2.save()
|
||||
response = self.client.get('/views/date_based/datefield/archive_month/2004/02/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
article2.date_created = first_second_of_mar.date()
|
||||
article2.save()
|
||||
response = self.client.get('/views/date_based/datefield/archive_month/2004/02/')
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
article.date_created = first_second_of_mar
|
||||
article.save()
|
||||
response = self.client.get('/views/date_based/archive_month/2004/02/')
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
|
||||
|
|
@ -20,6 +20,7 @@ date_based_info_dict = {
|
|||
'date_field': 'date_created',
|
||||
'month_format': '%m',
|
||||
}
|
||||
date_based_datefield_info_dict = dict(date_based_info_dict, queryset=DateArticle.objects.all())
|
||||
|
||||
urlpatterns = patterns('',
|
||||
(r'^$', views.index_page),
|
||||
|
|
@ -48,6 +49,9 @@ urlpatterns += patterns('django.views.generic.date_based',
|
|||
(r'^date_based/archive_month/(?P<year>\d{4})/(?P<month>\d{1,2})/$',
|
||||
'archive_month',
|
||||
date_based_info_dict),
|
||||
(r'^date_based/datefield/archive_month/(?P<year>\d{4})/(?P<month>\d{1,2})/$',
|
||||
'archive_month',
|
||||
date_based_datefield_info_dict),
|
||||
)
|
||||
|
||||
# crud generic views.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue