/tests/regressiontests/views/tests/generic/date_based.py

https://code.google.com/p/mango-py/ · Python · 140 lines · 114 code · 20 blank · 6 comment · 3 complexity · 95de966aa94111b60ea517a32dec5685 MD5 · raw file

  1. # coding: utf-8
  2. from django.test import TestCase
  3. from datetime import datetime, date
  4. from datetime import timedelta
  5. from regressiontests.views.models import Article, Author, DateArticle
  6. class ObjectDetailTest(TestCase):
  7. fixtures = ['testdata.json']
  8. def setUp(self):
  9. # Correct the date for the current article
  10. current_article = Article.objects.get(title="Current Article")
  11. current_article.date_created = datetime.now()
  12. current_article.save()
  13. def test_finds_past(self):
  14. "date_based.object_detail can view a page in the past"
  15. response = self.client.get('/views/date_based/object_detail/2001/01/01/old_article/')
  16. self.assertEqual(response.status_code, 200)
  17. self.assertEqual(response.context['object'].title, "Old Article")
  18. def test_object_detail_finds_today(self):
  19. "date_based.object_detail can view a page from today"
  20. today_url = datetime.now().strftime('%Y/%m/%d')
  21. response = self.client.get('/views/date_based/object_detail/%s/current_article/' % today_url)
  22. self.assertEqual(response.status_code, 200)
  23. self.assertEqual(response.context['object'].title, "Current Article")
  24. def test_object_detail_ignores_future(self):
  25. "date_based.object_detail can view a page from the future, but only if allowed."
  26. response = self.client.get('/views/date_based/object_detail/3000/01/01/future_article/')
  27. self.assertEqual(response.status_code, 404)
  28. def test_object_detail_allowed_future_if_enabled(self):
  29. "date_based.object_detail can view a page from the future if explicitly allowed."
  30. response = self.client.get('/views/date_based/object_detail/3000/01/01/future_article/allow_future/')
  31. self.assertEqual(response.status_code, 200)
  32. self.assertEqual(response.context['object'].title, "Future Article")
  33. class MonthArchiveTest(TestCase):
  34. def test_archive_month_includes_only_month(self):
  35. "Regression for #3031: Archives around Feburary include only one month"
  36. author = Author(name="John Smith")
  37. author.save()
  38. # 2004 was a leap year, so it should be weird enough to not cheat
  39. first_second_of_feb = datetime(2004, 2, 1, 0, 0, 1)
  40. first_second_of_mar = datetime(2004, 3, 1, 0, 0, 1)
  41. two_seconds = timedelta(0, 2, 0)
  42. article = Article(title="example", author=author)
  43. article.date_created = first_second_of_feb
  44. article.save()
  45. response = self.client.get('/views/date_based/archive_month/2004/02/')
  46. self.assertEqual(response.status_code, 200)
  47. self.assertEqual(response.context['next_month'], date(2004, 3, 1))
  48. self.assertEqual(response.context['previous_month'], date(2004, 1, 1))
  49. article.date_created = first_second_of_feb-two_seconds
  50. article.save()
  51. response = self.client.get('/views/date_based/archive_month/2004/02/')
  52. self.assertEqual(response.status_code, 404)
  53. article.date_created = first_second_of_mar-two_seconds
  54. article.save()
  55. response = self.client.get('/views/date_based/archive_month/2004/02/')
  56. self.assertEqual(response.status_code, 200)
  57. self.assertEqual(response.context['next_month'], date(2004, 3, 1))
  58. self.assertEqual(response.context['previous_month'], date(2004, 1, 1))
  59. article.date_created = first_second_of_mar
  60. article.save()
  61. response = self.client.get('/views/date_based/archive_month/2004/02/')
  62. self.assertEqual(response.status_code, 404)
  63. article2 = DateArticle(title="example", author=author)
  64. article2.date_created = first_second_of_feb.date()
  65. article2.save()
  66. response = self.client.get('/views/date_based/datefield/archive_month/2004/02/')
  67. self.assertEqual(response.status_code, 200)
  68. self.assertEqual(response.context['next_month'], date(2004, 3, 1))
  69. self.assertEqual(response.context['previous_month'], date(2004, 1, 1))
  70. article2.date_created = (first_second_of_feb-two_seconds).date()
  71. article2.save()
  72. response = self.client.get('/views/date_based/datefield/archive_month/2004/02/')
  73. self.assertEqual(response.status_code, 404)
  74. article2.date_created = (first_second_of_mar-two_seconds).date()
  75. article2.save()
  76. response = self.client.get('/views/date_based/datefield/archive_month/2004/02/')
  77. self.assertEqual(response.status_code, 200)
  78. self.assertEqual(response.context['next_month'], date(2004, 3, 1))
  79. self.assertEqual(response.context['previous_month'], date(2004, 1, 1))
  80. article2.date_created = first_second_of_mar.date()
  81. article2.save()
  82. response = self.client.get('/views/date_based/datefield/archive_month/2004/02/')
  83. self.assertEqual(response.status_code, 404)
  84. now = datetime.now()
  85. prev_month = now.date().replace(day=1)
  86. if prev_month.month == 1:
  87. prev_month = prev_month.replace(year=prev_month.year-1, month=12)
  88. else:
  89. prev_month = prev_month.replace(month=prev_month.month-1)
  90. article2.date_created = now
  91. article2.save()
  92. response = self.client.get('/views/date_based/datefield/archive_month/%s/' % now.strftime('%Y/%m'))
  93. self.assertEqual(response.status_code, 200)
  94. self.assertEqual(response.context['next_month'], None)
  95. self.assertEqual(response.context['previous_month'], prev_month)
  96. def test_archive_month_date_list(self):
  97. author = Author(name="John Smith")
  98. author.save()
  99. date1 = datetime(2010, 1, 1, 0, 0, 0)
  100. date2 = datetime(2010, 1, 2, 0, 0, 0)
  101. Article.objects.create(title='example1', author=author, date_created=date1)
  102. Article.objects.create(title='example2', author=author, date_created=date2)
  103. response = self.client.get('/views/date_based/archive_month/2010/1/')
  104. self.assertEqual(response.status_code, 200)
  105. self.assertEqual(len(response.context['date_list']), 2)
  106. self.assertEqual(response.context['date_list'][0], date1)
  107. # Checks that the same date is not included more than once in the list
  108. Article.objects.create(title='example2', author=author, date_created=date2)
  109. response = self.client.get('/views/date_based/archive_month/2010/1/')
  110. self.assertEqual(len(response.context['date_list']), 2)
  111. class DayArchiveTests(TestCase):
  112. def test_year_month_day_format(self):
  113. """
  114. Make sure day views don't get confused with numeric month formats (#7944)
  115. """
  116. author = Author.objects.create(name="John Smith")
  117. article = Article.objects.create(title="example", author=author, date_created=datetime(2004, 1, 21, 0, 0, 1))
  118. response = self.client.get('/views/date_based/archive_day/2004/1/21/')
  119. self.assertEqual(response.status_code, 200)
  120. self.assertEqual(response.context['object_list'][0], article)