From 028814aedf54bd6ab093b64040da5c79df77bef7 Mon Sep 17 00:00:00 2001 From: Vincent Porte Date: Mon, 9 Sep 2024 16:55:39 +0200 Subject: [PATCH] feat(stats): ajout d'un lien vers la page de stats hebdos (#774) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description 🎸 Vue de redirection vers la plus récente `ForumStatWeekArchiveView` possible, sinon `404` ## Type de changement 🎢 Nouvelle fonctionnalité (changement non cassant qui ajoute une fonctionnalité). ### Captures d'écran (optionnel) vue de la page stats avec le nouveau lien sous forme de bouton ![image](https://github.com/user-attachments/assets/3d300d72-95ab-4eed-b3b0-865bbb24bfa6) vue des nouveaux titres de section de la page hebdo ![image](https://github.com/user-attachments/assets/8bf9593a-c76a-4100-b566-c8f1fe8744fd) --- lacommunaute/stats/factories.py | 1 + .../tests/__snapshots__/tests_views.ambr | 8 +++-- lacommunaute/stats/tests/tests_views.py | 24 ++++++++++++++ lacommunaute/stats/urls.py | 9 +++++- lacommunaute/stats/views.py | 16 ++++++++++ .../stats/forum_stat_week_archive.html | 32 +++++++++++-------- .../templates/stats/statistiques.html | 7 ++++ 7 files changed, 80 insertions(+), 17 deletions(-) diff --git a/lacommunaute/stats/factories.py b/lacommunaute/stats/factories.py index 2beb7fed7..5db9c6891 100644 --- a/lacommunaute/stats/factories.py +++ b/lacommunaute/stats/factories.py @@ -39,3 +39,4 @@ class Meta: class Params: for_snapshot = factory.Trait(period="week", date=datetime.date(2024, 5, 20)) + for_snapshot_older = factory.Trait(period="week", date=datetime.date(2024, 5, 13)) diff --git a/lacommunaute/stats/tests/__snapshots__/tests_views.ambr b/lacommunaute/stats/tests/__snapshots__/tests_views.ambr index 9c067ea7a..2b1c57ea6 100644 --- a/lacommunaute/stats/tests/__snapshots__/tests_views.ambr +++ b/lacommunaute/stats/tests/__snapshots__/tests_views.ambr @@ -43,7 +43,9 @@
-

Les 1 fiches pratiques les plus notées sur la période

+

+ Les 1 fiches pratiques les plus notées pendant la semaine du 20 mai 2024 au 26 mai 2024 +

@@ -72,7 +74,9 @@
-

Les 2 fiches pratiques les plus lues sur la période

+

+ Les 2 fiches pratiques les plus lues pendant la semaine du 20 mai 2024 au 26 mai 2024 +

diff --git a/lacommunaute/stats/tests/tests_views.py b/lacommunaute/stats/tests/tests_views.py index 46d8cbe92..5dab52ad2 100644 --- a/lacommunaute/stats/tests/tests_views.py +++ b/lacommunaute/stats/tests/tests_views.py @@ -167,6 +167,12 @@ def test_visitors_in_context_data(self, client, db, setup_statistiques_data, exp assert response.status_code == 200 assert response.context["stats"] == expected + def test_link_to_weekly_lastest_stats_view(self, client, db): + url = reverse("stats:statistiques") + response = client.get(url) + assert response.status_code == 200 + assertContains(response, reverse("stats:redirect_to_latest_weekly_stats")) + class TestMonthlyVisitorsView: def test_context_data(self, client, db): @@ -346,3 +352,21 @@ def test_visitors(self, client, db, snapshot): "nb_uniq_engaged_visitors": [], } assert response.context_data["stats"] == expected_stats + + +@pytest.mark.parametrize( + "forum_stats,status_code", + [ + (lambda: None, 404), + (lambda: [ForumStatFactory(for_snapshot=True), ForumStatFactory(for_snapshot_older=True)], 302), + ], +) +def test_redirect_to_latest_weekly_stats(client, db, forum_stats, status_code): + forum_stats = forum_stats() + response = client.get(reverse("stats:redirect_to_latest_weekly_stats")) + assert response.status_code == status_code + if forum_stats: + assert response.url == reverse( + "stats:forum_stat_week_archive", + kwargs={"year": forum_stats[0].date.year, "week": forum_stats[0].date.strftime("%W")}, + ) diff --git a/lacommunaute/stats/urls.py b/lacommunaute/stats/urls.py index b7f35a38d..f9f53cce2 100644 --- a/lacommunaute/stats/urls.py +++ b/lacommunaute/stats/urls.py @@ -1,6 +1,12 @@ from django.urls import path -from lacommunaute.stats.views import DailyDSPView, ForumStatWeekArchiveView, MonthlyVisitorsView, StatistiquesPageView +from lacommunaute.stats.views import ( + DailyDSPView, + ForumStatWeekArchiveView, + MonthlyVisitorsView, + StatistiquesPageView, + redirect_to_latest_weekly_stats, +) app_name = "stats" @@ -10,4 +16,5 @@ path("monthly-visitors/", MonthlyVisitorsView.as_view(), name="monthly_visitors"), path("dsp/", DailyDSPView.as_view(), name="dsp"), path("weekly///", ForumStatWeekArchiveView.as_view(), name="forum_stat_week_archive"), + path("weekly/", redirect_to_latest_weekly_stats, name="redirect_to_latest_weekly_stats"), ] diff --git a/lacommunaute/stats/views.py b/lacommunaute/stats/views.py index 8014d3b21..2505754c6 100644 --- a/lacommunaute/stats/views.py +++ b/lacommunaute/stats/views.py @@ -4,6 +4,8 @@ from dateutil.relativedelta import relativedelta from django.db.models import Avg, CharField, Count, Q from django.db.models.functions import Cast +from django.shortcuts import redirect, render +from django.urls import reverse from django.utils.dateformat import format from django.utils.timezone import localdate from django.views.generic.base import TemplateView @@ -160,3 +162,17 @@ def get_context_data(self, **kwargs): context["stats"] = get_daily_visits_stats(from_date=end_date - relativedelta(days=89), to_date=end_date) context["rated_forums"] = self.get_most_rated_forums(start_date, end_date) return context + + +def redirect_to_latest_weekly_stats(request): + latest_weekly_stat = ForumStat.objects.filter(period="week").order_by("-date").first() + + if latest_weekly_stat: + return redirect( + reverse( + "stats:forum_stat_week_archive", + kwargs={"year": latest_weekly_stat.date.year, "week": latest_weekly_stat.date.strftime("%W")}, + ) + ) + + return render(request, "404.html", status=404) diff --git a/lacommunaute/templates/stats/forum_stat_week_archive.html b/lacommunaute/templates/stats/forum_stat_week_archive.html index 15183e754..8a9226556 100644 --- a/lacommunaute/templates/stats/forum_stat_week_archive.html +++ b/lacommunaute/templates/stats/forum_stat_week_archive.html @@ -29,24 +29,14 @@

-
-
-
-
-
-

Trafic global sur la période

- -
-
-
-
-
-

Les {{ object_list|length }} fiches pratiques les plus lues sur la période

+

+ Les {{ object_list|length }} fiches pratiques les plus lues pendant la semaine du {{ week|date:"j F Y" }} au {{ end_date|date:"j F Y" }} +

@@ -77,7 +67,9 @@

Les {{ object_list|length }} fiches pratiques les plus lues sur la période<
-

Les {{ rated_forums|length }} fiches pratiques les plus notées sur la période

+

+ Les {{ rated_forums|length }} fiches pratiques les plus notées pendant la semaine du {{ week|date:"j F Y" }} au {{ end_date|date:"j F Y" }} +

@@ -101,6 +93,18 @@

Les {{ rated_forums|length }} fiches pratiques les plus notées sur la péri +
+
+
+
+
+

Trafic quotidien jusqu'au {{ end_date|date:"j F Y" }}

+ +
+
+
+
+
diff --git a/lacommunaute/templates/stats/statistiques.html b/lacommunaute/templates/stats/statistiques.html index 8747d099b..ed62f519f 100644 --- a/lacommunaute/templates/stats/statistiques.html +++ b/lacommunaute/templates/stats/statistiques.html @@ -97,6 +97,13 @@

{{ dsp_count }} Diagnostique{{ dsp_count|pluralizefr }} Parcours IAE

+
{% endblock %}