Skip to content

Commit d493c17

Browse files
committed
NRL-478 update error message from pydantic to get all of location
1 parent 5f7ec4c commit d493c17

File tree

4 files changed

+126
-2
lines changed

4 files changed

+126
-2
lines changed

api/producer/createDocumentReference/tests/test_create_document_reference.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,47 @@ def test_create_document_reference_with_no_custodian():
369369
}
370370

371371

372+
def test_create_document_reference_with_no_practiceSetting():
373+
doc_ref = load_document_reference("Y05868-736253002-Valid")
374+
doc_ref.context.practiceSetting = None
375+
376+
event = create_test_api_gateway_event(
377+
headers=create_headers(),
378+
body=doc_ref.model_dump_json(exclude_none=True),
379+
)
380+
381+
result = handler(event, create_mock_context())
382+
body = result.pop("body")
383+
384+
assert result == {
385+
"statusCode": "400",
386+
"headers": default_response_headers(),
387+
"isBase64Encoded": False,
388+
}
389+
390+
parsed_body = json.loads(body)
391+
assert parsed_body == {
392+
"resourceType": "OperationOutcome",
393+
"issue": [
394+
{
395+
"severity": "error",
396+
"code": "invalid",
397+
"details": {
398+
"coding": [
399+
{
400+
"code": "MESSAGE_NOT_WELL_FORMED",
401+
"display": "Message not well formed",
402+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
403+
}
404+
],
405+
},
406+
"diagnostics": "Request body could not be parsed (context.practiceSetting: Field required)",
407+
"expression": ["context.practiceSetting"],
408+
},
409+
],
410+
}
411+
412+
372413
def test_create_document_reference_invalid_custodian_id():
373414
doc_ref = load_document_reference("Y05868-736253002-Valid")
374415

api/producer/updateDocumentReference/tests/test_update_document_reference.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,47 @@ def test_create_document_reference_invalid_body():
295295
}
296296

297297

298+
def test_update_document_reference_with_no_practiceSetting():
299+
doc_ref = load_document_reference("Y05868-736253002-Valid")
300+
doc_ref.context.practiceSetting = None
301+
302+
event = create_test_api_gateway_event(
303+
headers=create_headers(),
304+
body=doc_ref.model_dump_json(exclude_none=True),
305+
)
306+
307+
result = handler(event, create_mock_context())
308+
body = result.pop("body")
309+
310+
assert result == {
311+
"statusCode": "400",
312+
"headers": default_response_headers(),
313+
"isBase64Encoded": False,
314+
}
315+
316+
parsed_body = json.loads(body)
317+
assert parsed_body == {
318+
"resourceType": "OperationOutcome",
319+
"issue": [
320+
{
321+
"severity": "error",
322+
"code": "invalid",
323+
"details": {
324+
"coding": [
325+
{
326+
"code": "MESSAGE_NOT_WELL_FORMED",
327+
"display": "Message not well formed",
328+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
329+
}
330+
],
331+
},
332+
"diagnostics": "Request body could not be parsed (context.practiceSetting: Field required)",
333+
"expression": ["context.practiceSetting"],
334+
},
335+
],
336+
}
337+
338+
298339
def test_update_document_reference_no_id_in_path():
299340
doc_ref = load_document_reference("Y05868-736253002-Valid")
300341
event = create_test_api_gateway_event(

api/producer/upsertDocumentReference/tests/test_upsert_document_reference.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,47 @@ def test_upsert_document_reference_invalid_resource():
413413
}
414414

415415

416+
def test_upsert_document_reference_with_no_practiceSetting():
417+
doc_ref = load_document_reference("Y05868-736253002-Valid")
418+
doc_ref.context.practiceSetting = None
419+
420+
event = create_test_api_gateway_event(
421+
headers=create_headers(),
422+
body=doc_ref.model_dump_json(exclude_none=True),
423+
)
424+
425+
result = handler(event, create_mock_context())
426+
body = result.pop("body")
427+
428+
assert result == {
429+
"statusCode": "400",
430+
"headers": default_response_headers(),
431+
"isBase64Encoded": False,
432+
}
433+
434+
parsed_body = json.loads(body)
435+
assert parsed_body == {
436+
"resourceType": "OperationOutcome",
437+
"issue": [
438+
{
439+
"severity": "error",
440+
"code": "invalid",
441+
"details": {
442+
"coding": [
443+
{
444+
"code": "MESSAGE_NOT_WELL_FORMED",
445+
"display": "Message not well formed",
446+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
447+
}
448+
],
449+
},
450+
"diagnostics": "Request body could not be parsed (context.practiceSetting: Field required)",
451+
"expression": ["context.practiceSetting"],
452+
},
453+
],
454+
}
455+
456+
416457
def test_upsert_document_reference_invalid_producer_id():
417458
doc_ref = load_document_reference("Y05868-736253002-Valid")
418459
doc_ref.id = "X26-99999-99999-999999"

layer/nrlf/core/errors.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@
1111

1212
def diag_for_error(error: ErrorDetails) -> str:
1313
if error["loc"]:
14-
return f"{error['loc'][0]}: {error['msg']}"
14+
loc_string = ".".join(each for each in error["loc"])
15+
return f"{loc_string}: {error['msg']}"
1516
else:
1617
return f"root: {error['msg']}"
1718

1819

1920
def expression_for_error(error: ErrorDetails) -> Optional[str]:
20-
return str(error["loc"][0] if error["loc"] else "root")
21+
return str(".".join(each for each in error["loc"]) if error["loc"] else "root")
2122

2223

2324
class OperationOutcomeError(Exception):

0 commit comments

Comments
 (0)