diff options
| author | Aymeric Augustin <aymeric.augustin@m4x.org> | 2012-04-30 20:41:38 +0200 |
|---|---|---|
| committer | Aymeric Augustin <aymeric.augustin@m4x.org> | 2012-04-30 20:48:19 +0200 |
| commit | 78ba9670af373f5261f95d6560bfd08425adcaad (patch) | |
| tree | fded4e0a6f2c3ab46e1e5367370720fa4c979701 /tests | |
| parent | 596cb9c7e287abbb98c64974fb4944d522cb6b5a (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.py | 102 | ||||
| -rw-r--r-- | tests/regressiontests/generic_views/models.py | 3 | ||||
| -rw-r--r-- | tests/regressiontests/generic_views/urls.py | 19 | ||||
| -rw-r--r-- | tests/regressiontests/generic_views/views.py | 30 |
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' |
