Skip to content

Commit fc979b0

Browse files
authored
Merge pull request #143 from unicef/fix-beneficiary-validation
fix beneficiary validator
2 parents 1433c85 + 3f4ebdf commit fc979b0

File tree

4 files changed

+13
-23
lines changed

4 files changed

+13
-23
lines changed

src/country_workspace/contrib/aurora/pipeline.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ class Config(BatchNameConfig, FailIfAlienConfig):
2121
RELATIONSHIP_HEAD: Final[str] = "HEAD"
2222
RELATIONSHIP_FIELDNAME: Final[str] = "relationship"
2323

24+
ROLE_PRIMARY = "PRIMARY"
25+
ROLE_ALTERNATE = "ALTERNATE"
26+
2427

2528
def import_from_aurora(job: AsyncJob) -> dict[str, int]:
2629
"""Import data from the Aurora system into the database within an atomic transaction.

src/country_workspace/models/household.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from django.utils import timezone
77

88
from .base import BaseModel, Validable
9+
from ..contrib.aurora.pipeline import ROLE_PRIMARY, ROLE_ALTERNATE
910

1011
if TYPE_CHECKING:
1112
from django.db.models import QuerySet
@@ -58,7 +59,7 @@ def heads(self) -> "QuerySet[Individual]":
5859
return self.members.filter(flex_fields__relationship="HEAD")
5960

6061
def collectors_primary(self) -> "QuerySet[Individual]":
61-
return self.members.filter(flex_fields__primary_collector_id=self.flex_fields["household_id"])
62+
return self.members.filter(flex_fields__role=ROLE_PRIMARY)
6263

6364
def collectors_alternate(self) -> "QuerySet[Individual]":
64-
return self.members.filter(flex_fields__alternate_collector_id=self.flex_fields["household_id"])
65+
return self.members.filter(flex_fields__role=ROLE_ALTERNATE)

tests/contrib/hope/test_h_validators.py

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import pytest
55
from faker import Faker
66

7+
from country_workspace.contrib.aurora.pipeline import ROLE_ALTERNATE, ROLE_PRIMARY
78
from country_workspace.contrib.hope.validators import FullHouseholdValidator
89

910
if TYPE_CHECKING:
@@ -52,34 +53,18 @@ def test_head(household: "Household"):
5253
household.members.add(IndividualFactory(household=household, flex_fields={"relationship": "HEAD"}))
5354
assert v.validate(household) == ["This Household does not have Primary Collector"]
5455

55-
household.members.add(
56-
IndividualFactory(
57-
household=household, flex_fields={"primary_collector_id": household.flex_fields["household_id"]}
58-
)
59-
)
56+
household.members.add(IndividualFactory(household=household, flex_fields={"role": ROLE_PRIMARY}))
6057
assert v.validate(household) == []
6158

6259
household.members.add(IndividualFactory(household=household, flex_fields={"relationship": "HEAD"}))
6360
assert v.validate(household) == ["This Household has multiple heads"]
64-
household.members.add(
65-
IndividualFactory(
66-
household=household, flex_fields={"primary_collector_id": household.flex_fields["household_id"]}
67-
)
68-
)
61+
household.members.add(IndividualFactory(household=household, flex_fields={"role": ROLE_PRIMARY}))
6962
assert v.validate(household) == [
7063
"This Household has multiple heads",
7164
"This Household has multiple Primary Collectors",
7265
]
73-
household.members.add(
74-
IndividualFactory(
75-
household=household, flex_fields={"alternate_collector_id": household.flex_fields["household_id"]}
76-
)
77-
)
78-
household.members.add(
79-
IndividualFactory(
80-
household=household, flex_fields={"alternate_collector_id": household.flex_fields["household_id"]}
81-
)
82-
)
66+
household.members.add(IndividualFactory(household=household, flex_fields={"role": ROLE_ALTERNATE}))
67+
household.members.add(IndividualFactory(household=household, flex_fields={"role": ROLE_ALTERNATE}))
8368
assert v.validate(household) == [
8469
"This Household has multiple heads",
8570
"This Household has multiple Primary Collectors",

tests/functional/integration/test_hope_push_lax.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import pytest
77
from django_celery_results.models import TaskResult
88

9+
from country_workspace.contrib.aurora.pipeline import ROLE_PRIMARY
910
from country_workspace.models import AsyncJob
1011
from testutils.factories import CountryHouseholdFactory
1112
from testutils.factories.program import BeneficiaryGroupFactory, CountryProgramFactory
@@ -60,7 +61,7 @@ def household(program):
6061
"primary_collector_id": household.flex_fields["household_id"],
6162
}
6263
if first_member:
63-
member.flex_fields["role"] = "PRIMARY"
64+
member.flex_fields["role"] = ROLE_PRIMARY
6465
member.save()
6566
first_member = False
6667

0 commit comments

Comments
 (0)