1313import org .mockito .Mock ;
1414import org .mockito .junit .jupiter .MockitoExtension ;
1515
16+ import uk .nhs .adaptors .gp2gp .common .service .ConfidentialityService ;
1617import uk .nhs .adaptors .gp2gp .common .service .FhirParseService ;
1718import uk .nhs .adaptors .gp2gp .common .service .RandomIdGeneratorService ;
1819import uk .nhs .adaptors .gp2gp .ehr .exception .EhrMapperException ;
1920import uk .nhs .adaptors .gp2gp .utils .CodeableConceptMapperMockUtil ;
2021import uk .nhs .adaptors .gp2gp .utils .ResourceTestFileUtils ;
2122import uk .nhs .adaptors .gp2gp .utils .TestArgumentsLoaderUtil ;
22-
23- import java .io .IOException ;
23+ import java .util .Optional ;
2424import java .util .stream .Stream ;
2525
2626import static org .assertj .core .api .Assertions .assertThat ;
@@ -43,6 +43,8 @@ public class BloodPressureMapperTest {
4343 private static final String EXPECTED_ARTERIAL_PRESSURE_WITHOUT_DATA = "arterial-pressure-without-data.xml" ;
4444 private static final String INPUT_BLOOD_PRESSURE_WITH_DATA = "blood-pressure-with-data.json" ;
4545 private static final String EXPECTED_BLOOD_PRESSURE_WITH_DATA = "blood-pressure-with-data.xml" ;
46+ private static final String INPUT_BLOOD_PRESSURE_WITH_NOPAT = "blood-pressure-with-nopat.json" ;
47+ private static final String EXPECTED_NESTED_BLOOD_PRESSURE_WITH_CONFIDENTIALITY_CODE = "blood-pressure-with-nopat.xml" ;
4648 private static final String EXPECTED_NESTED_BLOOD_PRESSURE = "blood-pressure-with-data-nested.xml" ;
4749 private static final String INPUT_BLOOD_PRESSURE_WITHOUT_DATA = "blood-pressure-without-data.json" ;
4850 private static final String EXPECTED_BLOOD_PRESSURE_WITHOUT_DATA = "blood-pressure-without-data.xml" ;
@@ -60,11 +62,19 @@ public class BloodPressureMapperTest {
6062 private static final String EXPECTED_BLOOD_PRESSURE_WITH_CODEABLE_CONCEPTS = "blood-pressure-with-codeable-concepts.xml" ;
6163 private static final String INPUT_BLOOD_PRESSURE_WITH_NO_CODEABLE_CONCEPTS = "blood-pressure-with-no-codeable-concepts.json" ;
6264
65+ public static final String CONFIDENTIALITY_CODE =
66+ "<confidentialityCode code=\" NOPAT\" "
67+ + "codeSystem=\" 2.16.840.1.113883.4.642.3.47\" "
68+ + "displayName=\" no disclosure to patient, family or caregivers without attending provider's authorization\" />" ;
69+
6370 @ Mock
6471 private RandomIdGeneratorService randomIdGeneratorService ;
6572 @ Mock
6673 private CodeableConceptCdMapper mockCodeableConceptCdMapper ;
6774
75+ @ Mock
76+ private ConfidentialityService confidentialityService ;
77+
6878 private MessageContext messageContext ;
6979 private BloodPressureMapper bloodPressureMapper ;
7080
@@ -76,7 +86,7 @@ public void setUp() {
7686 messageContext .initialize (new Bundle ());
7787 bloodPressureMapper = new BloodPressureMapper (
7888 messageContext , randomIdGeneratorService , new StructuredObservationValueMapper (),
79- mockCodeableConceptCdMapper , new ParticipantMapper ());
89+ mockCodeableConceptCdMapper , new ParticipantMapper (), confidentialityService );
8090 }
8191
8292 @ AfterEach
@@ -85,7 +95,24 @@ public void tearDown() {
8595 }
8696
8797 @ Test
88- public void When_MappingEmptyObservation_Expect_CompoundStatementXmlReturned () throws IOException {
98+ public void When_MappingBloodPressureWithNopat_Expect_CompoundStatementWithConfidentialityCode () {
99+ when (mockCodeableConceptCdMapper .mapCodeableConceptToCdForBloodPressure (any (CodeableConcept .class )))
100+ .thenReturn (CodeableConceptMapperMockUtil .NULL_FLAVOR_CODE );
101+
102+ var jsonInput = ResourceTestFileUtils .getFileContent (BLOOD_PRESSURE_FILE_LOCATION + INPUT_BLOOD_PRESSURE_WITH_NOPAT );
103+ var expectedOutput = ResourceTestFileUtils .getFileContent (BLOOD_PRESSURE_FILE_LOCATION
104+ + EXPECTED_NESTED_BLOOD_PRESSURE_WITH_CONFIDENTIALITY_CODE );
105+
106+ Observation observation = new FhirParseService ().parseResource (jsonInput , Observation .class );
107+ when (confidentialityService .generateConfidentialityCode (observation )).thenReturn (Optional .of (CONFIDENTIALITY_CODE ));
108+
109+ var outputMessage = bloodPressureMapper .mapBloodPressure (observation , true );
110+
111+ assertThat (outputMessage ).isEqualToIgnoringWhitespace (expectedOutput );
112+ }
113+
114+ @ Test
115+ public void When_MappingEmptyObservation_Expect_CompoundStatementXmlReturned () {
89116 when (mockCodeableConceptCdMapper .mapCodeableConceptToCdForBloodPressure (any (CodeableConcept .class )))
90117 .thenReturn (CodeableConceptMapperMockUtil .NULL_FLAVOR_CODE );
91118
@@ -99,7 +126,7 @@ public void When_MappingEmptyObservation_Expect_CompoundStatementXmlReturned() t
99126 }
100127
101128 @ Test
102- public void When_MappingBloodPressureWithNestedTrue_Expect_CompoundStatementXmlReturned () throws IOException {
129+ public void When_MappingBloodPressureWithNestedTrue_Expect_CompoundStatementXmlReturned () {
103130 when (mockCodeableConceptCdMapper .mapCodeableConceptToCdForBloodPressure (any (CodeableConcept .class )))
104131 .thenReturn (CodeableConceptMapperMockUtil .NULL_FLAVOR_CODE );
105132
@@ -114,7 +141,7 @@ public void When_MappingBloodPressureWithNestedTrue_Expect_CompoundStatementXmlR
114141
115142 @ ParameterizedTest
116143 @ MethodSource ("testArguments" )
117- public void When_MappingBloodPressure_Expect_CompoundStatementXmlReturned (String inputJson , String outputXml ) throws IOException {
144+ public void When_MappingBloodPressure_Expect_CompoundStatementXmlReturned (String inputJson , String outputXml ) {
118145 when (mockCodeableConceptCdMapper .mapCodeableConceptToCdForBloodPressure (any (CodeableConcept .class )))
119146 .thenReturn (CodeableConceptMapperMockUtil .NULL_FLAVOR_CODE );
120147
@@ -144,7 +171,7 @@ private static Stream<Arguments> testArguments() {
144171 }
145172
146173 @ Test
147- public void When_MappingBloodPressureWithCodeableConcepts_Expect_CompoundStatementXmlReturned () throws IOException {
174+ public void When_MappingBloodPressureWithCodeableConcepts_Expect_CompoundStatementXmlReturned () {
148175 when (randomIdGeneratorService .createNewOrUseExistingUUID (any ()))
149176 .thenReturn ("5E496953-065B-41F2-9577-BE8F2FBD0757" );
150177
@@ -155,7 +182,7 @@ public void When_MappingBloodPressureWithCodeableConcepts_Expect_CompoundStateme
155182 CodeableConceptCdMapper codeableConceptCdMapper = new CodeableConceptCdMapper ();
156183 bloodPressureMapper = new BloodPressureMapper (
157184 messageContext , randomIdGeneratorService , new StructuredObservationValueMapper (),
158- codeableConceptCdMapper , new ParticipantMapper ());
185+ codeableConceptCdMapper , new ParticipantMapper (), confidentialityService );
159186
160187 Observation observation = new FhirParseService ().parseResource (jsonInput , Observation .class );
161188 var outputMessage = bloodPressureMapper .mapBloodPressure (observation , true );
@@ -164,13 +191,13 @@ messageContext, randomIdGeneratorService, new StructuredObservationValueMapper()
164191 }
165192
166193 @ Test
167- public void When_MappingBloodPressureWithNoCodeableConcepts_Expect_Exception () throws IOException {
194+ public void When_MappingBloodPressureWithNoCodeableConcepts_Expect_Exception () {
168195 var jsonInput = ResourceTestFileUtils .getFileContent (BLOOD_PRESSURE_FILE_LOCATION + INPUT_BLOOD_PRESSURE_WITH_NO_CODEABLE_CONCEPTS );
169196
170197 CodeableConceptCdMapper codeableConceptCdMapper = new CodeableConceptCdMapper ();
171198 bloodPressureMapper = new BloodPressureMapper (
172199 messageContext , randomIdGeneratorService , new StructuredObservationValueMapper (),
173- codeableConceptCdMapper , new ParticipantMapper ());
200+ codeableConceptCdMapper , new ParticipantMapper (), confidentialityService );
174201
175202 Observation observation = new FhirParseService ().parseResource (jsonInput , Observation .class );
176203
0 commit comments