Skip to content

Commit 50492e9

Browse files
authored
NIAD-3234: adding tests to confirm the status of a transfer once it starts (#1006)
* adding tests to confirm the status of a transfer once it starts * test refactoring
1 parent 2d75381 commit 50492e9

File tree

1 file changed

+52
-43
lines changed

1 file changed

+52
-43
lines changed

service/src/test/java/uk/nhs/adaptors/gp2gp/ehr/EhrResendControllerTest.java

Lines changed: 52 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.core.JsonProcessingException;
44
import com.fasterxml.jackson.databind.JsonNode;
55
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import org.jetbrains.annotations.NotNull;
67
import org.junit.jupiter.api.BeforeEach;
78
import org.junit.jupiter.api.Test;
89
import org.junit.jupiter.api.extension.ExtendWith;
@@ -16,6 +17,8 @@
1617
import uk.nhs.adaptors.gp2gp.common.service.TimestampService;
1718
import uk.nhs.adaptors.gp2gp.common.task.TaskDispatcher;
1819
import uk.nhs.adaptors.gp2gp.ehr.model.EhrExtractStatus;
20+
import uk.nhs.adaptors.gp2gp.ehr.status.controller.EhrStatusController;
21+
import uk.nhs.adaptors.gp2gp.ehr.status.service.EhrStatusService;
1922
import uk.nhs.adaptors.gp2gp.gpc.GetGpcStructuredTaskDefinition;
2023

2124
import java.time.Duration;
@@ -31,6 +34,7 @@
3134
import static org.mockito.Mockito.times;
3235
import static org.mockito.Mockito.verify;
3336
import static org.mockito.Mockito.when;
37+
import static uk.nhs.adaptors.gp2gp.ehr.status.model.MigrationStatus.IN_PROGRESS;
3438

3539
@ExtendWith(MockitoExtension.class)
3640
class EhrResendControllerTest {
@@ -46,6 +50,11 @@ class EhrResendControllerTest {
4650
private static final String FROM_ASID_CODE = "test-from-asid";
4751
private static final String INCUMBENT_NACK_CODE = "99";
4852
private static final String INCUMBENT_NACK_DISPLAY = "Unexpected condition.";
53+
public static final List<EhrExtractStatus.EhrReceivedAcknowledgement.ErrorDetails> EHR_RECEIVED_ACK_ERROR_DETAILS = List.of(
54+
EhrExtractStatus.EhrReceivedAcknowledgement.ErrorDetails.builder()
55+
.code(INCUMBENT_NACK_CODE)
56+
.display(INCUMBENT_NACK_DISPLAY)
57+
.build());
4958
private static final String PRECONDITION_FAILED = "PRECONDITION_FAILED";
5059
private static final String GPCONNECT_ERROR_OR_WARNING_CODE = "https://fhir.nhs.uk/STU3/ValueSet/Spine-ErrorOrWarningCode-1";
5160
private static final String INVALID_IDENTIFIER_VALUE = "INVALID_IDENTIFIER_VALUE";
@@ -67,6 +76,8 @@ class EhrResendControllerTest {
6776
private TaskDispatcher taskDispatcher;
6877

6978
private EhrResendController ehrResendController;
79+
private EhrStatusController ehrStatusController;
80+
private EhrStatusService ehrStatusService;
7081

7182

7283
@BeforeEach
@@ -79,27 +90,14 @@ void setUp() {
7990
randomIdGeneratorService,
8091
timestampService,
8192
fhirParseService);
93+
ehrStatusService = new EhrStatusService(ehrExtractStatusRepository);
94+
ehrStatusController = new EhrStatusController(ehrStatusService);
8295
}
8396

8497
@Test
8598
void When_AnEhrExtractHasFailed_Expect_GetGpcStructuredTaskScheduledAndEhrExtractStatusIsReset() {
8699

87-
String ehrMessageRef = generateRandomUppercaseUUID();
88-
var ehrExtractStatus = new EhrExtractStatus();
89-
90-
ehrExtractStatus.setConversationId(CONVERSATION_ID);
91-
ehrExtractStatus.setEhrReceivedAcknowledgement(EhrExtractStatus.EhrReceivedAcknowledgement.builder()
92-
.conversationClosed(FIVE_DAYS_AGO)
93-
.errors(List.of(
94-
EhrExtractStatus.EhrReceivedAcknowledgement.ErrorDetails.builder()
95-
.code(INCUMBENT_NACK_CODE)
96-
.display(INCUMBENT_NACK_DISPLAY)
97-
.build()))
98-
.messageRef(ehrMessageRef)
99-
.received(FIVE_DAYS_AGO)
100-
.rootId(generateRandomUppercaseUUID())
101-
.build());
102-
ehrExtractStatus.setEhrRequest(EhrExtractStatus.EhrRequest.builder().nhsNumber(NHS_NUMBER).build());
100+
var ehrExtractStatus = getEhrExtractStatus(EHR_RECEIVED_ACK_ERROR_DETAILS);
103101
ehrExtractStatus.setEhrExtractCorePending(EhrExtractStatus.EhrExtractCorePending.builder().build());
104102
ehrExtractStatus.setEhrContinue(EhrExtractStatus.EhrContinue.builder().build());
105103
ehrExtractStatus.setGpcAccessDocument(EhrExtractStatus.GpcAccessDocument.builder().build());
@@ -153,22 +151,7 @@ void When_AnEhrExtractIsStillInProgress_Expect_FailedOperationOutcome() throws J
153151
@Test
154152
void When_AnEhrExtractHasFailed_Expect_RespondsWith202() {
155153

156-
String ehrMessageRef = generateRandomUppercaseUUID();
157-
var ehrExtractStatus = new EhrExtractStatus();
158-
159-
ehrExtractStatus.setConversationId(CONVERSATION_ID);
160-
ehrExtractStatus.setEhrReceivedAcknowledgement(EhrExtractStatus.EhrReceivedAcknowledgement.builder()
161-
.conversationClosed(FIVE_DAYS_AGO)
162-
.errors(List.of(
163-
EhrExtractStatus.EhrReceivedAcknowledgement.ErrorDetails.builder()
164-
.code(INCUMBENT_NACK_CODE)
165-
.display(INCUMBENT_NACK_DISPLAY)
166-
.build()))
167-
.messageRef(ehrMessageRef)
168-
.received(FIVE_DAYS_AGO)
169-
.rootId(generateRandomUppercaseUUID())
170-
.build());
171-
ehrExtractStatus.setEhrRequest(EhrExtractStatus.EhrRequest.builder().nhsNumber(NHS_NUMBER).build());
154+
var ehrExtractStatus = getEhrExtractStatus(EHR_RECEIVED_ACK_ERROR_DETAILS);
172155

173156
when(ehrExtractStatusRepository.findByConversationId(CONVERSATION_ID)).thenReturn(Optional.of(ehrExtractStatus));
174157

@@ -183,17 +166,7 @@ void When_AnEhrExtractHasFailed_Expect_RespondsWith202() {
183166
@Test
184167
void When_AnEhrExtractHasAPositiveAcknowledgement_Expect_FailedOperationOutcome() throws JsonProcessingException {
185168

186-
String ehrMessageRef = generateRandomUppercaseUUID();
187-
var ehrExtractStatus = new EhrExtractStatus();
188-
ehrExtractStatus.setConversationId(CONVERSATION_ID);
189-
ehrExtractStatus.setEhrReceivedAcknowledgement(EhrExtractStatus.EhrReceivedAcknowledgement.builder()
190-
.conversationClosed(FIVE_DAYS_AGO)
191-
.errors(List.of())
192-
.messageRef(ehrMessageRef)
193-
.received(FIVE_DAYS_AGO)
194-
.rootId(generateRandomUppercaseUUID())
195-
.build());
196-
ehrExtractStatus.setEhrRequest(EhrExtractStatus.EhrRequest.builder().nhsNumber(NHS_NUMBER).build());
169+
var ehrExtractStatus = getEhrExtractStatus(List.of());
197170

198171
when(ehrExtractStatusRepository.findByConversationId(CONVERSATION_ID)).thenReturn(Optional.of(ehrExtractStatus));
199172

@@ -224,6 +197,42 @@ void When_AnEhrExtractDoesNotExist_Expect_RespondsWith404() throws JsonProcessin
224197
);
225198
}
226199

200+
@Test
201+
void When_ResendingTransfer_Expect_EhrStatusInProgressStatus() {
202+
203+
var ehrExtractStatus = getEhrExtractStatus(EHR_RECEIVED_ACK_ERROR_DETAILS);
204+
ehrExtractStatus.setEhrExtractCorePending(EhrExtractStatus.EhrExtractCorePending.builder().build());
205+
ehrExtractStatus.setEhrContinue(EhrExtractStatus.EhrContinue.builder().build());
206+
ehrExtractStatus.setGpcAccessDocument(EhrExtractStatus.GpcAccessDocument.builder().build());
207+
208+
when(ehrExtractStatusRepository.findByConversationId(CONVERSATION_ID)).thenReturn(Optional.of(ehrExtractStatus));
209+
210+
Instant now = Instant.now().truncatedTo(ChronoUnit.MILLIS);
211+
when(timestampService.now()).thenReturn(now);
212+
213+
ehrResendController.scheduleEhrExtractResend(CONVERSATION_ID);
214+
var ehrStatus = ehrStatusController.getEhrStatus(CONVERSATION_ID);
215+
216+
assertEquals(IN_PROGRESS, ehrStatus.getBody().getMigrationStatus());
217+
}
218+
219+
private @NotNull EhrExtractStatus getEhrExtractStatus(List<EhrExtractStatus.EhrReceivedAcknowledgement.ErrorDetails> errors) {
220+
221+
String ehrMessageRef = generateRandomUppercaseUUID();
222+
var ehrExtractStatus = new EhrExtractStatus();
223+
224+
ehrExtractStatus.setConversationId(CONVERSATION_ID);
225+
ehrExtractStatus.setEhrReceivedAcknowledgement(EhrExtractStatus.EhrReceivedAcknowledgement.builder()
226+
.conversationClosed(FIVE_DAYS_AGO)
227+
.errors(errors)
228+
.messageRef(ehrMessageRef)
229+
.received(FIVE_DAYS_AGO)
230+
.rootId(generateRandomUppercaseUUID())
231+
.build());
232+
ehrExtractStatus.setEhrRequest(EhrExtractStatus.EhrRequest.builder().nhsNumber(NHS_NUMBER).build());
233+
return ehrExtractStatus;
234+
}
235+
227236
private void assertResponseHasExpectedOperationOutcome(JsonNode rootNode, String serverErrMsg,
228237
String diagnosticsMsg, String issueCode) {
229238
var coding = rootNode.path("issue").get(0).path("details").path("coding").get(0);

0 commit comments

Comments
 (0)