Skip to content

Commit ae9f164

Browse files
committed
test(spp_programs): add comprehensive tests for deduplication, enrollment, and membership
1 parent 889ae61 commit ae9f164

8 files changed

Lines changed: 1113 additions & 54 deletions

File tree

spp_programs/models/managers/deduplication_manager.py

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,7 @@ def _check_duplicate_by_individual_ids(self, beneficiaries):
138138

139139
individual_rec = self.env["res.partner"].browse(individual_id)
140140
group_names = duplicate_beneficiaries.mapped("partner_id.name")
141-
reason = (
142-
f"Shared member: {individual_rec.name} "
143-
f"found in {len(group_ids)} groups ({', '.join(group_names)})"
144-
)
141+
reason = f"Shared member: {individual_rec.name} found in {len(group_ids)} groups ({', '.join(group_names)})"
145142
self._record_duplicate(self, duplicate_beneficiariy_ids, reason)
146143

147144
duplicated_enrolled = duplicate_beneficiaries.filtered(lambda rec: rec.state == "enrolled")
@@ -277,9 +274,7 @@ def _check_duplicate_by_group_with_individual(self, beneficiaries):
277274
# Build mapping: individual_id -> list of duplicate ID doc descriptions
278275
individual_dup_docs = {}
279276
for doc in duplicated_doc_ids:
280-
individual_dup_docs.setdefault(doc.partner_id.id, []).append(
281-
f"{doc.id_type_id.display}: {doc.value}"
282-
)
277+
individual_dup_docs.setdefault(doc.partner_id.id, []).append(f"{doc.id_type_id.display}: {doc.value}")
283278

284279
group_of_duplicates = {}
285280
for group_membership in group_with_duplicates:
@@ -296,10 +291,7 @@ def _check_duplicate_by_group_with_individual(self, beneficiaries):
296291

297292
individual_rec = self.env["res.partner"].browse(individual_id)
298293
doc_info = ", ".join(individual_dup_docs.get(individual_id, []))
299-
reason = (
300-
f"Duplicate ID document ({doc_info}) "
301-
f"on member: {individual_rec.name}"
302-
)
294+
reason = f"Duplicate ID document ({doc_info}) on member: {individual_rec.name}"
303295
self._record_duplicate(self, duplicate_beneficiariy_ids, reason)
304296

305297
duplicated_enrolled = duplicate_beneficiaries.filtered(lambda rec: rec.state == "enrolled")
@@ -361,10 +353,7 @@ def _check_duplicate_by_individual(self, beneficiaries):
361353
continue
362354

363355
names = dup_memberships.mapped("partner_id.name")
364-
reason = (
365-
f"Duplicate ID document ({doc_key}) "
366-
f"shared by: {', '.join(names)}"
367-
)
356+
reason = f"Duplicate ID document ({doc_key}) shared by: {', '.join(names)}"
368357
self._record_duplicate(self, dup_memberships.ids, reason)
369358

370359
# Keep-one-enrolled logic
@@ -373,9 +362,9 @@ def _check_duplicate_by_individual(self, beneficiaries):
373362
to_mark = dup_memberships.filtered(lambda rec: rec.state != "enrolled")
374363
else:
375364
to_mark = dup_memberships
376-
to_mark.filtered(
377-
lambda rec: rec.state not in ["exited", "not_eligible", "duplicated"]
378-
).write({"state": "duplicated"})
365+
to_mark.filtered(lambda rec: rec.state not in ["exited", "not_eligible", "duplicated"]).write(
366+
{"state": "duplicated"}
367+
)
379368

380369
all_duplicated_memberships |= dup_memberships
381370

@@ -501,9 +490,7 @@ def _check_duplicate_by_group_with_individual(self, beneficiaries):
501490
# Build mapping: individual_id -> list of duplicate phone numbers
502491
individual_dup_phones = {}
503492
for phone_rec in duplicate_individuals_ids:
504-
individual_dup_phones.setdefault(phone_rec.partner_id.id, []).append(
505-
phone_rec.phone_no
506-
)
493+
individual_dup_phones.setdefault(phone_rec.partner_id.id, []).append(phone_rec.phone_no)
507494

508495
group_of_duplicates = {}
509496
for group_membership in group_with_duplicates:
@@ -520,10 +507,7 @@ def _check_duplicate_by_group_with_individual(self, beneficiaries):
520507

521508
individual_rec = self.env["res.partner"].browse(individual_id)
522509
phone_info = ", ".join(individual_dup_phones.get(individual_id, []))
523-
reason = (
524-
f"Duplicate phone number ({phone_info}) "
525-
f"on member: {individual_rec.name}"
526-
)
510+
reason = f"Duplicate phone number ({phone_info}) on member: {individual_rec.name}"
527511
self._record_duplicate(self, duplicate_beneficiariy_ids, reason)
528512

529513
duplicated_enrolled = duplicate_beneficiaries.filtered(lambda rec: rec.state == "enrolled")
@@ -600,10 +584,7 @@ def _check_duplicate_by_individual(self, beneficiaries):
600584
continue
601585

602586
names = dup_memberships.mapped("partner_id.name")
603-
reason = (
604-
f"Duplicate phone number ({phone_val}) "
605-
f"shared by: {', '.join(names)}"
606-
)
587+
reason = f"Duplicate phone number ({phone_val}) shared by: {', '.join(names)}"
607588
self._record_duplicate(self, dup_memberships.ids, reason)
608589

609590
# Keep-one-enrolled logic
@@ -612,9 +593,9 @@ def _check_duplicate_by_individual(self, beneficiaries):
612593
to_mark = dup_memberships.filtered(lambda rec: rec.state != "enrolled")
613594
else:
614595
to_mark = dup_memberships
615-
to_mark.filtered(
616-
lambda rec: rec.state not in ["exited", "not_eligible", "duplicated"]
617-
).write({"state": "duplicated"})
596+
to_mark.filtered(lambda rec: rec.state not in ["exited", "not_eligible", "duplicated"]).write(
597+
{"state": "duplicated"}
598+
)
618599

619600
all_duplicated_memberships |= dup_memberships
620601

spp_programs/models/managers/program_manager.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -217,9 +217,7 @@ def _enroll_eligible_registrants(self, states, offset=0, limit=None, do_count=Fa
217217
# Exclude members that are duplicated or exited — those states
218218
# should only be changed through their own workflows.
219219
_logger.debug("members filtered: %s", members)
220-
not_enrolled = members.filtered(
221-
lambda m: m.state not in ("enrolled", "duplicated", "exited")
222-
)
220+
not_enrolled = members.filtered(lambda m: m.state not in ("enrolled", "duplicated", "exited"))
223221
_logger.debug("not_enrolled: %s", not_enrolled)
224222
not_enrolled.write(
225223
{
@@ -230,8 +228,7 @@ def _enroll_eligible_registrants(self, states, offset=0, limit=None, do_count=Fa
230228
# dis-enroll the one not eligible anymore:
231229
enrolled_members_ids = members.ids
232230
members_to_remove = member_before.filtered(
233-
lambda m: m.state not in ("not_eligible", "duplicated", "exited")
234-
and m.id not in enrolled_members_ids
231+
lambda m: m.state not in ("not_eligible", "duplicated", "exited") and m.id not in enrolled_members_ids
235232
)
236233
# _logger.debug("members_to_remove: %s", members_to_remove)
237234
members_to_remove.write(

spp_programs/models/programs.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -399,13 +399,9 @@ def deduplicate_beneficiaries(self):
399399
if total_duplicated > 0:
400400
parts = []
401401
if new_duplicates > 0:
402-
parts.append(
403-
_("%(new)s new duplicate(s) found", new=new_duplicates)
404-
)
402+
parts.append(_("%(new)s new duplicate(s) found", new=new_duplicates))
405403
if already_duplicated > 0:
406-
parts.append(
407-
_("%(existing)s already flagged", existing=already_duplicated)
408-
)
404+
parts.append(_("%(existing)s already flagged", existing=already_duplicated))
409405
message = ", ".join(parts) + "."
410406
kind = "warning"
411407
elif duplicates > 0:

spp_programs/tests/__init__.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
1+
from . import common_compliance
2+
from . import test_compliance_cel
13
from . import test_create_program_wiz
4+
from . import test_create_program_wizard_cash
5+
from . import test_create_program_wizard_cel
6+
from . import test_create_program_wizard_inkind
7+
from . import test_cycle
8+
from . import test_cycle_auto_approve_fund_check
9+
from . import test_deduplication
10+
from . import test_eligibility_cel
11+
from . import test_eligibility_cel_integration
212
from . import test_enrollment_wizard
3-
from . import test_entitlement_report_wiz
413
from . import test_entitlement
14+
from . import test_entitlement_amount_cel
15+
from . import test_entitlement_manager_cash
16+
from . import test_entitlement_manager_inkind
17+
from . import test_entitlement_report_wiz
18+
from . import test_program_enrollment
19+
from . import test_program_membership
520
from . import test_programs
621
from . import test_registrant
7-
from . import test_stock_rule
8-
from . import test_cycle
9-
from . import common_compliance
1022
from . import test_spp_cycle_compliance
1123
from . import test_spp_program_create_wizard_compliance
12-
from . import test_entitlement_manager_cash
13-
from . import test_create_program_wizard_cash
14-
from . import test_eligibility_cel
15-
from . import test_eligibility_cel_integration
16-
from . import test_compliance_cel
17-
from . import test_create_program_wizard_cel
24+
from . import test_stock_rule

0 commit comments

Comments
 (0)