Skip to content

Commit 47decfe

Browse files
committed
Sets url and description to empty when unavailable
1 parent 5677a0b commit 47decfe

File tree

5 files changed

+40
-18
lines changed

5 files changed

+40
-18
lines changed

src/eligibility_signposting_api/views/eligibility.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,9 @@ def build_actions(condition: Condition) -> list[eligibility.Action] | None:
137137
eligibility.Action(
138138
actionType=eligibility.ActionType(action.action_type),
139139
actionCode=eligibility.ActionCode(action.action_code),
140-
description=eligibility.Description(action.action_description),
141-
urlLink=eligibility.UrlLink(action.url_link),
142-
urlLabel=eligibility.UrlLabel(action.url_label),
140+
description=eligibility.Description(action.action_description or ""),
141+
urlLabel=eligibility.UrlLabel(action.url_label or ""),
142+
urlLink=eligibility.UrlLink(str(action.url_link)) if action.url_link else eligibility.UrlLink(""),
143143
)
144144
for action in condition.actions
145145
]

src/eligibility_signposting_api/views/response_model/eligibility.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from enum import StrEnum
33
from typing import NewType
44

5-
from pydantic import UUID4, BaseModel, Field, HttpUrl, field_serializer
5+
from pydantic import UUID4, BaseModel, Field, field_serializer
66
from pydantic_core.core_schema import SerializationInfo
77

88
LastUpdated = NewType("LastUpdated", datetime)
@@ -50,9 +50,9 @@ class SuitabilityRule(BaseModel):
5050
class Action(BaseModel):
5151
action_type: ActionType = Field(..., alias="actionType")
5252
action_code: ActionCode = Field(..., alias="actionCode")
53-
description: Description = Field(default="")
54-
url_link: UrlLink = Field(default="", alias="urlLink" )
55-
url_label: UrlLabel = Field(default="", alias="urlLabel")
53+
description: Description = Field(default=Description(""))
54+
url_link: UrlLink = Field(default=UrlLink(""), alias="urlLink")
55+
url_label: UrlLabel = Field(default=UrlLabel(""), alias="urlLabel")
5656

5757
model_config = {"populate_by_name": True}
5858

tests/fixtures/builders/model/eligibility.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
from polyfactory import Use
55
from polyfactory.factories import DataclassFactory
6-
from pydantic import HttpUrl
76

87
from eligibility_signposting_api.model import eligibility
98
from eligibility_signposting_api.model.eligibility import UrlLink

tests/integration/in_process/test_eligibility_endpoint.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,15 @@ def test_actionable(
218218
"cohortText": "positive_description",
219219
}
220220
],
221-
"actions": [{"actionType": "defaultcomms", "actionCode": "action_code"}],
221+
"actions": [
222+
{
223+
"actionCode": "action_code",
224+
"actionType": "defaultcomms",
225+
"description": "",
226+
"urlLabel": "",
227+
"urlLink": "",
228+
}
229+
],
222230
"suitabilityRules": [],
223231
"statusText": "Status.actionable",
224232
}
@@ -355,7 +363,15 @@ def test_actionable_when_only_magic_cohort_is_present(
355363
"cohortText": "magic positive description",
356364
}
357365
],
358-
"actions": [{"actionType": "defaultcomms", "actionCode": "action_code"}],
366+
"actions": [
367+
{
368+
"actionCode": "action_code",
369+
"actionType": "defaultcomms",
370+
"description": "",
371+
"urlLabel": "",
372+
"urlLink": "",
373+
}
374+
],
359375
"suitabilityRules": [],
360376
"statusText": "Status.actionable",
361377
}
@@ -511,7 +527,15 @@ def test_actionable(
511527
"condition": "FLU",
512528
"status": "Actionable",
513529
"eligibilityCohorts": [],
514-
"actions": [{"actionCode": "action_code", "actionType": "defaultcomms"}],
530+
"actions": [
531+
{
532+
"actionCode": "action_code",
533+
"actionType": "defaultcomms",
534+
"description": "",
535+
"urlLabel": "",
536+
"urlLink": "",
537+
}
538+
],
515539
"suitabilityRules": [],
516540
"statusText": "Status.actionable",
517541
}

tests/unit/views/test_eligibility.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
from flask import Flask, Request
1212
from flask.testing import FlaskClient
1313
from hamcrest import assert_that, contains_exactly, has_entries, has_length, is_, none
14-
from pydantic import HttpUrl
1514
from wireup.integration.flask import get_app_container
1615

1716
from eligibility_signposting_api.audit.audit_service import AuditService
@@ -601,9 +600,9 @@ def test_excludes_nulls_via_build_response(client: FlaskClient):
601600
eligibility.Action(
602601
actionType=eligibility.ActionType("TYPE_A"),
603602
actionCode=eligibility.ActionCode("CODE123"),
604-
description=None, # Should be excluded
605-
urlLink=None, # Should be excluded
606-
urlLabel=None, # Should be excluded
603+
description=eligibility.Description(""), # Should be an empty string
604+
urlLink=eligibility.UrlLink(""), # Should be an empty string
605+
urlLabel=eligibility.UrlLabel(""), # Should be an empty string
607606
)
608607
],
609608
)
@@ -633,9 +632,9 @@ def test_excludes_nulls_via_build_response(client: FlaskClient):
633632

634633
assert action["actionType"] == "TYPE_A"
635634
assert action["actionCode"] == "CODE123"
636-
assert "description" not in action
637-
assert "urlLink" not in action
638-
assert "urlLabel" not in action
635+
assert action["description"] == ""
636+
assert action["urlLink"] == ""
637+
assert action["urlLabel"] == ""
639638

640639

641640
def test_build_response_include_values_that_are_not_null(client: FlaskClient):

0 commit comments

Comments
 (0)