77import org .hl7 .fhir .dstu3 .model .UriType ;
88import org .junit .jupiter .api .Test ;
99import org .junit .jupiter .api .extension .ExtendWith ;
10+ import org .mockito .InjectMocks ;
11+ import org .mockito .Mock ;
1012import org .mockito .junit .jupiter .MockitoExtension ;
11- import org .springframework .beans .factory .annotation .Autowired ;
12- import org .springframework .boot .test .context .SpringBootTest ;
13- import org .springframework .boot .test .mock .mockito .MockBean ;
1413import org .springframework .http .HttpStatus ;
15- import org .springframework .test .annotation .DirtiesContext ;
16- import org .springframework .test .context .junit .jupiter .SpringExtension ;
1714import uk .nhs .adaptors .gp2gp .common .service .RandomIdGeneratorService ;
1815import uk .nhs .adaptors .gp2gp .common .service .TimestampService ;
1916import uk .nhs .adaptors .gp2gp .common .task .TaskDispatcher ;
2017import uk .nhs .adaptors .gp2gp .ehr .model .EhrExtractStatus ;
21- import uk .nhs .adaptors .gp2gp .gpc .GetGpcStructuredTaskDefinition ;
22- import uk .nhs .adaptors .gp2gp .testcontainers .ActiveMQExtension ;
23- import uk .nhs .adaptors .gp2gp .testcontainers .MongoDBExtension ;
2418
2519import java .time .Duration ;
2620import java .time .Instant ;
27- import java .time .temporal .ChronoUnit ;
2821import java .util .Collections ;
2922import java .util .List ;
23+ import java .util .Optional ;
3024import java .util .UUID ;
3125
3226import static org .assertj .core .api .Assertions .assertThat ;
33- import static org .hl7 .fhir .dstu3 .model .OperationOutcome .IssueType ;
34- import static org .junit .jupiter .api .Assertions .assertEquals ;
3527import static org .junit .jupiter .api .Assertions .assertNull ;
3628import static org .mockito .Mockito .doReturn ;
37- import static org .mockito .Mockito .times ;
38- import static org .mockito .Mockito .verify ;
39- import static uk .nhs .adaptors .gp2gp .ehr .EhrStatusConstants .INCUMBENT_NACK_CODE ;
40- import static uk .nhs .adaptors .gp2gp .ehr .EhrStatusConstants .INCUMBENT_NACK_DISPLAY ;
41-
42- @ SpringBootTest
43- @ DirtiesContext
44- @ ExtendWith ({SpringExtension .class , MongoDBExtension .class , ActiveMQExtension .class , MockitoExtension .class })
29+
30+ @ ExtendWith (MockitoExtension .class )
4531public class EhrResendControllerTest {
4632
4733 public static final Instant NOW = Instant .parse ("2024-01-01T10:00:00Z" );
@@ -51,21 +37,23 @@ public class EhrResendControllerTest {
5137 public static final String NHS_NUMBER = "12345" ;
5238 private static final String TO_ASID_CODE = "test-to-asid" ;
5339 private static final String FROM_ASID_CODE = "test-from-asid" ;
40+ public static final String INCUMBENT_NACK_CODE = "99" ;
41+ public static final String INCUMBENT_NACK_DISPLAY = "Unexpected condition." ;
5442
55- @ Autowired
43+ @ Mock
5644 private EhrExtractStatusRepository ehrExtractStatusRepository ;
5745
58- @ Autowired
59- private EhrResendController ehrResendController ;
46+ @ Mock
47+ private TimestampService timestampService ;
6048
61- @ MockBean
49+ @ Mock
6250 private RandomIdGeneratorService randomIdGeneratorService ;
6351
64- @ MockBean
52+ @ Mock
6553 private TaskDispatcher taskDispatcher ;
6654
67- @ MockBean
68- private TimestampService timestampService ;
55+ @ InjectMocks
56+ private EhrResendController ehrResendController ;
6957
7058 @ Test
7159 public void When_AnEhrExtractHasNotFailedAndAnotherResendRequestArrives_Expect_FailedOperationOutcome () {
@@ -84,9 +72,12 @@ public void When_AnEhrExtractHasNotFailedAndAnotherResendRequestArrives_Expect_F
8472 .ehrRequest (EhrExtractStatus .EhrRequest .builder ().nhsNumber (NHS_NUMBER ).toAsid (TO_ASID_CODE ).fromAsid (FROM_ASID_CODE ).build ())
8573 .build ();
8674
87- ehrExtractStatusRepository . save (IN_PROGRESS_EXTRACT_STATUS );
75+ doReturn ( Optional . of (IN_PROGRESS_EXTRACT_STATUS )). when ( ehrExtractStatusRepository ). findByConversationId ( CONVERSATION_ID );
8876
89- var operationOutcome = createOperationOutcome (IssueType .BUSINESSRULE , OperationOutcome .IssueSeverity .ERROR , details , diagnostics );
77+ var operationOutcome = createOperationOutcome (OperationOutcome .IssueType .BUSINESSRULE ,
78+ OperationOutcome .IssueSeverity .ERROR ,
79+ details ,
80+ diagnostics );
9081
9182 var response = ehrResendController .scheduleEhrExtractResend (CONVERSATION_ID );
9283
@@ -101,34 +92,6 @@ public void When_AnEhrExtractHasFailed_Expect_RespondsWith202() {
10192 String ehrMessageRef = generateRandomUppercaseUUID ();
10293 var ehrExtractStatus = new EhrExtractStatus ();
10394
104- ehrExtractStatus .setConversationId (CONVERSATION_ID );
105- ehrExtractStatus .setEhrReceivedAcknowledgement (EhrExtractStatus .EhrReceivedAcknowledgement .builder ()
106- .conversationClosed (FIVE_DAYS_AGO )
107- .errors (List .of (
108- EhrExtractStatus .EhrReceivedAcknowledgement .ErrorDetails .builder ()
109- .code (INCUMBENT_NACK_CODE )
110- .display (INCUMBENT_NACK_DISPLAY )
111- .build ()))
112- .messageRef (ehrMessageRef )
113- .received (FIVE_DAYS_AGO )
114- .rootId (generateRandomUppercaseUUID ())
115- .build ());
116- ehrExtractStatus .setEhrRequest (EhrExtractStatus .EhrRequest .builder ().nhsNumber (NHS_NUMBER ).build ());
117-
118- ehrExtractStatusRepository .save (ehrExtractStatus );
119-
120- var response = ehrResendController .scheduleEhrExtractResend (CONVERSATION_ID );
121-
122- assertThat (response .getStatusCode ()).isEqualTo (HttpStatus .ACCEPTED );
123- assertThat (response .getBody ()).isNull ();
124- }
125-
126- @ Test
127- public void When_AnEhrExtractHasFailed_Expect_GetGpcStructuredTaskScheduled () {
128-
129- String ehrMessageRef = generateRandomUppercaseUUID ();
130- var ehrExtractStatus = new EhrExtractStatus ();
131-
13295 ehrExtractStatus .setConversationId (CONVERSATION_ID );
13396 ehrExtractStatus .setEhrReceivedAcknowledgement (EhrExtractStatus .EhrReceivedAcknowledgement .builder ()
13497 .conversationClosed (FIVE_DAYS_AGO )
@@ -142,24 +105,13 @@ public void When_AnEhrExtractHasFailed_Expect_GetGpcStructuredTaskScheduled() {
142105 .rootId (generateRandomUppercaseUUID ())
143106 .build ());
144107 ehrExtractStatus .setEhrRequest (EhrExtractStatus .EhrRequest .builder ().nhsNumber (NHS_NUMBER ).build ());
145- ehrExtractStatus .setEhrExtractCorePending (EhrExtractStatus .EhrExtractCorePending .builder ().build ());
146- ehrExtractStatus .setEhrContinue (EhrExtractStatus .EhrContinue .builder ().build ());
147-
148- ehrExtractStatusRepository .save (ehrExtractStatus );
149- Instant now = Instant .now ().truncatedTo (ChronoUnit .MILLIS );
150- doReturn (now ).when (timestampService ).now ();
151108
152- ehrResendController . scheduleEhrExtractResend (CONVERSATION_ID );
109+ doReturn ( Optional . of ( ehrExtractStatus )). when ( ehrExtractStatusRepository ). findByConversationId (CONVERSATION_ID );
153110
154- var updatedEhrExtractStatus = ehrExtractStatusRepository .findByConversationId (ehrExtractStatus .getConversationId ());
155- var taskDefinition = GetGpcStructuredTaskDefinition .getGetGpcStructuredTaskDefinition (randomIdGeneratorService , ehrExtractStatus );
111+ var response = ehrResendController .scheduleEhrExtractResend (CONVERSATION_ID );
156112
157- verify (taskDispatcher , times (1 )).createTask (taskDefinition );
158- assertEquals (now , updatedEhrExtractStatus .get ().getMessageTimestamp ());
159- assertNull (updatedEhrExtractStatus .get ().getEhrExtractCorePending ());
160- assertNull (updatedEhrExtractStatus .get ().getEhrContinue ());
161- assertNull (updatedEhrExtractStatus .get ().getAckPending ());
162- assertNull (updatedEhrExtractStatus .get ().getEhrReceivedAcknowledgement ());
113+ assertThat (response .getStatusCode ()).isEqualTo (HttpStatus .ACCEPTED );
114+ assertNull (response .getBody ());
163115 }
164116
165117 @ Test
@@ -172,7 +124,12 @@ public void When_AnEhrExtractDoesNotExist_Expect_RespondsWith404() {
172124 details .setCoding (List .of (codeableConceptCoding ));
173125 var diagnostics = "Provide a conversationId that exists and retry the operation" ;
174126
175- var operationOutcome = createOperationOutcome (IssueType .VALUE , OperationOutcome .IssueSeverity .ERROR , details , diagnostics );
127+ var operationOutcome = createOperationOutcome (OperationOutcome .IssueType .VALUE ,
128+ OperationOutcome .IssueSeverity .ERROR ,
129+ details ,
130+ diagnostics );
131+ doReturn (Optional .empty ()).when (ehrExtractStatusRepository ).findByConversationId (CONVERSATION_ID );
132+
176133
177134 var response = ehrResendController .scheduleEhrExtractResend (CONVERSATION_ID );
178135
@@ -199,5 +156,4 @@ public static OperationOutcome createOperationOutcome(
199156 return operationOutcome ;
200157 }
201158
202-
203159}
0 commit comments