Skip to content

Commit 26c9e75

Browse files
refer status of magic cohorts based on other cohorts info
1 parent 0a34d53 commit 26c9e75

4 files changed

Lines changed: 399 additions & 224 deletions

File tree

src/eligibility_signposting_api/views/eligibility.py

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import logging
22
import uuid
3-
from collections import defaultdict
43
from datetime import UTC, datetime
54
from http import HTTPStatus
65

@@ -70,22 +69,14 @@ def build_eligibility_response(eligibility_status: EligibilityStatus) -> eligibi
7069

7170

7271
def build_eligibility_cohorts(condition: Condition) -> list[eligibility.EligibilityCohort]:
73-
"""Group Iteration cohorts and make only one entry per cohort group"""
74-
75-
grouped_cohort_results = defaultdict(list)
76-
77-
for cohort_result in condition.cohort_results:
78-
if condition.status == cohort_result.status:
79-
grouped_cohort_results[cohort_result.cohort_code].append(cohort_result)
80-
8172
return [
8273
eligibility.EligibilityCohort(
83-
cohortCode=cohort_group_code,
84-
cohortText=cohort_group[0].description,
85-
cohortStatus=STATUS_MAPPING[cohort_group[0].status],
74+
cohortCode=eligibility.CohortCode(cohort_result.cohort_code),
75+
cohortText=eligibility.CohortText(cohort_result.description),
76+
cohortStatus=STATUS_MAPPING[cohort_result.status],
8677
)
87-
for cohort_group_code, cohort_group in grouped_cohort_results.items()
88-
if cohort_group
78+
for cohort_result in condition.cohort_results
79+
if cohort_result and cohort_result.cohort_code and cohort_result.cohort_code.strip()
8980
]
9081

9182

tests/integration/conftest.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ def bucket(s3_client: BaseClient) -> Generator[BucketName]:
282282
s3_client.delete_bucket(Bucket=bucket_name)
283283

284284

285-
@pytest.fixture(scope="session")
285+
@pytest.fixture(scope="class")
286286
def campaign_config(s3_client: BaseClient, bucket: BucketName) -> Generator[rules.CampaignConfig]:
287287
campaign: rules.CampaignConfig = rule.CampaignConfigFactory.build(
288288
target="RSV",
@@ -309,3 +309,25 @@ def campaign_config(s3_client: BaseClient, bucket: BucketName) -> Generator[rule
309309
)
310310
yield campaign
311311
s3_client.delete_object(Bucket=bucket, Key=f"{campaign.name}.json")
312+
313+
314+
@pytest.fixture(scope="class")
315+
def campaign_config_with_magic_cohort(s3_client: BaseClient, bucket: BucketName) -> Generator[rules.CampaignConfig]:
316+
campaign: rules.CampaignConfig = rule.CampaignConfigFactory.build(
317+
target="COVID",
318+
iterations=[
319+
rule.IterationFactory.build(
320+
iteration_rules=[
321+
rule.PostcodeSuppressionRuleFactory.build(type=rules.RuleType.filter),
322+
rule.PersonAgeSuppressionRuleFactory.build(),
323+
],
324+
iteration_cohorts=[rule.IterationCohortFactory.build(cohort_label="elid_all_people")],
325+
)
326+
],
327+
)
328+
campaign_data = {"CampaignConfig": campaign.model_dump(by_alias=True)}
329+
s3_client.put_object(
330+
Bucket=bucket, Key=f"{campaign.name}.json", Body=json.dumps(campaign_data), ContentType="application/json"
331+
)
332+
yield campaign
333+
s3_client.delete_object(Bucket=bucket, Key=f"{campaign.name}.json")

0 commit comments

Comments
 (0)