52 lines
2.2 KiB
Python
52 lines
2.2 KiB
Python
import datetime
|
|
|
|
from django.test import TestCase
|
|
from django.urls import reverse
|
|
|
|
from apps.landing.models import Article
|
|
|
|
|
|
def _make_article(**overrides):
|
|
defaults = {
|
|
"slug": "test-article",
|
|
"title": "عنوان تست",
|
|
"excerpt": "خلاصه تست",
|
|
"content_html": "<p>متن تست</p>",
|
|
"published_at": datetime.date(2020, 1, 1),
|
|
"is_published": True,
|
|
}
|
|
defaults.update(overrides)
|
|
return Article.objects.create(**defaults)
|
|
|
|
|
|
class ArticlePublishScheduleTests(TestCase):
|
|
"""published_at یک gate واقعی است — مقالهی is_published=True با تاریخِ
|
|
آینده نباید تا رسیدن آن تاریخ در سایت دیده شود (انتشار پلکانی/زمانبندیشده)."""
|
|
|
|
def test_past_dated_article_appears_in_list(self):
|
|
_make_article(slug="past-one", published_at=datetime.date(2020, 1, 1))
|
|
response = self.client.get(reverse("landing:article_list"))
|
|
self.assertContains(response, "عنوان تست")
|
|
|
|
def test_future_dated_article_hidden_from_list(self):
|
|
future = datetime.date.today() + datetime.timedelta(days=10)
|
|
_make_article(slug="future-one", published_at=future)
|
|
response = self.client.get(reverse("landing:article_list"))
|
|
self.assertNotContains(response, "عنوان تست")
|
|
|
|
def test_future_dated_article_detail_is_404(self):
|
|
future = datetime.date.today() + datetime.timedelta(days=10)
|
|
article = _make_article(slug="future-two", published_at=future)
|
|
response = self.client.get(reverse("landing:article_detail", args=[article.slug]))
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
def test_unpublished_article_hidden_regardless_of_date(self):
|
|
_make_article(slug="draft-one", is_published=False, published_at=datetime.date(2020, 1, 1))
|
|
response = self.client.get(reverse("landing:article_list"))
|
|
self.assertNotContains(response, "عنوان تست")
|
|
|
|
def test_today_dated_article_is_visible(self):
|
|
_make_article(slug="today-one", published_at=datetime.date.today())
|
|
response = self.client.get(reverse("landing:article_list"))
|
|
self.assertContains(response, "عنوان تست")
|