Skip to content

Commit 8da54c4

Browse files
committed
NRL-1285 check if dict is empty
1 parent f86cb7d commit 8da54c4

File tree

5 files changed

+15
-128
lines changed

5 files changed

+15
-128
lines changed

api/producer/createDocumentReference/tests/test_create_document_reference.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ def test_create_document_reference_empty_fields_in_body():
421421
}
422422
],
423423
},
424-
"diagnostics": "Request body could not be parsed (root: Value error, The following fields are empty: text, author, custodian.reference, category[0].coding[0].system, category[0].coding[0].code)",
424+
"diagnostics": "Request body could not be parsed (root: Value error, The following fields are empty: text, author, custodian.reference, custodian.identifier, category[0].coding[0].system, category[0].coding[0].code)",
425425
"expression": ["root"],
426426
}
427427
],
@@ -853,14 +853,14 @@ def test_create_document_reference_no_relatesto_target():
853853
"details": {
854854
"coding": [
855855
{
856-
"code": "BAD_REQUEST",
857-
"display": "Bad request",
856+
"code": "MESSAGE_NOT_WELL_FORMED",
857+
"display": "Message not well formed",
858858
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
859859
}
860-
]
860+
],
861861
},
862-
"diagnostics": "No identifier value provided for relatesTo target",
863-
"expression": ["relatesTo[0].target.identifier.value"],
862+
"diagnostics": "Request body could not be parsed (root: Value error, The following fields are empty: relatesTo[0].target)",
863+
"expression": ["root"],
864864
}
865865
],
866866
}

api/producer/upsertDocumentReference/tests/test_upsert_document_reference.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -776,14 +776,14 @@ def test_upsert_document_reference_no_relatesto_target():
776776
"details": {
777777
"coding": [
778778
{
779-
"code": "BAD_REQUEST",
780-
"display": "Bad request",
779+
"code": "MESSAGE_NOT_WELL_FORMED",
780+
"display": "Message not well formed",
781781
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
782782
}
783-
]
783+
],
784784
},
785-
"diagnostics": "No identifier value provided for relatesTo target",
786-
"expression": ["relatesTo[0].target.identifier.value"],
785+
"diagnostics": "Request body could not be parsed (root: Value error, The following fields are empty: relatesTo[0].target)",
786+
"expression": ["root"],
787787
}
788788
],
789789
}

layer/nrlf/core/parent_model.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ def validate_empty_fields(cls, values):
9090
"""
9191
allowed_classes = [
9292
"DocumentReference",
93-
"Meta",
9493
"Narrative",
9594
"Identifier",
9695
"NRLCodeableConcept",
@@ -108,7 +107,7 @@ def validate_empty_fields(cls, values):
108107
"DocumentReferenceContext",
109108
"Period",
110109
]
111-
if cls.__name__ not in allowed_classes:
110+
if cls.__name__ not in allowed_classes or not values:
112111
return values
113112

114113
stack = [(None, values)]
@@ -128,6 +127,8 @@ def validate_empty_fields(cls, values):
128127
empty_fields.append(full_path)
129128
else:
130129
stack.append((full_path, value))
130+
if not current_value:
131+
empty_fields.append(path)
131132

132133
elif isinstance(current_value, list):
133134
for index, item in enumerate(current_value):
@@ -141,7 +142,7 @@ def validate_empty_fields(cls, values):
141142
else:
142143
stack.append((full_path, item))
143144

144-
elif isinstance(current_value, BaseModel):
145+
elif isinstance(current_value, Parent):
145146
nested_values = current_value.model_dump(exclude_none=True)
146147
for nested_field, nested_value in nested_values.items():
147148
full_path = f"{path}.{nested_field}" if path else nested_field

layer/nrlf/core/tests/test_pydantic_errors.py

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -242,37 +242,6 @@ def test_validate_content_invalid_content_stability_url():
242242
}
243243

244244

245-
def test_validate_content_missing_content_stability_coding():
246-
validator = DocumentReferenceValidator()
247-
document_ref_data = load_document_reference_json("Y05868-736253002-Valid")
248-
249-
# Remove the coding key from contentStability extension
250-
del document_ref_data["content"][0]["extension"][0]["valueCodeableConcept"][
251-
"coding"
252-
]
253-
254-
with pytest.raises(ParseError) as error:
255-
validator.validate(document_ref_data)
256-
257-
exc = error.value
258-
assert len(exc.issues) == 1
259-
assert exc.issues[0].model_dump(exclude_none=True) == {
260-
"severity": "error",
261-
"code": "invalid",
262-
"details": {
263-
"coding": [
264-
{
265-
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
266-
"code": "INVALID_RESOURCE",
267-
"display": "Invalid validation of resource",
268-
}
269-
]
270-
},
271-
"diagnostics": "Failed to parse DocumentReference resource (content[0].extension[0].valueCodeableConcept.coding: Field required. See ValueSet: https://fhir.nhs.uk/England/CodeSystem/England-NRLContentStability)",
272-
"expression": ["content[0].extension[0].valueCodeableConcept.coding"],
273-
}
274-
275-
276245
def test_validate_multiple_codings():
277246
validator = DocumentReferenceValidator()
278247
document_ref_data = load_document_reference_json("Y05868-736253002-Valid")

layer/nrlf/core/tests/test_validators.py

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -331,62 +331,6 @@ def test_validate_document_reference_extra_fields_content():
331331
}
332332

333333

334-
def test_validate_identifiers_no_custodian_identifier():
335-
validator = DocumentReferenceValidator()
336-
document_ref_data = load_document_reference_json("Y05868-736253002-Valid")
337-
338-
del document_ref_data["custodian"]["identifier"]
339-
340-
result = validator.validate(document_ref_data)
341-
342-
assert result.is_valid is False
343-
assert result.resource.id == "Y05868-99999-99999-999999"
344-
assert len(result.issues) == 1
345-
assert result.issues[0].model_dump(exclude_none=True) == {
346-
"severity": "error",
347-
"code": "required",
348-
"details": {
349-
"coding": [
350-
{
351-
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
352-
"code": "INVALID_RESOURCE",
353-
"display": "Invalid validation of resource",
354-
}
355-
]
356-
},
357-
"diagnostics": "Custodian must have an identifier",
358-
"expression": ["custodian.identifier"],
359-
}
360-
361-
362-
def test_validate_identifiers_no_subject_identifier():
363-
validator = DocumentReferenceValidator()
364-
document_ref_data = load_document_reference_json("Y05868-736253002-Valid")
365-
366-
del document_ref_data["subject"]["identifier"]
367-
368-
result = validator.validate(document_ref_data)
369-
370-
assert result.is_valid is False
371-
assert result.resource.id == "Y05868-99999-99999-999999"
372-
assert len(result.issues) == 1
373-
assert result.issues[0].model_dump(exclude_none=True) == {
374-
"severity": "error",
375-
"code": "required",
376-
"details": {
377-
"coding": [
378-
{
379-
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
380-
"code": "INVALID_RESOURCE",
381-
"display": "Invalid validation of resource",
382-
}
383-
]
384-
},
385-
"diagnostics": "Subject must have an identifier",
386-
"expression": ["subject.identifier"],
387-
}
388-
389-
390334
def test_validate_category_too_many_category():
391335
validator = DocumentReferenceValidator()
392336
document_ref_data = load_document_reference_json("Y05868-736253002-Valid")
@@ -931,33 +875,6 @@ def test_validate_relates_to_invalid_code():
931875
}
932876

933877

934-
def test_validate_relates_to_no_target_identifier():
935-
validator = DocumentReferenceValidator()
936-
document_ref_data = load_document_reference_json("Y05868-736253002-Valid")
937-
938-
document_ref_data["relatesTo"] = [{"code": "replaces", "target": {}}]
939-
940-
result = validator.validate(document_ref_data)
941-
942-
assert result.is_valid is False
943-
assert len(result.issues) == 1
944-
assert result.issues[0].model_dump(exclude_none=True) == {
945-
"severity": "error",
946-
"code": "required",
947-
"details": {
948-
"coding": [
949-
{
950-
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
951-
"code": "INVALID_IDENTIFIER_VALUE",
952-
"display": "Invalid identifier value",
953-
}
954-
]
955-
},
956-
"diagnostics": "relatesTo code 'replaces' must have a target identifier",
957-
"expression": ["relatesTo[0].target.identifier.value"],
958-
}
959-
960-
961878
def test_validate_ssp_content_with_asid():
962879
validator = DocumentReferenceValidator()
963880
document_ref_data = load_document_reference_json(

0 commit comments

Comments
 (0)