diff --git a/polls/models.py b/polls/models.py index 101fb9b..f765548 100644 --- a/polls/models.py +++ b/polls/models.py @@ -27,7 +27,7 @@ class Question(models.Model): """ question_text = models.CharField(max_length=200) - pub_date = models.DateTimeField("date published", default=timezone.now) + pub_date = models.DateTimeField("date published", auto_now_add=True) end_date = models.DateTimeField("date ended", null=True) def was_published_recently(self): diff --git a/polls/tests.py b/polls/tests.py index d378745..9141b10 100644 --- a/polls/tests.py +++ b/polls/tests.py @@ -26,7 +26,6 @@ class QuestionModelTests(TestCase): old_question = Question(pub_date=time) self.assertIs(old_question.was_published_recently(), False) - def test_was_published_recently_with_recent_question(self): """ was_published_recently() returns True for questions whose pub_date @@ -36,7 +35,6 @@ class QuestionModelTests(TestCase): recent_question = Question(pub_date=time) self.assertIs(recent_question.was_published_recently(), True) - def test_is_published_with_future_question(self): """ is_published() should return False for questions whos pub_date is in the @@ -46,6 +44,18 @@ class QuestionModelTests(TestCase): future_question = Question(pub_date=future_date) self.assertIs(future_question.is_published(), False) + def test_default_pub_date(self): + """ + Questions with the default pub_date (now) are displayed on the index page. + """ + question = Question.objects.create(question_text="Default pub date question.") + + response = self.client.get(reverse("polls:index")) + self.assertQuerySetEqual( + response.context["latest_question_list"], + [question], + ) + def test_is_published_with_past_question(self): """ is_published() should return True for questions whose pub_date is in the @@ -95,13 +105,15 @@ class QuestionModelTests(TestCase): self.assertIs(question.can_vote(), True) -def create_question(question_text, days): +def create_question(self, question_text, days, pub_date=None): """ Create a question with the given `question_text` and published the given number of `days` offset to now (negative for questions published in the past, positive for questions that have yet to be published). """ - time = timezone.now() + datetime.timedelta(days=days) + time = timezone.now() + timezone.timedelta(days=days) + if pub_date is not None: + time = pub_date return Question.objects.create(question_text=question_text, pub_date=time) @@ -120,7 +132,9 @@ class QuestionIndexViewTests(TestCase): Questions with a pub_date in the past are displayed on the index page. """ - question = create_question(question_text="Past question.", days=-30) + question = Question.objects.create(question_text="Past question.") + question.pub_date = timezone.now() - timezone.timedelta(days=30) + question.save() response = self.client.get(reverse("polls:index")) self.assertQuerySetEqual( response.context["latest_question_list"], @@ -132,7 +146,9 @@ class QuestionIndexViewTests(TestCase): Questions with a pub_date in the future aren't displayed on the index page. """ - create_question(question_text="Future question.", days=30) + future_question = Question.objects.create(question_text="Future question.") + future_question.pub_date = timezone.now() + timezone.timedelta(days=30) + future_question.save() response = self.client.get(reverse("polls:index")) self.assertContains(response, "No polls are available.") self.assertQuerySetEqual(response.context["latest_question_list"], []) @@ -142,20 +158,32 @@ class QuestionIndexViewTests(TestCase): Even if both past and future questions exist, only past questions are displayed. """ - question = create_question(question_text="Past question.", days=-30) - create_question(question_text="Future question.", days=30) + past_question = Question.objects.create(question_text="Past question.") + past_question.pub_date = timezone.now() - timezone.timedelta(days=30) + past_question.save() + + future_question = Question.objects.create(question_text="Future question.") + future_question.pub_date = timezone.now() + timezone.timedelta(days=30) + future_question.save() + response = self.client.get(reverse("polls:index")) self.assertQuerySetEqual( response.context["latest_question_list"], - [question], + [past_question], ) def test_two_past_questions(self): """ The questions index page may display multiple questions. """ - question1 = create_question(question_text="Past question 1.", days=-30) - question2 = create_question(question_text="Past question 2.", days=-5) + question1 = Question.objects.create(question_text="Past question 1.") + question1.pub_date = timezone.now() - timezone.timedelta(days=30) + question1.save() + + question2 = Question.objects.create(question_text="Past question 2.") + question2.pub_date = timezone.now() - timezone.timedelta(days=5) + question2.save() + response = self.client.get(reverse("polls:index")) self.assertQuerySetEqual( response.context["latest_question_list"], @@ -169,7 +197,10 @@ class QuestionDetailViewTests(TestCase): The detail view of a question with a pub_date in the future returns a 404 not found. """ - future_question = create_question(question_text="Future question.", days=5) + future_question = Question.objects.create(question_text="Future question.") + future_question.pub_date = timezone.now() + timezone.timedelta(days=5) + future_question.save() + url = reverse("polls:detail", args=(future_question.id,)) response = self.client.get(url) self.assertEqual(response.status_code, 404) @@ -179,7 +210,10 @@ class QuestionDetailViewTests(TestCase): The detail view of a question with a pub_date in the past displays the question's text. """ - past_question = create_question(question_text="Past Question.", days=-5) + past_question = Question.objects.create(question_text="Past Question.") + past_question.pub_date = timezone.now() - timezone.timedelta(days=5) + past_question.save() + url = reverse("polls:detail", args=(past_question.id,)) response = self.client.get(url) self.assertContains(response, past_question.question_text)