Skip to content

Commit 6a7f3cd

Browse files
committed
NRL-708 fix asid exception issue
1 parent f8c9b59 commit 6a7f3cd

File tree

3 files changed

+69
-17
lines changed

3 files changed

+69
-17
lines changed

api/producer/createDocumentReference/create_document_reference.py

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
from uuid import uuid4
22

3-
from core.errors import OperationOutcomeError
4-
53
from nrlf.core.codes import SpineErrorConcept
64
from nrlf.core.constants import (
75
PERMISSION_AUDIT_DATES_FROM_PAYLOAD,
@@ -54,20 +52,9 @@ def _create_core_model(resource: DocumentReference, metadata: ConnectionMetadata
5452
document_reference=resource,
5553
nrl_permissions=metadata.nrl_permissions,
5654
)
57-
try:
58-
core_model = DocumentPointer.from_document_reference(
59-
document_reference, created_on=creation_time
60-
)
61-
except OperationOutcomeError as exc:
62-
return SpineErrorResponse.BAD_REQUEST(
63-
diagnostics=exc.diagnostics,
64-
expression="DocumentReference.type.coding",
65-
)
66-
except Exception as exc:
67-
return SpineErrorResponse.BAD_REQUEST(
68-
diagnostics=f"Parsing of Document Pointer has raised exception with message: '{str(exc)}'.",
69-
expression="DocumentReference",
70-
)
55+
return DocumentPointer.from_document_reference(
56+
document_reference, created_on=creation_time
57+
)
7158

7259

7360
def _check_permissions(

api/producer/createDocumentReference/tests/test_create_document_reference.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,71 @@ def test_create_document_reference_happy_path_with_ssp(
154154
}
155155

156156

157+
@mock_aws
158+
@mock_repository
159+
@freeze_time("2024-03-21T12:34:56.789")
160+
@freeze_uuid("00000000-0000-0000-0000-000000000001")
161+
def test_create_document_reference_without_related_value_exception(
162+
repository: DocumentPointerRepository,
163+
):
164+
doc_ref = load_document_reference("Y05868-736253002-Valid-with-ssp-content")
165+
doc_ref.context = {
166+
"practiceSetting": {
167+
"coding": [
168+
{
169+
"system": "http://snomed.info/sct",
170+
"code": "788002001",
171+
"display": "Adult mental health service",
172+
}
173+
]
174+
},
175+
"sourcePatientInfo": {
176+
"identifier": {
177+
"system": "https://fhir.nhs.uk/Id/nhs-number",
178+
"value": "6700028191",
179+
}
180+
},
181+
"related": [{"identifier": {"system": "https://fhir.nhs.uk/Id/nhsSpineASID"}}],
182+
}
183+
184+
event = create_test_api_gateway_event(
185+
headers=create_headers(),
186+
body=doc_ref.model_dump_json(exclude_none=True),
187+
)
188+
189+
result = handler(event, create_mock_context())
190+
body = result.pop("body")
191+
192+
assert result == {
193+
"statusCode": "400",
194+
"headers": default_response_headers(),
195+
"isBase64Encoded": False,
196+
}
197+
198+
parsed_body = json.loads(body)
199+
200+
assert parsed_body == {
201+
"resourceType": "OperationOutcome",
202+
"issue": [
203+
{
204+
"severity": "error",
205+
"code": "value",
206+
"details": {
207+
"coding": [
208+
{
209+
"code": "INVALID_IDENTIFIER_VALUE",
210+
"display": "Invalid identifier value",
211+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
212+
}
213+
]
214+
},
215+
"diagnostics": "Invalid ASID value ''. A single ASID consisting of 12 digits can be provided in the context.related field.",
216+
"expression": ["context.related[0].identifier.value"],
217+
}
218+
],
219+
}
220+
221+
157222
def test_create_document_reference_no_body():
158223
event = create_test_api_gateway_event(
159224
headers=create_headers(),

layer/nrlf/core/validators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ def _validate_asid(self, asid_references: list):
272272
return
273273

274274
idx, asid_reference = asid_references[0]
275-
asid_value = getattr(asid_reference.identifier, "value", "")
275+
asid_value = getattr(asid_reference.identifier, "value") or ""
276276
if not match(r"^\d{12}$", asid_value):
277277
self.result.add_error(
278278
issue_code="value",

0 commit comments

Comments
 (0)