From 22df3181a58046398f25c638d9332a8af006400e Mon Sep 17 00:00:00 2001 From: Giovanni Pellerano Date: Sat, 15 Feb 2025 00:00:31 +0100 Subject: [PATCH] Reset reports' reminder when reports are closed --- backend/globaleaks/handlers/recipient/rtip.py | 7 ++- .../tests/handlers/recipient/test_rtip.py | 43 ++++++++++++++++++- backend/globaleaks/tests/helpers.py | 2 +- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/backend/globaleaks/handlers/recipient/rtip.py b/backend/globaleaks/handlers/recipient/rtip.py index 2ee09c2709..d8eb168247 100644 --- a/backend/globaleaks/handlers/recipient/rtip.py +++ b/backend/globaleaks/handlers/recipient/rtip.py @@ -236,8 +236,8 @@ def db_update_submission_status(session, tid, user_id, itip, status_id, substatu if status_id == 'new': return + report_close_request = itip.status != "closed" and status_id == "closed" report_reopen_request = itip.status == "closed" and status_id == "opened" - db_recalculate_data_retention(session, itip, report_reopen_request) itip.status = status_id itip.substatus = substatus_id or None @@ -249,6 +249,11 @@ def db_update_submission_status(session, tid, user_id, itip, status_id, substatu db_log(session, tid=tid, type='update_report_status', user_id=user_id, object_id=itip.id, data=log_data) + if report_close_request: + itip.reminder_date = datetime_never() + + db_recalculate_data_retention(session, itip, report_reopen_request) + def db_update_temporary_redaction(session, tid, user_id, redaction, redaction_data): """ diff --git a/backend/globaleaks/tests/handlers/recipient/test_rtip.py b/backend/globaleaks/tests/handlers/recipient/test_rtip.py index efa9a7780a..afa1c0bc85 100644 --- a/backend/globaleaks/tests/handlers/recipient/test_rtip.py +++ b/backend/globaleaks/tests/handlers/recipient/test_rtip.py @@ -5,7 +5,7 @@ from globaleaks.handlers.recipient import rtip from globaleaks.jobs.delivery import Delivery from globaleaks.tests import helpers -from globaleaks.utils.utility import datetime_now +from globaleaks.utils.utility import datetime_never, datetime_now class TestRTipInstance(helpers.TestHandlerWithPopulatedDB): @@ -292,6 +292,47 @@ def test_delete_existent_tip_by_existent_and_logged_but_wrong_receiver(self): handler = self.request(role='receiver', user_id=rtip_desc['receiver_id']) yield self.assertFailure(handler.delete(u"unexistent_tip"), NoResultFound) + @inlineCallbacks + def test_set_reminder_and_reset_upon_close(self): + rtip_descs = yield self.get_rtips() + + for rtip_desc in rtip_descs: + self.assertEqual(rtip_desc['reminder_date'], datetime_never()) + + operation = { + 'operation': 'set_reminder', + 'args': { + 'value': datetime_now().timestamp() + 7 * 22 * 3600 * 1000, + 'substatus': '', + 'motivation': '' + } + } + + handler = self.request(operation, role='receiver', user_id=rtip_desc['receiver_id']) + yield handler.put(rtip_desc['id']) + self.assertEqual(handler.request.code, 200) + + rtip_descs = yield self.get_rtips() + for rtip_desc in rtip_descs: + self.assertNotEqual(rtip_desc['reminder_date'], datetime_never()) + + operation = { + 'operation': 'update_status', + 'args': { + 'status': 'closed', + 'substatus': '', + 'motivation': '' + } + } + + handler = self.request(operation, role='receiver', user_id=rtip_desc['receiver_id']) + yield handler.put(rtip_desc['id']) + self.assertEqual(handler.request.code, 200) + + rtip_descs = yield self.get_rtips() + for rtip_desc in rtip_descs: + self.assertEqual(rtip_desc['reminder_date'], datetime_never()) + class TestRTipCommentCollection(helpers.TestHandlerWithPopulatedDB): _handler = rtip.RTipCommentCollection diff --git a/backend/globaleaks/tests/helpers.py b/backend/globaleaks/tests/helpers.py index 129e8b4a82..da054592f3 100644 --- a/backend/globaleaks/tests/helpers.py +++ b/backend/globaleaks/tests/helpers.py @@ -286,7 +286,7 @@ def __init__(self): 'additional_questionnaire_id': '', 'select_all_receivers': True, 'tip_timetolive': 20, - 'tip_reminder': 80, + 'tip_reminder': 0, 'maximum_selectable_receivers': 0, 'show_context': True, 'allow_recipients_selection': False,