Skip to content

Commit ba00636

Browse files
committed
code and test refactoring
1 parent 0356fd4 commit ba00636

File tree

2 files changed

+57
-5
lines changed

2 files changed

+57
-5
lines changed

service/src/main/java/uk/nhs/adaptors/gp2gp/ehr/mapper/diagnosticreport/DiagnosticReportMapper.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ private List<Specimen> fetchSpecimens(DiagnosticReport diagnosticReport, List<Ob
142142

143143
// At least one specimen is required to exist for any DiagnosticReport, according to the mim
144144
if (!diagnosticReport.hasSpecimen() || hasObservationsWithoutSpecimen(observations)) {
145-
specimens.add(generateDummySpecimen(diagnosticReport));
145+
specimens.add(generateNotPresentSpecimen(diagnosticReport));
146146
}
147147

148148
var inputBundleHolder = messageContext.getInputBundleHolder();
@@ -179,21 +179,21 @@ List<Observation> assignDummySpecimensToObservationsWithNoSpecimen(List<Observat
179179
}
180180

181181
// The assumption was made that all test results without a specimen will have the same dummy specimen referenced
182-
Specimen dummySpecimen = specimens.stream()
182+
Specimen notPresentSpecimen = specimens.stream()
183183
.filter(specimen -> specimen.getId().contains(NOT_PRESENT_SPECIMEN_ID_PREFIX))
184184
.toList().getFirst();
185185

186-
Reference dummySpecimenReference = new Reference(dummySpecimen.getId());
186+
Reference notPresentSpecimenReference = new Reference(notPresentSpecimen.getId());
187187

188188
nonFilingObservations.stream()
189189
.filter(obs -> !obs.hasSpecimen() && !isFilingComment(obs))
190-
.forEach(obs -> obs.setSpecimen(dummySpecimenReference));
190+
.forEach(obs -> obs.setSpecimen(notPresentSpecimenReference));
191191

192192
nonFilingObservations.addAll(filingComments);
193193
return nonFilingObservations;
194194
}
195195

196-
private Specimen generateDummySpecimen(DiagnosticReport diagnosticReport) {
196+
private Specimen generateNotPresentSpecimen(DiagnosticReport diagnosticReport) {
197197
Specimen specimen = new Specimen();
198198

199199
specimen.setId(NOT_PRESENT_SPECIMEN_ID_PREFIX + randomIdGeneratorService.createNewId());

service/src/test/java/uk/nhs/adaptors/gp2gp/ehr/mapper/diagnosticreport/DiagnosticReportMapperTest.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
package uk.nhs.adaptors.gp2gp.ehr.mapper.diagnosticreport;
22

33
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
5+
import static org.junit.Assert.assertFalse;
46
import static org.junit.jupiter.api.Assertions.assertAll;
57
import static org.mockito.ArgumentMatchers.any;
68
import static org.mockito.Mockito.when;
79
import java.util.ArrayList;
810
import java.util.Collections;
911
import java.util.List;
12+
import java.util.NoSuchElementException;
1013
import java.util.Optional;
1114
import java.util.stream.Stream;
1215

1316
import org.hl7.fhir.dstu3.model.Bundle;
1417
import org.hl7.fhir.dstu3.model.CodeableConcept;
18+
import org.hl7.fhir.dstu3.model.Coding;
1519
import org.hl7.fhir.dstu3.model.DiagnosticReport;
1620
import org.hl7.fhir.dstu3.model.IdType;
1721
import org.hl7.fhir.dstu3.model.Observation;
@@ -62,6 +66,7 @@ class DiagnosticReportMapperTest {
6266

6367
private static final String TEST_ID = "5E496953-065B-41F2-9577-BE8F2FBD0757";
6468
public static final String NOT_PRESENT_SPECIMEN_ID_PREFIX = "NOT-PRESENT-SPECIMEN-";
69+
private static final String COMMENT_NOTE = "37331000000100";
6570

6671
private static final String INPUT_JSON_REQUIRED_DATA = "diagnostic-report-with-required-data.json";
6772
private static final String INPUT_JSON_EMPTY_SPECIMENS = "diagnostic-report-with-empty-specimens.json";
@@ -130,6 +135,53 @@ public void tearDown() {
130135
messageContext.resetMessageContext();
131136
}
132137

138+
@Test
139+
void shouldAssignDummySpecimenOnlyToNonFilingObservationsWithoutSpecimen() {
140+
141+
Observation obsWithoutSpecimen = new Observation();
142+
obsWithoutSpecimen.setId("obs1");
143+
144+
Observation obsWithSpecimen = new Observation();
145+
obsWithSpecimen.setId("obs2");
146+
obsWithSpecimen.setSpecimen(new Reference("real-specimen"));
147+
148+
Observation filingCommentObs = new Observation();
149+
filingCommentObs.setId("obs3");
150+
filingCommentObs.getCode().addCoding(new Coding().setCode(COMMENT_NOTE));
151+
152+
List<Observation> observations = List.of(obsWithoutSpecimen, obsWithSpecimen, filingCommentObs);
153+
154+
Specimen dummySpecimen = new Specimen();
155+
dummySpecimen.setId(NOT_PRESENT_SPECIMEN_ID_PREFIX + "123");
156+
List<Specimen> specimens = List.of(dummySpecimen);
157+
158+
List<Observation> result = mapper.assignDummySpecimensToObservationsWithNoSpecimen(observations, specimens);
159+
160+
assertThat(obsWithoutSpecimen.getSpecimen())
161+
.isNotNull()
162+
.extracting(Reference::getReference)
163+
.isEqualTo(dummySpecimen.getId());
164+
165+
assertThat(obsWithSpecimen.getSpecimen())
166+
.extracting(Reference::getReference)
167+
.isEqualTo("real-specimen");
168+
169+
assertFalse(filingCommentObs.hasSpecimen());
170+
assertThat(result).containsExactlyInAnyOrder(obsWithoutSpecimen, obsWithSpecimen, filingCommentObs);
171+
}
172+
173+
@Test
174+
void shouldThrowIfNoDummySpecimenFound() {
175+
176+
Observation obsWithoutSpecimen = new Observation();
177+
List<Observation> observations = List.of(obsWithoutSpecimen);
178+
179+
List<Specimen> specimens = List.of();
180+
181+
assertThatThrownBy(() -> mapper.assignDummySpecimensToObservationsWithNoSpecimen(observations, specimens))
182+
.isInstanceOf(NoSuchElementException.class);
183+
}
184+
133185
@Test
134186
void shouldAssignDummySpecimenToObservationsWithoutSpecimen() {
135187

0 commit comments

Comments
 (0)