summaryrefslogtreecommitdiff
path: root/tests/regressiontests/admin_views
diff options
context:
space:
mode:
authorJannis Leidel <jannis@leidel.info>2010-12-12 22:54:50 +0000
committerJannis Leidel <jannis@leidel.info>2010-12-12 22:54:50 +0000
commit2c2209b473aeec85d16ac24469383cf0e214273b (patch)
treea055818ab0c882e4b2f573517b0c330076d4cf5b /tests/regressiontests/admin_views
parent88ff6567310d809abddb97adebf04d5e9403ca8a (diff)
Fixed #13607 -- Auto-initialize admin's date hierarchy links intelligently. Thanks, Simon Meers.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@14879 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/admin_views')
-rw-r--r--tests/regressiontests/admin_views/models.py2
-rw-r--r--tests/regressiontests/admin_views/tests.py103
2 files changed, 104 insertions, 1 deletions
diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py
index 61ca33904c..12b92d80a4 100644
--- a/tests/regressiontests/admin_views/models.py
+++ b/tests/regressiontests/admin_views/models.py
@@ -320,7 +320,7 @@ class Podcast(Media):
class PodcastAdmin(admin.ModelAdmin):
list_display = ('name', 'release_date')
list_editable = ('release_date',)
-
+ date_hierarchy = 'release_date'
ordering = ('name',)
class Vodcast(Media):
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index db2d7f9be3..0c9f03b933 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -6,6 +6,7 @@ import datetime
from django.conf import settings
from django.core import mail
from django.core.files import temp as tempfile
+from django.core.urlresolvers import reverse
# Register auth models with the admin.
from django.contrib.auth import REDIRECT_FIELD_NAME, admin
from django.contrib.auth.models import User, Permission, UNUSABLE_PASSWORD
@@ -2395,3 +2396,105 @@ class ValidXHTMLTests(TestCase):
response = self.client.get('/test_admin/%s/admin_views/' % self.urlbit)
self.assertFalse(' lang=""' in response.content)
self.assertFalse(' xml:lang=""' in response.content)
+
+
+class DateHierarchyTests(TestCase):
+ fixtures = ['admin-views-users.xml']
+
+ def setUp(self):
+ self.client.login(username='super', password='secret')
+
+ def assert_contains_year_link(self, response, date):
+ self.assertContains(response, '?release_date__year=%d"' % (date.year,))
+
+ def assert_contains_month_link(self, response, date):
+ self.assertContains(
+ response, '?release_date__year=%d&amp;release_date__month=%d"' % (
+ date.year, date.month))
+
+ def assert_contains_day_link(self, response, date):
+ self.assertContains(
+ response, '?release_date__year=%d&amp;'
+ 'release_date__month=%d&amp;release_date__day=%d"' % (
+ date.year, date.month, date.day))
+
+ def test_empty(self):
+ """
+ Ensure that no date hierarchy links display with empty changelist.
+ """
+ response = self.client.get(
+ reverse('admin:admin_views_podcast_changelist'))
+ self.assertNotContains(response, 'release_date__year=')
+ self.assertNotContains(response, 'release_date__month=')
+ self.assertNotContains(response, 'release_date__day=')
+
+ def test_single(self):
+ """
+ Ensure that single day-level date hierarchy appears for single object.
+ """
+ DATE = datetime.date(2000, 6, 30)
+ Podcast.objects.create(release_date=DATE)
+ response = self.client.get(
+ reverse('admin:admin_views_podcast_changelist'))
+ self.assert_contains_day_link(response, DATE)
+
+ def test_within_month(self):
+ """
+ Ensure that day-level links appear for changelist within single month.
+ """
+ DATES = (datetime.date(2000, 6, 30),
+ datetime.date(2000, 6, 15),
+ datetime.date(2000, 6, 3))
+ for date in DATES:
+ Podcast.objects.create(release_date=date)
+ response = self.client.get(
+ reverse('admin:admin_views_podcast_changelist'))
+ for date in DATES:
+ self.assert_contains_day_link(response, date)
+
+ def test_within_year(self):
+ """
+ Ensure that month-level links appear for changelist within single year.
+ """
+ DATES = (datetime.date(2000, 1, 30),
+ datetime.date(2000, 3, 15),
+ datetime.date(2000, 5, 3))
+ for date in DATES:
+ Podcast.objects.create(release_date=date)
+ response = self.client.get(
+ reverse('admin:admin_views_podcast_changelist'))
+ # no day-level links
+ self.assertNotContains(response, 'release_date__day=')
+ for date in DATES:
+ self.assert_contains_month_link(response, date)
+
+ def test_multiple_years(self):
+ """
+ Ensure that year-level links appear for year-spanning changelist.
+ """
+ DATES = (datetime.date(2001, 1, 30),
+ datetime.date(2003, 3, 15),
+ datetime.date(2005, 5, 3))
+ for date in DATES:
+ Podcast.objects.create(release_date=date)
+ response = self.client.get(
+ reverse('admin:admin_views_podcast_changelist'))
+ # no day/month-level links
+ self.assertNotContains(response, 'release_date__day=')
+ self.assertNotContains(response, 'release_date__month=')
+ for date in DATES:
+ self.assert_contains_year_link(response, date)
+
+ # and make sure GET parameters still behave correctly
+ for date in DATES:
+ response = self.client.get(
+ '%s?release_date__year=%d' % (
+ reverse('admin:admin_views_podcast_changelist'),
+ date.year))
+ self.assert_contains_month_link(response, date)
+
+ response = self.client.get(
+ '%s?release_date__year=%d&release_date__month=%d' % (
+ reverse('admin:admin_views_podcast_changelist'),
+ date.year, date.month))
+ self.assert_contains_day_link(response, date)