From 445407a849f70f96293f99e6538a4413e9693697 Mon Sep 17 00:00:00 2001 From: Tristan Gueguen Date: Wed, 6 Nov 2024 17:24:09 +0100 Subject: [PATCH 1/5] fix(regulations): order regulatory computations to have deterministic order --- app/domain/regulation_computations.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/domain/regulation_computations.py b/app/domain/regulation_computations.py index ad482a93..41aa2641 100644 --- a/app/domain/regulation_computations.py +++ b/app/domain/regulation_computations.py @@ -45,7 +45,11 @@ def get_regulatory_alerts(user_id, start_date=None, end_date=None): def get_regulatory_computations(user_id, start_date=None, end_date=None): - return RegulationComputation.query.filter( - RegulationComputation.user_id == user_id, - RegulationComputation.day.between(start_date, end_date), - ).all() + return ( + RegulationComputation.query.filter( + RegulationComputation.user_id == user_id, + RegulationComputation.day.between(start_date, end_date), + ) + .order_by(RegulationComputation.creation_time) + .all() + ) From 3dd9bca83d979110e5600cd2ba0d1d6ad7ef1802 Mon Sep 17 00:00:00 2001 From: Tristan Gueguen Date: Wed, 6 Nov 2024 17:25:00 +0100 Subject: [PATCH 2/5] fix(regulations): unit test --- .../regulations/test_report_infractions.py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 app/tests/regulations/test_report_infractions.py diff --git a/app/tests/regulations/test_report_infractions.py b/app/tests/regulations/test_report_infractions.py new file mode 100644 index 00000000..091f5f6d --- /dev/null +++ b/app/tests/regulations/test_report_infractions.py @@ -0,0 +1,56 @@ +import datetime + +from app import db +from app.domain.regulations import get_default_business +from app.helpers.submitter_type import SubmitterType +from app.models import RegulationComputation, RegulatoryAlert, RegulationCheck +from app.models.controller_control import ControllerControl, ControlType +from app.seed import ControllerUserFactory +from app.seed.helpers import get_date +from app.tests.regulations import RegulationsTest + + +class TestReportInfractions(RegulationsTest): + def test_report_infractions_take_correct_alerts(self): + controller_user = ControllerUserFactory.create() + work_day = get_date(how_many_days_ago=2) + random_regulation_check = RegulationCheck.query.first() + + # order is important - this order gave a bug when the test was written + for submitter_type in [SubmitterType.EMPLOYEE, SubmitterType.ADMIN]: + db.session.add( + RegulationComputation( + day=work_day, + submitter_type=submitter_type, + user=self.employee, + ) + ) + + db.session.add( + RegulatoryAlert( + day=work_day, + submitter_type=SubmitterType.ADMIN, + user=self.employee, + extra={"sanction_code": "Code"}, + regulation_check=random_regulation_check, + business=get_default_business(), + ) + ) + + new_control = ControllerControl( + qr_code_generation_time=datetime.datetime.now(), + user_id=self.employee.id, + user_first_name=self.employee.first_name, + user_last_name=self.employee.last_name, + control_type=ControlType.mobilic, + controller_id=controller_user.id, + company_name=self.company.name, + vehicle_registration_number="AAA 11 BBB", + nb_controlled_days=28, + ) + db.session.add(new_control) + db.session.commit() + + new_control.report_infractions() + + self.assertEqual(len(new_control.observed_infractions), 1) From 5db00ff98c270b98382197bafa675339e06c7540 Mon Sep 17 00:00:00 2001 From: Tristan Gueguen Date: Wed, 6 Nov 2024 17:29:26 +0100 Subject: [PATCH 3/5] fix(regulations): move no extra case up to gain time --- app/models/controller_control.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/models/controller_control.py b/app/models/controller_control.py index ece6a590..05f158e4 100644 --- a/app/models/controller_control.py +++ b/app/models/controller_control.py @@ -139,6 +139,11 @@ def report_infractions(self): ) observed_infractions = [] for regulatory_alert in regulatory_alerts: + + extra = regulatory_alert.extra + if not extra or not "sanction_code" in extra: + continue + regulation_computations_for_the_day = [ rc for rc in regulation_computations From 02168d04ddbca5e8befe3ceaded96a95667f4704 Mon Sep 17 00:00:00 2001 From: Tristan Gueguen Date: Wed, 6 Nov 2024 17:29:39 +0100 Subject: [PATCH 4/5] fix(regulations): fix bug --- app/models/controller_control.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/app/models/controller_control.py b/app/models/controller_control.py index 05f158e4..0e328c25 100644 --- a/app/models/controller_control.py +++ b/app/models/controller_control.py @@ -149,22 +149,20 @@ def report_infractions(self): for rc in regulation_computations if rc.day == regulatory_alert.day ] - if len(regulation_computations_for_the_day) == 0: + nb_rc_for_the_day = len(regulation_computations_for_the_day) + if nb_rc_for_the_day == 0: continue if ( - len(regulation_computations_for_the_day) == 2 + nb_rc_for_the_day == 2 and regulatory_alert.submitter_type != SubmitterType.ADMIN ): continue if ( - regulation_computations_for_the_day[0].submitter_type + nb_rc_for_the_day == 1 + and regulation_computations_for_the_day[0].submitter_type != regulatory_alert.submitter_type ): continue - - extra = regulatory_alert.extra - if not extra or not "sanction_code" in extra: - continue sanction_code = extra.get("sanction_code") is_reportable = "NATINF" in sanction_code check_type = regulatory_alert.regulation_check.type From eb5c2bd197f9bf6c3b2b76994471a22860d85f7b Mon Sep 17 00:00:00 2001 From: Tristan Gueguen Date: Wed, 6 Nov 2024 17:41:00 +0100 Subject: [PATCH 5/5] fix(regulations): there is no business in regulatory alerts yet --- app/tests/regulations/test_report_infractions.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/tests/regulations/test_report_infractions.py b/app/tests/regulations/test_report_infractions.py index 091f5f6d..c94f9830 100644 --- a/app/tests/regulations/test_report_infractions.py +++ b/app/tests/regulations/test_report_infractions.py @@ -1,7 +1,6 @@ import datetime from app import db -from app.domain.regulations import get_default_business from app.helpers.submitter_type import SubmitterType from app.models import RegulationComputation, RegulatoryAlert, RegulationCheck from app.models.controller_control import ControllerControl, ControlType @@ -33,7 +32,6 @@ def test_report_infractions_take_correct_alerts(self): user=self.employee, extra={"sanction_code": "Code"}, regulation_check=random_regulation_check, - business=get_default_business(), ) )