summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAymeric Augustin <aymeric.augustin@m4x.org>2012-04-30 20:41:38 +0200
committerAymeric Augustin <aymeric.augustin@m4x.org>2012-04-30 20:48:19 +0200
commit78ba9670af373f5261f95d6560bfd08425adcaad (patch)
treefded4e0a6f2c3ab46e1e5367370720fa4c979701 /tests
parent596cb9c7e287abbb98c64974fb4944d522cb6b5a (diff)
Fixed #18217 -- Time zone support in generic views
Introduced a distinct implementation depending on the type of the date field (DateField or DateTimeField), and applied appropriate conversions is the latter case, when time zone support is enabled.
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/generic_views/dates.py102
-rw-r--r--tests/regressiontests/generic_views/models.py3
-rw-r--r--tests/regressiontests/generic_views/urls.py19
-rw-r--r--tests/regressiontests/generic_views/views.py30
4 files changed, 150 insertions, 4 deletions
diff --git a/tests/regressiontests/generic_views/dates.py b/tests/regressiontests/generic_views/dates.py
index 9de817acc2..f3984c6c0e 100644
--- a/tests/regressiontests/generic_views/dates.py
+++ b/tests/regressiontests/generic_views/dates.py
@@ -4,8 +4,18 @@ import datetime
from django.core.exceptions import ImproperlyConfigured
from django.test import TestCase
+from django.test.utils import override_settings
+from django.utils import timezone
+
+from .models import Book, BookSigning
+
+
+import warnings
+warnings.filterwarnings(
+ 'error', r"DateTimeField received a naive datetime",
+ RuntimeWarning, r'django\.db\.models\.fields')
+
-from .models import Book
class ArchiveIndexViewTests(TestCase):
@@ -88,6 +98,18 @@ class ArchiveIndexViewTests(TestCase):
with self.assertNumQueries(3):
self.client.get('/dates/books/paginated/')
+ def test_datetime_archive_view(self):
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0))
+ res = self.client.get('/dates/booksignings/')
+ self.assertEqual(res.status_code, 200)
+
+ @override_settings(USE_TZ=True, TIME_ZONE='Africa/Nairobi')
+ def test_aware_datetime_archive_view(self):
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0, tzinfo=timezone.utc))
+ res = self.client.get('/dates/booksignings/')
+ self.assertEqual(res.status_code, 200)
+
+
class YearArchiveViewTests(TestCase):
fixtures = ['generic-views-test-data.json']
urls = 'regressiontests.generic_views.urls'
@@ -141,6 +163,18 @@ class YearArchiveViewTests(TestCase):
res = self.client.get('/dates/books/no_year/')
self.assertEqual(res.status_code, 404)
+ def test_datetime_year_view(self):
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0))
+ res = self.client.get('/dates/booksignings/2008/')
+ self.assertEqual(res.status_code, 200)
+
+ @override_settings(USE_TZ=True, TIME_ZONE='Africa/Nairobi')
+ def test_aware_datetime_year_view(self):
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0, tzinfo=timezone.utc))
+ res = self.client.get('/dates/booksignings/2008/')
+ self.assertEqual(res.status_code, 200)
+
+
class MonthArchiveViewTests(TestCase):
fixtures = ['generic-views-test-data.json']
urls = 'regressiontests.generic_views.urls'
@@ -245,6 +279,21 @@ class MonthArchiveViewTests(TestCase):
self.assertEqual(res.status_code, 200)
self.assertEqual(res.context['previous_month'], datetime.date(2010,9,1))
+ def test_datetime_month_view(self):
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 2, 1, 12, 0))
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0))
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 6, 3, 12, 0))
+ res = self.client.get('/dates/booksignings/2008/apr/')
+ self.assertEqual(res.status_code, 200)
+
+ @override_settings(USE_TZ=True, TIME_ZONE='Africa/Nairobi')
+ def test_aware_datetime_month_view(self):
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 2, 1, 12, 0, tzinfo=timezone.utc))
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0, tzinfo=timezone.utc))
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 6, 3, 12, 0, tzinfo=timezone.utc))
+ res = self.client.get('/dates/booksignings/2008/apr/')
+ self.assertEqual(res.status_code, 200)
+
class WeekArchiveViewTests(TestCase):
fixtures = ['generic-views-test-data.json']
@@ -300,6 +349,18 @@ class WeekArchiveViewTests(TestCase):
self.assertEqual(res.status_code, 200)
self.assertEqual(res.context['week'], datetime.date(2008, 9, 29))
+ def test_datetime_week_view(self):
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0))
+ res = self.client.get('/dates/booksignings/2008/week/13/')
+ self.assertEqual(res.status_code, 200)
+
+ @override_settings(USE_TZ=True, TIME_ZONE='Africa/Nairobi')
+ def test_aware_datetime_week_view(self):
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0, tzinfo=timezone.utc))
+ res = self.client.get('/dates/booksignings/2008/week/13/')
+ self.assertEqual(res.status_code, 200)
+
+
class DayArchiveViewTests(TestCase):
fixtures = ['generic-views-test-data.json']
urls = 'regressiontests.generic_views.urls'
@@ -388,6 +449,26 @@ class DayArchiveViewTests(TestCase):
self.assertEqual(res.status_code, 200)
self.assertEqual(res.context['day'], datetime.date.today())
+ def test_datetime_day_view(self):
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0))
+ res = self.client.get('/dates/booksignings/2008/apr/2/')
+ self.assertEqual(res.status_code, 200)
+
+ @override_settings(USE_TZ=True, TIME_ZONE='Africa/Nairobi')
+ def test_aware_datetime_day_view(self):
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0, tzinfo=timezone.utc))
+ res = self.client.get('/dates/booksignings/2008/apr/2/')
+ self.assertEqual(res.status_code, 200)
+ # 2008-04-02T00:00:00+03:00 (beginning of day) > 2008-04-01T22:00:00+00:00 (book signing event date)
+ BookSigning.objects.filter(pk=1).update(event_date=datetime.datetime(2008, 4, 1, 22, 0, tzinfo=timezone.utc))
+ res = self.client.get('/dates/booksignings/2008/apr/2/')
+ self.assertEqual(res.status_code, 200)
+ # 2008-04-03T00:00:00+03:00 (end of day) > 2008-04-02T22:00:00+00:00 (book signing event date)
+ BookSigning.objects.filter(pk=1).update(event_date=datetime.datetime(2008, 4, 2, 22, 0, tzinfo=timezone.utc))
+ res = self.client.get('/dates/booksignings/2008/apr/2/')
+ self.assertEqual(res.status_code, 404)
+
+
class DateDetailViewTests(TestCase):
fixtures = ['generic-views-test-data.json']
urls = 'regressiontests.generic_views.urls'
@@ -441,3 +522,22 @@ class DateDetailViewTests(TestCase):
res = self.client.get(
'/dates/books/get_object_custom_queryset/2008/oct/01/1/')
self.assertEqual(res.status_code, 404)
+
+ def test_datetime_date_detail(self):
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0))
+ res = self.client.get('/dates/booksignings/2008/apr/2/1/')
+ self.assertEqual(res.status_code, 200)
+
+ @override_settings(USE_TZ=True, TIME_ZONE='Africa/Nairobi')
+ def test_aware_datetime_date_detail(self):
+ BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0, tzinfo=timezone.utc))
+ res = self.client.get('/dates/booksignings/2008/apr/2/1/')
+ self.assertEqual(res.status_code, 200)
+ # 2008-04-02T00:00:00+03:00 (beginning of day) > 2008-04-01T22:00:00+00:00 (book signing event date)
+ BookSigning.objects.filter(pk=1).update(event_date=datetime.datetime(2008, 4, 1, 22, 0, tzinfo=timezone.utc))
+ res = self.client.get('/dates/booksignings/2008/apr/2/1/')
+ self.assertEqual(res.status_code, 200)
+ # 2008-04-03T00:00:00+03:00 (end of day) > 2008-04-02T22:00:00+00:00 (book signing event date)
+ BookSigning.objects.filter(pk=1).update(event_date=datetime.datetime(2008, 4, 2, 22, 0, tzinfo=timezone.utc))
+ res = self.client.get('/dates/booksignings/2008/apr/2/1/')
+ self.assertEqual(res.status_code, 404)
diff --git a/tests/regressiontests/generic_views/models.py b/tests/regressiontests/generic_views/models.py
index 5977258f5f..2355769d58 100644
--- a/tests/regressiontests/generic_views/models.py
+++ b/tests/regressiontests/generic_views/models.py
@@ -42,3 +42,6 @@ class Book(models.Model):
class Page(models.Model):
content = models.TextField()
template = models.CharField(max_length=300)
+
+class BookSigning(models.Model):
+ event_date = models.DateTimeField()
diff --git a/tests/regressiontests/generic_views/urls.py b/tests/regressiontests/generic_views/urls.py
index 090ec73c4a..9c47ab8d82 100644
--- a/tests/regressiontests/generic_views/urls.py
+++ b/tests/regressiontests/generic_views/urls.py
@@ -108,6 +108,8 @@ urlpatterns = patterns('',
views.BookArchive.as_view(queryset=None)),
(r'^dates/books/paginated/$',
views.BookArchive.as_view(paginate_by=10)),
+ (r'^dates/booksignings/$',
+ views.BookSigningArchive.as_view()),
# ListView
(r'^list/dict/$',
@@ -156,6 +158,8 @@ urlpatterns = patterns('',
views.BookYearArchive.as_view(make_object_list=True, paginate_by=30)),
(r'^dates/books/no_year/$',
views.BookYearArchive.as_view()),
+ (r'^dates/booksignings/(?P<year>\d{4})/$',
+ views.BookSigningYearArchive.as_view()),
# MonthArchiveView
(r'^dates/books/(?P<year>\d{4})/(?P<month>[a-z]{3})/$',
@@ -170,6 +174,8 @@ urlpatterns = patterns('',
views.BookMonthArchive.as_view(paginate_by=30)),
(r'^dates/books/(?P<year>\d{4})/no_month/$',
views.BookMonthArchive.as_view()),
+ (r'^dates/booksignings/(?P<year>\d{4})/(?P<month>[a-z]{3})/$',
+ views.BookSigningMonthArchive.as_view()),
# WeekArchiveView
(r'^dates/books/(?P<year>\d{4})/week/(?P<week>\d{1,2})/$',
@@ -184,6 +190,8 @@ urlpatterns = patterns('',
views.BookWeekArchive.as_view()),
(r'^dates/books/(?P<year>\d{4})/week/(?P<week>\d{1,2})/monday/$',
views.BookWeekArchive.as_view(week_format='%W')),
+ (r'^dates/booksignings/(?P<year>\d{4})/week/(?P<week>\d{1,2})/$',
+ views.BookSigningWeekArchive.as_view()),
# DayArchiveView
(r'^dates/books/(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\d{1,2})/$',
@@ -198,12 +206,16 @@ urlpatterns = patterns('',
views.BookDayArchive.as_view(paginate_by=True)),
(r'^dates/books/(?P<year>\d{4})/(?P<month>[a-z]{3})/no_day/$',
views.BookDayArchive.as_view()),
+ (r'^dates/booksignings/(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\d{1,2})/$',
+ views.BookSigningDayArchive.as_view()),
# TodayArchiveView
- (r'dates/books/today/$',
+ (r'^dates/books/today/$',
views.BookTodayArchive.as_view()),
- (r'dates/books/today/allow_empty/$',
+ (r'^dates/books/today/allow_empty/$',
views.BookTodayArchive.as_view(allow_empty=True)),
+ (r'^dates/booksignings/today/$',
+ views.BookSigningTodayArchive.as_view()),
# DateDetailView
(r'^dates/books/(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\d{1,2})/(?P<pk>\d+)/$',
@@ -221,6 +233,9 @@ urlpatterns = patterns('',
(r'^dates/books/get_object_custom_queryset/(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\d{1,2})/(?P<pk>\d+)/$',
views.BookDetailGetObjectCustomQueryset.as_view()),
+ (r'^dates/booksignings/(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\d{1,2})/(?P<pk>\d+)/$',
+ views.BookSigningDetail.as_view()),
+
# Useful for testing redirects
(r'^accounts/login/$', 'django.contrib.auth.views.login')
)
diff --git a/tests/regressiontests/generic_views/views.py b/tests/regressiontests/generic_views/views.py
index 1e70ba4b46..d11d810f3d 100644
--- a/tests/regressiontests/generic_views/views.py
+++ b/tests/regressiontests/generic_views/views.py
@@ -7,7 +7,7 @@ from django.utils.decorators import method_decorator
from django.views import generic
from .forms import AuthorForm
-from .models import Artist, Author, Book, Page
+from .models import Artist, Author, Book, Page, BookSigning
class CustomTemplateView(generic.TemplateView):
@@ -198,3 +198,31 @@ class CustomContextView(generic.detail.SingleObjectMixin, generic.View):
def get_context_object_name(self, obj):
return "test_name"
+
+class BookSigningConfig(object):
+ model = BookSigning
+ date_field = 'event_date'
+ # use the same templates as for books
+ def get_template_names(self):
+ return ['generic_views/book%s.html' % self.template_name_suffix]
+
+class BookSigningArchive(BookSigningConfig, generic.ArchiveIndexView):
+ pass
+
+class BookSigningYearArchive(BookSigningConfig, generic.YearArchiveView):
+ pass
+
+class BookSigningMonthArchive(BookSigningConfig, generic.MonthArchiveView):
+ pass
+
+class BookSigningWeekArchive(BookSigningConfig, generic.WeekArchiveView):
+ pass
+
+class BookSigningDayArchive(BookSigningConfig, generic.DayArchiveView):
+ pass
+
+class BookSigningTodayArchive(BookSigningConfig, generic.TodayArchiveView):
+ pass
+
+class BookSigningDetail(BookSigningConfig, generic.DateDetailView):
+ context_object_name = 'book'