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": "
متن تست
", "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, "عنوان تست")