From 1b75a4c4d7fe02cc5765fbdde2ed4e174546b922 Mon Sep 17 00:00:00 2001 From: Jhonatan Lopes Date: Wed, 8 Nov 2023 16:15:35 -0300 Subject: [PATCH 1/3] Annotate avg bin --- .../pagemodels/buyersguide/products.py | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/network-api/networkapi/wagtailpages/pagemodels/buyersguide/products.py b/network-api/networkapi/wagtailpages/pagemodels/buyersguide/products.py index cddc22e328f..5bbbf2faf1c 100644 --- a/network-api/networkapi/wagtailpages/pagemodels/buyersguide/products.py +++ b/network-api/networkapi/wagtailpages/pagemodels/buyersguide/products.py @@ -390,6 +390,26 @@ def labelled_creepiness_per_bin(self): } return creepiness_per_bin + @property + def average_bin(self): + """Name of the bin corresponding to the average vote""" + total_votes = self.total_votes + # If there's no votes, let the user know (also protects from division by zero errors) + if total_votes == 0: + return { + "label": "No votes", + "localized": gettext("No votes"), + } + + average_vote = self.average_creepiness + mode_bin = round(average_vote / 20) - 1 + label = self.BIN_LABELS[f"bin_{mode_bin}"] + + return { + "label": label["key"], + "localized": label["label"], + } + class ProductPageCategory(TranslatableMixin, Orderable): product = ParentalKey( @@ -741,7 +761,10 @@ def annotated_evaluation(self): if not self.evaluation: return None return ( - ProductPageEvaluation.objects.with_total_creepiness().with_average_creepiness().get(pk=self.evaluation.pk) + ProductPageEvaluation.objects.with_total_votes() + .with_total_creepiness() + .with_average_creepiness() + .get(pk=self.evaluation.pk) ) @property @@ -756,6 +779,10 @@ def creepiness(self): except AttributeError: return self.annotated_evaluation.average_creepiness + @property + def average_bin(self): + return self.annotated_evaluation.average_bin + @property def get_voting_json(self): """ From cd770ad0dc1775bc368b6d22a630d2d4602dce5f Mon Sep 17 00:00:00 2001 From: Jhonatan Lopes Date: Wed, 8 Nov 2023 16:16:22 -0300 Subject: [PATCH 2/3] Update tests --- .../tests/buyersguide/test_product_page_evaluation.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/network-api/networkapi/wagtailpages/tests/buyersguide/test_product_page_evaluation.py b/network-api/networkapi/wagtailpages/tests/buyersguide/test_product_page_evaluation.py index 33cf019487a..a6131b7fc79 100644 --- a/network-api/networkapi/wagtailpages/tests/buyersguide/test_product_page_evaluation.py +++ b/network-api/networkapi/wagtailpages/tests/buyersguide/test_product_page_evaluation.py @@ -147,6 +147,9 @@ def test_creepiness_per_bin(self): self.assertEqual(evaluation.average_creepiness, 50) self.assertEqual(evaluation.total_creepiness, 250) self.assertEqual(evaluation.total_votes, 5) + self.assertDictEqual( + evaluation.average_bin, {"label": "A little creepy", "localized": gettext("A little creepy")} + ) def test_creepiness_per_bin_limits(self): product_page = buyersguide_factories.ProductPageFactory(parent=self.bg) @@ -189,6 +192,9 @@ def test_creepiness_per_bin_limits(self): self.assertEqual(evaluation.average_creepiness, 49.5) self.assertEqual(evaluation.total_creepiness, 495) self.assertEqual(evaluation.total_votes, 10) + self.assertDictEqual( + evaluation.average_bin, {"label": "A little creepy", "localized": gettext("A little creepy")} + ) class TestProductPageEvaluationPrefetching(BuyersGuideTestCase): From 8c3cf2695da2d1335d026c7f5b56daca9ee78842 Mon Sep 17 00:00:00 2001 From: Jhonatan Lopes Date: Wed, 8 Nov 2023 16:16:32 -0300 Subject: [PATCH 3/3] Update template --- .../templates/fragments/buyersguide/average_vote_rating.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/network-api/networkapi/templates/fragments/buyersguide/average_vote_rating.html b/network-api/networkapi/templates/fragments/buyersguide/average_vote_rating.html index 23273937132..b67b1f941c7 100644 --- a/network-api/networkapi/templates/fragments/buyersguide/average_vote_rating.html +++ b/network-api/networkapi/templates/fragments/buyersguide/average_vote_rating.html @@ -1,8 +1,8 @@ {% load i18n %} - {% with vote_data=product.votes.get_vote_average %} + {% with vote_data=product.average_bin %} {% trans "People voted:" %} - {{ vote_data }} + {{ vote_data.localized }} {% endwith %}