22
33import pytest
44
5- from nrlf .core .constants import PointerTypes
5+ from nrlf .core .constants import ODS_SYSTEM , PointerTypes
66from nrlf .core .errors import ParseError
77from nrlf .core .validators import (
88 DocumentReferenceValidator ,
@@ -599,22 +599,44 @@ def test_validate_category_coding_invalid_system():
599599 }
600600
601601
602- def test_validate_content_extension_too_many_extensions ():
602+ def test_validate_author_no_author ():
603603 validator = DocumentReferenceValidator ()
604604 document_ref_data = load_document_reference_json ("Y05868-736253002-Valid" )
605605
606- document_ref_data ["content" ][0 ]["extension" ].append (
606+ del document_ref_data ["author" ]
607+
608+ result = validator .validate (document_ref_data )
609+
610+ assert result .is_valid is False
611+ assert result .resource .id == "Y05868-99999-99999-999999"
612+ assert len (result .issues ) == 1
613+ assert result .issues [0 ].model_dump (exclude_none = True ) == {
614+ "severity" : "error" ,
615+ "code" : "required" ,
616+ "details" : {
617+ "coding" : [
618+ {
619+ "system" : "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1" ,
620+ "code" : "INVALID_RESOURCE" ,
621+ "display" : "Invalid validation of resource" ,
622+ }
623+ ]
624+ },
625+ "diagnostics" : "The required field 'author' is missing" ,
626+ "expression" : ["author" ],
627+ }
628+
629+
630+ def test_validate_author_too_many_authors ():
631+ validator = DocumentReferenceValidator ()
632+ document_ref_data = load_document_reference_json ("Y05868-736253002-Valid" )
633+
634+ document_ref_data ["author" ].append (
607635 {
608- "url" : "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-ContentStability" ,
609- "valueCodeableConcept" : {
610- "coding" : [
611- {
612- "system" : "https://fhir.nhs.uk/England/CodeSystem/England-NRLContentStability" ,
613- "code" : "static" ,
614- "display" : "static" ,
615- }
616- ]
617- },
636+ "identifier" : {
637+ "system" : ODS_SYSTEM ,
638+ "value" : "someODSCode" ,
639+ }
618640 }
619641 )
620642
@@ -635,8 +657,107 @@ def test_validate_content_extension_too_many_extensions():
635657 }
636658 ]
637659 },
638- "diagnostics" : "Invalid content extension length: 2 Extension must only contain a single value" ,
639- "expression" : ["content[0].extension" ],
660+ "diagnostics" : "Invalid author length: 2 Author must only contain a single value" ,
661+ "expression" : ["author" ],
662+ }
663+
664+
665+ def test_validate_author_system_invalid ():
666+ validator = DocumentReferenceValidator ()
667+ document_ref_data = load_document_reference_json ("Y05868-736253002-Valid" )
668+
669+ document_ref_data ["author" ][0 ] = {
670+ "identifier" : {
671+ "system" : "some system" ,
672+ "value" : "someODSCode" ,
673+ }
674+ }
675+
676+ result = validator .validate (document_ref_data )
677+
678+ assert result .is_valid is False
679+ assert result .resource .id == "Y05868-99999-99999-999999"
680+ assert len (result .issues ) == 1
681+ assert result .issues [0 ].model_dump (exclude_none = True ) == {
682+ "severity" : "error" ,
683+ "code" : "invalid" ,
684+ "details" : {
685+ "coding" : [
686+ {
687+ "system" : "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1" ,
688+ "code" : "INVALID_RESOURCE" ,
689+ "display" : "Invalid validation of resource" ,
690+ }
691+ ]
692+ },
693+ "diagnostics" : f"Invalid author system: 'some system' Author system must be 'https://fhir.nhs.uk/Id/ods-organization-code'" ,
694+ "expression" : ["author[0].identifier.system" ],
695+ }
696+
697+
698+ def test_validate_author_value_invalid ():
699+ validator = DocumentReferenceValidator ()
700+ document_ref_data = load_document_reference_json ("Y05868-736253002-Valid" )
701+
702+ document_ref_data ["author" ][0 ] = {
703+ "identifier" : {
704+ "system" : ODS_SYSTEM ,
705+ "value" : "!!!!!!12sd" ,
706+ }
707+ }
708+
709+ result = validator .validate (document_ref_data )
710+
711+ assert result .is_valid is False
712+ assert result .resource .id == "Y05868-99999-99999-999999"
713+ assert len (result .issues ) == 1
714+ assert result .issues [0 ].model_dump (exclude_none = True ) == {
715+ "severity" : "error" ,
716+ "code" : "value" ,
717+ "details" : {
718+ "coding" : [
719+ {
720+ "system" : "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1" ,
721+ "code" : "INVALID_RESOURCE" ,
722+ "display" : "Invalid validation of resource" ,
723+ }
724+ ]
725+ },
726+ "diagnostics" : f"Invalid author value: '!!!!!!12sd' Author value must be alphanumeric" ,
727+ "expression" : ["author[0].identifier.value" ],
728+ }
729+
730+
731+ def test_validate_author_value_too_long ():
732+ validator = DocumentReferenceValidator ()
733+ document_ref_data = load_document_reference_json ("Y05868-736253002-Valid" )
734+
735+ document_ref_data ["author" ][0 ] = {
736+ "identifier" : {
737+ "system" : ODS_SYSTEM ,
738+ "value" : "d1111111111111111111111111111111111111111111111" ,
739+ }
740+ }
741+
742+ result = validator .validate (document_ref_data )
743+
744+ assert result .is_valid is False
745+ assert result .resource .id == "Y05868-99999-99999-999999"
746+ assert len (result .issues ) == 1
747+ assert result .issues [0 ].model_dump (exclude_none = True ) == {
748+ "severity" : "error" ,
749+ "code" : "value" ,
750+ "details" : {
751+ "coding" : [
752+ {
753+ "system" : "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1" ,
754+ "code" : "INVALID_RESOURCE" ,
755+ "display" : "Invalid validation of resource" ,
756+ }
757+ ]
758+ },
759+ "diagnostics" : f"Invalid author value: 'd1111111111111111111111111111111111111111111111' Author value must be less than 13 characters" ,
760+ "expression" : ["author[0].identifier.value" ],
640761 }
641762
642763
0 commit comments