Skip to content

Commit 2045e08

Browse files
consumer mapping - schema
1 parent 82ee079 commit 2045e08

5 files changed

Lines changed: 41 additions & 41 deletions

File tree

src/eligibility_signposting_api/model/consumer_mapping.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
from typing import NewType
22

3-
from pydantic import BaseModel, RootModel
3+
from pydantic import BaseModel, RootModel, Field
44

55
from eligibility_signposting_api.model.campaign_config import CampaignID
66

77
ConsumerId = NewType("ConsumerId", str)
88

99

1010
class ConsumerCampaign(BaseModel):
11-
campaign: CampaignID
12-
description: str | None = None
11+
campaign: CampaignID = Field(alias="Campaign")
12+
description: str | None = Field(default=None, alias="Description")
1313

1414

1515
class ConsumerMapping(RootModel[dict[ConsumerId, list[ConsumerCampaign]]]):

tests/integration/conftest.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,7 +1171,7 @@ def create_and_put_consumer_mapping_in_s3(
11711171
campaign_config: CampaignConfig, consumer_id: str, consumer_mapping_bucket, s3_client
11721172
) -> ConsumerMapping:
11731173
consumer_mapping = ConsumerMapping.model_validate({})
1174-
campaign_entry = ConsumerCampaign(campaign=campaign_config.id, description="Test description for campaign mapping")
1174+
campaign_entry = ConsumerCampaign(Campaign=campaign_config.id, Description="Test description for campaign mapping")
11751175

11761176
consumer_mapping.root[ConsumerId(consumer_id)] = [campaign_entry]
11771177
consumer_mapping_data = consumer_mapping.model_dump(by_alias=True)
@@ -1305,7 +1305,7 @@ def consumer_mapped_to_campaign_having_inactive_iteration_config(
13051305
):
13061306
mapping = ConsumerMapping.model_validate({})
13071307
mapping.root[consumer_id] = [
1308-
ConsumerCampaign(campaign=cc.id, description=f"Description for {cc.id}") for cc in inactive_iteration_config
1308+
ConsumerCampaign(Campaign=cc.id, Description=f"Description for {cc.id}") for cc in inactive_iteration_config
13091309
]
13101310

13111311
s3_client.put_object(
@@ -1327,7 +1327,7 @@ def consumer_mapped_to_multiple_campaign_configs(
13271327
) -> Generator[ConsumerMapping]:
13281328
mapping = ConsumerMapping.model_validate({})
13291329
mapping.root[consumer_id] = [
1330-
ConsumerCampaign(campaign=cc.id, description=f"Description for {cc.id}") for cc in multiple_campaign_configs
1330+
ConsumerCampaign(Campaign=cc.id, Description=f"Description for {cc.id}") for cc in multiple_campaign_configs
13311331
]
13321332

13331333
s3_client.put_object(
@@ -1363,10 +1363,10 @@ def consumer_mapped_to_with_various_targets(
13631363
consumer_mapping = ConsumerMapping.model_validate({})
13641364

13651365
consumer_mapping.root[ConsumerId("23-mic7heal-jor6don")] = [
1366-
ConsumerCampaign(campaign=CampaignID("campaign_start_date")),
1367-
ConsumerCampaign(campaign=CampaignID("campaign_start_date_plus_one_day")),
1368-
ConsumerCampaign(campaign=CampaignID("campaign_today")),
1369-
ConsumerCampaign(campaign=CampaignID("campaign_tomorrow")),
1366+
ConsumerCampaign(Campaign=CampaignID("campaign_start_date")),
1367+
ConsumerCampaign(Campaign=CampaignID("campaign_start_date_plus_one_day")),
1368+
ConsumerCampaign(Campaign=CampaignID("campaign_today")),
1369+
ConsumerCampaign(Campaign=CampaignID("campaign_tomorrow")),
13701370
]
13711371

13721372
consumer_mapping_data = consumer_mapping.model_dump(by_alias=True)

tests/integration/in_process/test_eligibility_endpoint.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -864,8 +864,8 @@ def test_not_actionable_and_check_response_when_rule_mapper_is_given(
864864
],
865865
{
866866
"consumer-id": [
867-
{"campaign": "RSV_campaign_id"},
868-
{"campaign": "COVID_campaign_id"},
867+
{"Campaign": "RSV_campaign_id"},
868+
{"Campaign": "COVID_campaign_id"},
869869
]
870870
},
871871
"consumer-id",
@@ -882,8 +882,8 @@ def test_not_actionable_and_check_response_when_rule_mapper_is_given(
882882
],
883883
{
884884
"consumer-id": [
885-
{"campaign": "RSV_campaign_id"},
886-
{"campaign": "COVID_campaign_id"},
885+
{"Campaign": "RSV_campaign_id"},
886+
{"Campaign": "COVID_campaign_id"},
887887
]
888888
},
889889
"consumer-id",
@@ -900,8 +900,8 @@ def test_not_actionable_and_check_response_when_rule_mapper_is_given(
900900
],
901901
{
902902
"consumer-id": [
903-
{"campaign": "RSV_campaign_id"},
904-
{"campaign": "COVID_campaign_id"},
903+
{"Campaign": "RSV_campaign_id"},
904+
{"Campaign": "COVID_campaign_id"},
905905
]
906906
},
907907
"consumer-id",
@@ -921,8 +921,8 @@ def test_not_actionable_and_check_response_when_rule_mapper_is_given(
921921
],
922922
{
923923
"consumer-id": [
924-
{"campaign": "RSV_campaign_id"},
925-
{"campaign": "COVID_campaign_id"},
924+
{"Campaign": "RSV_campaign_id"},
925+
{"Campaign": "COVID_campaign_id"},
926926
]
927927
},
928928
"consumer-id",
@@ -937,8 +937,8 @@ def test_not_actionable_and_check_response_when_rule_mapper_is_given(
937937
],
938938
{
939939
"consumer-id": [
940-
{"campaign": "RSV_campaign_id"},
941-
{"campaign": "COVID_campaign_id"},
940+
{"Campaign": "RSV_campaign_id"},
941+
{"Campaign": "COVID_campaign_id"},
942942
]
943943
},
944944
"consumer-id",
@@ -953,8 +953,8 @@ def test_not_actionable_and_check_response_when_rule_mapper_is_given(
953953
],
954954
{
955955
"consumer-id": [
956-
{"campaign": "RSV_campaign_id"},
957-
{"campaign": "COVID_campaign_id"},
956+
{"Campaign": "RSV_campaign_id"},
957+
{"Campaign": "COVID_campaign_id"},
958958
]
959959
},
960960
"consumer-id",
@@ -974,8 +974,8 @@ def test_not_actionable_and_check_response_when_rule_mapper_is_given(
974974
],
975975
{
976976
"consumer-id": [
977-
{"campaign": "RSV_campaign_id"},
978-
{"campaign": "COVID_campaign_id"},
977+
{"Campaign": "RSV_campaign_id"},
978+
{"Campaign": "COVID_campaign_id"},
979979
]
980980
},
981981
"another-consumer-id",
@@ -992,8 +992,8 @@ def test_not_actionable_and_check_response_when_rule_mapper_is_given(
992992
],
993993
{
994994
"consumer-id": [
995-
{"campaign": "RSV_campaign_id"},
996-
{"campaign": "COVID_campaign_id"},
995+
{"Campaign": "RSV_campaign_id"},
996+
{"Campaign": "COVID_campaign_id"},
997997
]
998998
},
999999
"another-consumer-id",
@@ -1013,8 +1013,8 @@ def test_not_actionable_and_check_response_when_rule_mapper_is_given(
10131013
],
10141014
{
10151015
"consumer-id": [
1016-
{"campaign": "RSV_campaign_id"},
1017-
{"campaign": "COVID_campaign_id"},
1016+
{"Campaign": "RSV_campaign_id"},
1017+
{"Campaign": "COVID_campaign_id"},
10181018
]
10191019
},
10201020
"consumer-id",
@@ -1100,8 +1100,8 @@ def test_valid_response_when_consumer_has_a_valid_campaign_config_mapping( # no
11001100
(
11011101
[("RSV", "RSV_campaign_id_1"), ("RSV", "RSV_campaign_id_2")],
11021102
{
1103-
"consumer-id-1": [{"campaign": "RSV_campaign_id_1"}],
1104-
"consumer-id-2": [{"campaign": "RSV_campaign_id_2"}],
1103+
"consumer-id-1": [{"Campaign": "RSV_campaign_id_1"}],
1104+
"consumer-id-2": [{"Campaign": "RSV_campaign_id_2"}],
11051105
},
11061106
"RSV",
11071107
"VACCINATIONS",

tests/test_data/test_consumer_mapping/test_consumer_mapping_config.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@
22
{
33
"consumer-id-123": [
44
{
5-
"campaign": "RSV_campaign_id",
6-
"description": "RSV Ongoing for My Vaccines"
5+
"Campaign": "RSV_campaign_id",
6+
"Description": "RSV Ongoing for My Vaccines"
77
},
88
{
9-
"campaign": "COVID_campaign_id",
10-
"description": "COVID Ongoing for My Vaccines"
9+
"Campaign": "COVID_campaign_id",
10+
"Description": "COVID Ongoing for My Vaccines"
1111
}
1212
],
1313
"consumer-id-456": [
1414
{
15-
"campaign": "RSV_campaign_id_NBS",
16-
"description": "RSV Ongoing for NBS"
15+
"Campaign": "RSV_campaign_id_NBS",
16+
"Description": "RSV Ongoing for NBS"
1717
},
1818
{
19-
"campaign": "COVID_campaign_id_NBS",
20-
"description": "RSV Ongoing for NBS"
19+
"Campaign": "COVID_campaign_id_NBS",
20+
"Description": "RSV Ongoing for NBS"
2121
}
2222
]
2323
}

tests/unit/repos/test_consumer_mapping_repo.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ def test_get_permitted_campaign_ids_success(self, repo, mock_s3_client):
2626
# The mocked S3 data must match the new schema (objects with description)
2727
mapping_data = {
2828
consumer_id: [
29-
{"campaign": "flu-2024", "description": "Flu Shot Description"},
30-
{"campaign": "covid-2024", "description": "Covid Shot Description"},
29+
{"Campaign": "flu-2024", "Description": "Flu Shot Description"},
30+
{"Campaign": "covid-2024", "Description": "Covid Shot Description"},
3131
]
3232
}
3333

@@ -49,7 +49,7 @@ def test_get_permitted_campaign_ids_returns_none_when_missing(self, repo, mock_s
4949
Setup data where the consumer_id doesn't exist
5050
We must still use the valid schema (dicts inside the list) to pass Pydantic validation
5151
"""
52-
valid_schema_data = {"other-user": [{"campaign": "camp-1", "description": "Some description"}]}
52+
valid_schema_data = {"other-user": [{"Campaign": "camp-1", "Description": "Some description"}]}
5353

5454
mock_s3_client.list_objects.return_value = {"Contents": [{"Key": "mappings.json"}]}
5555
body_json = json.dumps(valid_schema_data).encode("utf-8")

0 commit comments

Comments
 (0)