From 3f16a021f20298f78ab1731b5d4952c067a0d786 Mon Sep 17 00:00:00 2001 From: Bryan Brancotte <bryan.brancotte@pasteur.fr> Date: Tue, 18 Feb 2025 17:41:00 +0100 Subject: [PATCH] take jury manager into account when looking for pending user. Fixes #172 --- .../strass_app/templatetags/strass_tags.py | 8 +++- .../strass_app/tests/test_strass_tags.py | 45 +++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/strass/strass_app/templatetags/strass_tags.py b/src/strass/strass_app/templatetags/strass_tags.py index c70d4983..8b261b62 100644 --- a/src/strass/strass_app/templatetags/strass_tags.py +++ b/src/strass/strass_app/templatetags/strass_tags.py @@ -167,7 +167,11 @@ def has_pending_user(request): qs = models.User.objects.filter(is_active=True) qs = business_logic.annotate_is_juror(qs, pending_to_become_one=True) qs = business_logic.annotate_is_reviewer(qs, pending_to_become_one=True) - return request is not None and qs.filter(Q(is_pending_juror=True) | Q(is_pending_reviewer=True)).exists() + qs = business_logic.annotate_is_jury_manager(qs, pending_to_become_one=True) + return ( + request is not None + and qs.filter(Q(is_pending_juror=True) | Q(is_pending_reviewer=True) | Q(is_pending_jury_manager=True)).exists() + ) def cleanup_line_starts(value): @@ -233,7 +237,7 @@ def my_progress_bar(value, total=100, color_class='primary', as_ratio=False, sec if over_all_value > 0: limit = int(10000 * value / over_all_value) / 100 style = f"background: linear-gradient( to right, #0000 {limit}%, #fff3 {limit}% 40% );" - style += f"width: {0 if total==0 else int(100.0*over_all_value/total)}%;" + style += f"width: {0 if total == 0 else int(100.0 * over_all_value / total)}%;" low = total == 0 or (1.0 * over_all_value / total < 0.3) bar = ( '<div class="progress position-relative" style="height: 2em;">' diff --git a/src/strass/strass_app/tests/test_strass_tags.py b/src/strass/strass_app/tests/test_strass_tags.py index 75e825d7..8f9797ac 100644 --- a/src/strass/strass_app/tests/test_strass_tags.py +++ b/src/strass/strass_app/tests/test_strass_tags.py @@ -1,10 +1,13 @@ from html.parser import HTMLParser +from django.contrib.auth import get_user_model +from django.test import RequestFactory from django.utils import timezone from freezegun import freeze_time from live_settings import live_settings from strass_app import business_logic +from strass_app.templatetags import strass_tags from strass_app.templatetags.strass_tags import my_progress_bar, get_timer_before, markdown from strass_app.tests.test_base_test_case import TooledTestCase @@ -110,3 +113,45 @@ class AllTestCase(TooledTestCase): self.assertIn('<a href', markdown("[toto](https://aa.bb.com)")) self.assertNotIn('<a href', markdown("[toto](javascript:alert('Hi'))")) self.assertNotIn('<a href', markdown("[toto](script://a=1;)")) + + def test_has_pending_user(self): + # jury_manager = get_user_model().objects.create( + # username="jury_manager", + # first_name="jury", + # last_name="manager", + # email="jury_manager@pasteur.fr", + # ) + + u = get_user_model().objects.create( + username="user", + first_name="usery", + last_name="user", + email="user@pasteur.fr", + ) + # business_logic.set_jury_manager(jury_manager, True) + req = RequestFactory().get('/blabla') + # req.user = jury_manager + + self.assertFalse(strass_tags.has_pending_user(req)) + business_logic.set_reviewer(u, True, pending_to_become_one=True) + self.assertTrue(strass_tags.has_pending_user(req)) + business_logic.set_reviewer(u, True) + self.assertFalse(strass_tags.has_pending_user(req)) + business_logic.set_reviewer(u, False) + self.assertFalse(strass_tags.has_pending_user(req)) + + self.assertFalse(strass_tags.has_pending_user(req)) + business_logic.set_juror(u, True, pending_to_become_one=True) + self.assertTrue(strass_tags.has_pending_user(req)) + business_logic.set_juror(u, True) + self.assertFalse(strass_tags.has_pending_user(req)) + business_logic.set_juror(u, False) + self.assertFalse(strass_tags.has_pending_user(req)) + + self.assertFalse(strass_tags.has_pending_user(req)) + business_logic.set_jury_manager(u, True, pending_to_become_one=True) + self.assertTrue(strass_tags.has_pending_user(req)) + business_logic.set_jury_manager(u, True) + self.assertFalse(strass_tags.has_pending_user(req)) + business_logic.set_jury_manager(u, False) + self.assertFalse(strass_tags.has_pending_user(req)) -- GitLab