From a5440e31662ab1d69f4597f5c38e06bfa2d0470f Mon Sep 17 00:00:00 2001 From: imperosol Date: Mon, 28 Sep 2026 19:32:40 +0200 Subject: [PATCH] display the date of next happening in NewsDetailView --- com/templates/com/news_detail.jinja | 18 ++++++++++----- com/tests/test_views.py | 35 +++++++++++++++++++++++++++++ com/views.py | 4 +++- 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/com/templates/com/news_detail.jinja b/com/templates/com/news_detail.jinja index a4c9309c..43f507af 100644 --- a/com/templates/com/news_detail.jinja +++ b/com/templates/com/news_detail.jinja @@ -39,12 +39,18 @@ {{ news.club }}

{{ news.title }}

-

- - - -

+ {% if date %} +

+ - + +

+ {% endif %}
{{ news.summary|markdown }}

diff --git a/com/tests/test_views.py b/com/tests/test_views.py index 0ef3a5e2..1e765ca6 100644 --- a/com/tests/test_views.py +++ b/com/tests/test_views.py @@ -26,6 +26,7 @@ from django.utils import html from django.utils.timezone import now from django.utils.translation import gettext as _ from model_bakery import baker +from model_bakery.recipe import Recipe from pytest_django.asserts import assertNumQueries, assertRedirects from club.models import Club, ClubRole, Membership @@ -362,3 +363,37 @@ def test_moderate_poster(client: Client, referer: str | None): poster.refresh_from_db() assert poster.is_moderated assert poster.moderator == user + + +class TestNewsDetail(TestCase): + @classmethod + def setUpTestData(cls) -> None: + cls.news = baker.make(News, is_published=True) + cls.user = subscriber_user.make() + cls.url = reverse("com:news_detail", kwargs={"news_id": cls.news.id}) + + def test_page_ok(self): + self.client.force_login(self.user) + res = self.client.get(self.url) + assert res.status_code == 200 + + def test_displayed_date(self): + self.client.force_login(self.user) + n = now() + date_recipe = Recipe(NewsDate, news=self.news) + date_recipe.make( + start_date=n - timedelta(days=1, hours=6), end_date=n - timedelta(days=1) + ) + date_recipe.make( + start_date=n - timedelta(hours=6), end_date=n + timedelta(hours=1) + ) + expected = date_recipe.make( # we expect the next happening date. + start_date=n + timedelta(days=1), end_date=n + timedelta(days=1, hours=1) + ) + date_recipe.make( + start_date=n + timedelta(days=2), end_date=n + timedelta(days=2, hours=1) + ) + self.client.force_login(self.user) + res = self.client.get(self.url) + assert res.status_code == 200 + assert res.context_data["date"] == expected diff --git a/com/views.py b/com/views.py index 56126dcf..82075aa8 100644 --- a/com/views.py +++ b/com/views.py @@ -301,7 +301,9 @@ class NewsDetailView(CanViewMixin, DetailView): queryset = News.objects.select_related("club", "author", "moderator") def get_context_data(self, **kwargs): - return super().get_context_data(**kwargs) | {"date": self.object.dates.first()} + return super().get_context_data(**kwargs) | { + "date": self.object.dates.filter(start_date__gt=now()).first() + } class NewsFeed(Feed):