diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/IntegrationBaseTest.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/IntegrationBaseTest.java index 1edb6da82..79b76a9af 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/IntegrationBaseTest.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/IntegrationBaseTest.java @@ -1,6 +1,7 @@ package uk.nhs.digital.nhsconnect.nhais; import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.Getter; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.reflect.FieldUtils; @@ -45,6 +46,7 @@ @ExtendWith({SpringExtension.class, SoftAssertionsExtension.class, IntegrationTestsExtension.class}) @SpringBootTest @Slf4j +@Getter public abstract class IntegrationBaseTest { public static final String DLQ_PREFIX = "DLQ."; @@ -54,18 +56,19 @@ public abstract class IntegrationBaseTest { private static final int JMS_RECEIVE_TIMEOUT = 500; @Rule public Timeout globalTimeout = Timeout.seconds(2); + @Autowired - protected JmsTemplate jmsTemplate; + private JmsTemplate jmsTemplate; @Autowired - protected InboundStateRepository inboundStateRepository; + private InboundStateRepository inboundStateRepository; @Autowired - protected OutboundStateRepository outboundStateRepository; + private OutboundStateRepository outboundStateRepository; @Autowired - protected ObjectMapper objectMapper; + private ObjectMapper objectMapper; @Autowired - protected MeshClient meshClient; + private MeshClient meshClient; @Autowired - protected MeshConfig meshConfig; + private MeshConfig meshConfig; @Autowired private RecipientMailboxIdMappings recipientMailboxIdMappings; @Autowired @@ -73,15 +76,15 @@ public abstract class IntegrationBaseTest { @Autowired private MeshHttpClientBuilder meshHttpClientBuilder; @Value("${nhais.amqp.meshInboundQueueName}") - protected String meshInboundQueueName; + private String meshInboundQueueName; @Value("${nhais.amqp.meshOutboundQueueName}") - protected String meshOutboundQueueName; + private String meshOutboundQueueName; @Value("${nhais.amqp.gpSystemInboundQueueName}") - protected String gpSystemInboundQueueName; + private String gpSystemInboundQueueName; @Autowired private InboundQueueService inboundQueueService; private long originalReceiveTimeout; - protected MeshClient nhaisMeshClient; + private MeshClient nhaisMeshClient; @PostConstruct private void postConstruct() { @@ -190,9 +193,15 @@ private MeshClient buildMeshClientForNhaisMailbox() { String endpointCert = (String) FieldUtils.readField(meshConfig, "endpointCert", true); String endpointPrivateKey = (String) FieldUtils.readField(meshConfig, "endpointPrivateKey", true); String subCaCert = (String) FieldUtils.readField(meshConfig, "subCAcert", true); - MeshConfig nhaisMailboxConfig = new MeshConfig(nhaisMailboxId, meshConfig.getMailboxPassword(), - meshConfig.getSharedKey(), meshConfig.getHost(), meshConfig.getCertValidation(), endpointCert, - endpointPrivateKey, subCaCert); + MeshConfig nhaisMailboxConfig = new MeshConfig() + .setMailboxId(nhaisMailboxId) + .setMailboxPassword(meshConfig.getMailboxPassword()) + .setSharedKey(meshConfig.getSharedKey()) + .setHost(meshConfig.getHost()) + .setCertValidation(meshConfig.getCertValidation()) + .setEndpointCert(endpointCert) + .setEndpointPrivateKey(endpointPrivateKey) + .setSubCAcert(subCaCert); MeshHeaders meshHeaders = new MeshHeaders(nhaisMailboxConfig); MeshRequests meshRequests = new MeshRequests(nhaisMailboxConfig, meshHeaders); return new MeshClient(meshRequests, mockRecipientMailboxIdMappings, meshHttpClientBuilder); diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/db/TimeToLiveTest.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/db/TimeToLiveTest.java index c27f73fb6..ea2d083d0 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/db/TimeToLiveTest.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/db/TimeToLiveTest.java @@ -34,6 +34,8 @@ @AutoConfigureMockMvc @DirtiesContext public class TimeToLiveTest { + private static final long INTERCHANGE_SEQUENCE = 123L; + private static final int AWAIT_TIMEOUT = 90; @Autowired private InboundStateRepository inboundStateRepository; @@ -75,14 +77,14 @@ void When_TimeToLiveHasPassedInInboundState_Expect_DocumentRemoved() { .setWorkflowId(WorkflowId.RECEP) .setSender("some_sender") .setRecipient("some_recipient") - .setInterchangeSequence(123L) + .setInterchangeSequence(INTERCHANGE_SEQUENCE) .setTranslationTimestamp(Instant.now().atZone(ZoneId.systemDefault()).toInstant()); assertThat(inboundStateRepository.findAll()).isEmpty(); inboundStateRepository.save(inboundState); assertThat(inboundStateRepository.findAll()).isNotEmpty(); await() - .atMost(90, TimeUnit.SECONDS) + .atMost(AWAIT_TIMEOUT, TimeUnit.SECONDS) .pollInterval(Durations.ONE_SECOND) .untilAsserted(() -> assertThat(inboundStateRepository.findAll()).isEmpty()); } @@ -94,14 +96,14 @@ void When_TimeToLiveHasPassedInOutboundState_Expect_DocumentRemoved() { .setWorkflowId(WorkflowId.RECEP) .setSender("some_sender") .setRecipient("some_recipient") - .setInterchangeSequence(123L) + .setInterchangeSequence(INTERCHANGE_SEQUENCE) .setTranslationTimestamp(Instant.now().atZone(ZoneId.systemDefault()).toInstant()); assertThat(outboundStateRepository.findAll()).isEmpty(); outboundStateRepository.save(inboundState); assertThat(outboundStateRepository.findAll()).isNotEmpty(); await() - .atMost(90, TimeUnit.SECONDS) + .atMost(AWAIT_TIMEOUT, TimeUnit.SECONDS) .pollInterval(Durations.ONE_SECOND) .untilAsserted(() -> assertThat(outboundStateRepository.findAll()).isEmpty()); } diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/DeadLetterQueueTest.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/DeadLetterQueueTest.java index f3086b80c..9a9fb03b9 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/DeadLetterQueueTest.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/DeadLetterQueueTest.java @@ -38,10 +38,10 @@ public class DeadLetterQueueTest extends IntegrationBaseTest { @Test public void When_SendingInvalidMessageToMeshInboundQueue_Expect_MessageIsSentToDeadLetterQueue() throws JMSException { - clearDeadLetterQueue(meshInboundQueueName); + clearDeadLetterQueue(super.getMeshInboundQueueName()); sendToMeshInboundQueue(MESSAGE_CONTENT); - var message = getDeadLetterMeshInboundQueueMessage(meshInboundQueueName); + var message = getDeadLetterMeshInboundQueueMessage(super.getMeshInboundQueueName()); var messageBody = parseTextMessage(message); assertThat(messageBody).isEqualTo(MESSAGE_CONTENT); @@ -59,10 +59,10 @@ public void When_MeshOutboundQueueMessageCannotBeProcessed_Expect_MessageIsSentT ); doThrow(RuntimeException.class).when(meshClient).authenticate(); - clearDeadLetterQueue(meshOutboundQueueName); + clearDeadLetterQueue(super.getMeshOutboundQueueName()); outboundQueueService.publish(meshMessage); - var message = getDeadLetterMeshInboundQueueMessage(meshOutboundQueueName); + var message = getDeadLetterMeshInboundQueueMessage(super.getMeshOutboundQueueName()); assertThat(message.getStringProperty(JmsHeaders.CONVERSATION_ID)).isEqualTo(conversationId); assertThat(parseTextMessage(message)).isEqualTo(objectMapper.writeValueAsString(meshMessage)); diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundMeshQueueMultiTransactionTest.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundMeshQueueMultiTransactionTest.java index 6167ea9ec..c21af0c44 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundMeshQueueMultiTransactionTest.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundMeshQueueMultiTransactionTest.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.nio.file.Files; import java.time.Instant; +import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.util.List; import java.util.Optional; @@ -64,13 +65,21 @@ public class InboundMeshQueueMultiTransactionTest extends IntegrationBaseTest { private static final String TRANSACTION_4_OPERATION_ID = OperationId.buildOperationId(RECIPIENT, TN_4); private static final String TRANSACTION_5_OPERATION_ID = OperationId.buildOperationId(RECIPIENT, TN_5); private static final String TRANSACTION_6_OPERATION_ID = OperationId.buildOperationId(RECIPIENT, TN_6); + private static final int TN1_INDEX = 0; + private static final int TN2_INDEX = 1; + private static final int TN3_INDEX = 2; + private static final int TN4_INDEX = 3; + private static final int TN5_INDEX = 4; + private static final int TN6_INDEX = 5; + private static final int INBOUND_STATE_EXPECTED_SIZE = 6; private static final Instant INTERCHANGE_TRANSLATION_TIMESTAMP = ZonedDateTime - .of(2020, 1, 25, 12, 35, 0, 0, TimestampService.UK_ZONE) + .of(LocalDateTime.parse("2020-01-25T12:35:00"), TimestampService.UK_ZONE) .toInstant(); - - private static final Instant GENERATED_TIMESTAMP = ZonedDateTime.of(2020, 6, 10, 14, 38, 0, 0, TimestampService.UK_ZONE) + private static final Instant GENERATED_TIMESTAMP = ZonedDateTime + .of(LocalDateTime.parse("2020-06-10T14:38:00"), TimestampService.UK_ZONE) .toInstant(); - private static final String ISO_GENERATED_TIMESTAMP = new TimestampService().formatInISO(GENERATED_TIMESTAMP); + private static final String ISO_GENERATED_TIMESTAMP = new TimestampService() + .formatInISO(GENERATED_TIMESTAMP); @MockBean private TimestampService timestampService; @@ -132,19 +141,19 @@ private List getAllInboundStates() { .flatMap(Optional::stream) .collect(Collectors.toList()); - if (inboundStates.size() == 6) { + if (inboundStates.size() == INBOUND_STATE_EXPECTED_SIZE) { return inboundStates; } return null; } private Optional findInboundState(long sms, long tn) { - return inboundStateRepository.findBy(WorkflowId.REGISTRATION, SENDER, RECIPIENT, SIS, sms, tn); + return super.getInboundStateRepository().findBy(WorkflowId.REGISTRATION, SENDER, RECIPIENT, SIS, sms, tn); } private void assertOutboundRecepMessage(SoftAssertions softly) throws IOException { - var meshMessage = waitForMeshMessage(nhaisMeshClient); + var meshMessage = waitForMeshMessage(super.getNhaisMeshClient()); softly.assertThat(meshMessage.getContent()).isEqualTo(new String(Files.readAllBytes(recep.getFile().toPath()))); softly.assertThat(meshMessage.getWorkflowId()).isEqualTo(WorkflowId.RECEP); @@ -154,22 +163,22 @@ private void assertOutboundRecepMessage(SoftAssertions softly) throws IOExceptio } private void assertGpSystemInboundQueueMessages(SoftAssertions softly) throws JMSException, IOException, JSONException { - var gpSystemInboundQueueMessages = IntStream.range(0, 6) + var gpSystemInboundQueueMessages = IntStream.range(0, INBOUND_STATE_EXPECTED_SIZE) .mapToObj(x -> getGpSystemInboundQueueMessage()) .toList(); assertGpSystemInboundQueueMessages( - softly, gpSystemInboundQueueMessages.get(0), MESSAGE_1_TRANSACTION_TYPE, TRANSACTION_1_OPERATION_ID, fhirTN1); + softly, gpSystemInboundQueueMessages.get(TN1_INDEX), MESSAGE_1_TRANSACTION_TYPE, TRANSACTION_1_OPERATION_ID, fhirTN1); assertGpSystemInboundQueueMessages( - softly, gpSystemInboundQueueMessages.get(1), MESSAGE_2_TRANSACTION_TYPE, TRANSACTION_2_OPERATION_ID, fhirTN2); + softly, gpSystemInboundQueueMessages.get(TN2_INDEX), MESSAGE_2_TRANSACTION_TYPE, TRANSACTION_2_OPERATION_ID, fhirTN2); assertGpSystemInboundQueueMessages( - softly, gpSystemInboundQueueMessages.get(2), MESSAGE_2_TRANSACTION_TYPE, TRANSACTION_3_OPERATION_ID, fhirTN3); + softly, gpSystemInboundQueueMessages.get(TN3_INDEX), MESSAGE_2_TRANSACTION_TYPE, TRANSACTION_3_OPERATION_ID, fhirTN3); assertGpSystemInboundQueueMessages( - softly, gpSystemInboundQueueMessages.get(3), MESSAGE_3_TRANSACTION_TYPE, TRANSACTION_4_OPERATION_ID, fhirTN4); + softly, gpSystemInboundQueueMessages.get(TN4_INDEX), MESSAGE_3_TRANSACTION_TYPE, TRANSACTION_4_OPERATION_ID, fhirTN4); assertGpSystemInboundQueueMessages( - softly, gpSystemInboundQueueMessages.get(4), MESSAGE_4_TRANSACTION_TYPE, TRANSACTION_5_OPERATION_ID, fhirTN5); + softly, gpSystemInboundQueueMessages.get(TN5_INDEX), MESSAGE_4_TRANSACTION_TYPE, TRANSACTION_5_OPERATION_ID, fhirTN5); assertGpSystemInboundQueueMessages( - softly, gpSystemInboundQueueMessages.get(5), MESSAGE_4_TRANSACTION_TYPE, TRANSACTION_6_OPERATION_ID, fhirTN6); + softly, gpSystemInboundQueueMessages.get(TN6_INDEX), MESSAGE_4_TRANSACTION_TYPE, TRANSACTION_6_OPERATION_ID, fhirTN6); } private void assertGpSystemInboundQueueMessages( @@ -199,20 +208,20 @@ private void assertGpSystemInboundQueueMessages( } private void assertInboundStates(SoftAssertions softly, List inboundStates) { - softly.assertThat(inboundStates).hasSize(6); + softly.assertThat(inboundStates).hasSize(INBOUND_STATE_EXPECTED_SIZE); assertInboundState( - softly, inboundStates.get(0), TRANSACTION_1_OPERATION_ID, SMS_1, TN_1, MESSAGE_1_TRANSACTION_TYPE); + softly, inboundStates.get(TN1_INDEX), TRANSACTION_1_OPERATION_ID, SMS_1, TN_1, MESSAGE_1_TRANSACTION_TYPE); assertInboundState( - softly, inboundStates.get(1), TRANSACTION_2_OPERATION_ID, SMS_2, TN_2, MESSAGE_2_TRANSACTION_TYPE); + softly, inboundStates.get(TN2_INDEX), TRANSACTION_2_OPERATION_ID, SMS_2, TN_2, MESSAGE_2_TRANSACTION_TYPE); assertInboundState( - softly, inboundStates.get(2), TRANSACTION_3_OPERATION_ID, SMS_2, TN_3, MESSAGE_2_TRANSACTION_TYPE); + softly, inboundStates.get(TN3_INDEX), TRANSACTION_3_OPERATION_ID, SMS_2, TN_3, MESSAGE_2_TRANSACTION_TYPE); assertInboundState( - softly, inboundStates.get(3), TRANSACTION_4_OPERATION_ID, SMS_3, TN_4, MESSAGE_3_TRANSACTION_TYPE); + softly, inboundStates.get(TN4_INDEX), TRANSACTION_4_OPERATION_ID, SMS_3, TN_4, MESSAGE_3_TRANSACTION_TYPE); assertInboundState( - softly, inboundStates.get(4), TRANSACTION_5_OPERATION_ID, SMS_4, TN_5, MESSAGE_4_TRANSACTION_TYPE); + softly, inboundStates.get(TN5_INDEX), TRANSACTION_5_OPERATION_ID, SMS_4, TN_5, MESSAGE_4_TRANSACTION_TYPE); assertInboundState( - softly, inboundStates.get(5), TRANSACTION_6_OPERATION_ID, SMS_4, TN_6, MESSAGE_4_TRANSACTION_TYPE); + softly, inboundStates.get(TN6_INDEX), TRANSACTION_6_OPERATION_ID, SMS_4, TN_6, MESSAGE_4_TRANSACTION_TYPE); } private void assertInboundState( @@ -241,8 +250,8 @@ private void assertInboundState( } private void assertOutboundState(SoftAssertions softly) { - waitForCondition(() -> outboundStateRepository.findAll().iterator().hasNext()); - Iterable outboundStates = outboundStateRepository.findAll(); + waitForCondition(() -> super.getOutboundStateRepository().findAll().iterator().hasNext()); + Iterable outboundStates = super.getOutboundStateRepository().findAll(); assertThat(outboundStates).hasSize(1); var outboundState = outboundStates.iterator().next(); diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundMeshQueueRecepTest.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundMeshQueueRecepTest.java index 158ff11d6..a06bd660b 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundMeshQueueRecepTest.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundMeshQueueRecepTest.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.nio.file.Files; import java.time.Instant; +import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; @@ -40,7 +41,7 @@ public class InboundMeshQueueRecepTest extends IntegrationBaseTest { private static final String SENDER = "FHS1"; private static final String RECIPIENT = "GP05"; private static final Instant TRANSLATION_TIMESTAMP = ZonedDateTime - .of(2020, 6, 20, 14, 0, 0, 0, TimestampService.UK_ZONE) + .of(LocalDateTime.parse("2020-06-20T14:00:00"), TimestampService.UK_ZONE) .toInstant(); // Mongo only supports millis precision private static final Instant PROCESSED_TIMESTAMP = Instant.now().truncatedTo(ChronoUnit.MILLIS); @@ -81,7 +82,7 @@ private void assertOutboundStateRecepUpdates(SoftAssertions softly) { var expectedOutboundStateRef2 = buildExpectedOutboundState(REF_MESSAGE_SEQUENCE_2, ReferenceMessageRecep.RecepCode.ERROR); var outboundStates = waitFor(() -> { - var all = Lists.newArrayList(outboundStateRepository.findAll()); + var all = Lists.newArrayList(super.getOutboundStateRepository().findAll()); if (all.stream().allMatch(outboundState -> outboundState.getRecep() != null)) { return all; } @@ -105,7 +106,7 @@ private OutboundState buildExpectedOutboundState(long refMessageSequence1, Refer private void assertInboundState(SoftAssertions softly) { var inboundState = waitFor( - () -> inboundStateRepository + () -> super.getInboundStateRepository() .findBy(WorkflowId.RECEP, SENDER, RECIPIENT, INTERCHANGE_SEQUENCE, MESSAGE_SEQUENCE, null) .orElse(null)); @@ -123,8 +124,8 @@ private void assertInboundState(SoftAssertions softly) { } private void createOutboundStateRecords() { - outboundStateRepository.save(buildOutboundState(REF_MESSAGE_SEQUENCE_1)); - outboundStateRepository.save(buildOutboundState(REF_MESSAGE_SEQUENCE_2)); + super.getOutboundStateRepository().save(buildOutboundState(REF_MESSAGE_SEQUENCE_1)); + super.getOutboundStateRepository().save(buildOutboundState(REF_MESSAGE_SEQUENCE_2)); } private OutboundState buildOutboundState(long refMessageSequence1) { diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundMeshQueueRegistrationTest.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundMeshQueueRegistrationTest.java index 4c0b024b1..eae5245ef 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundMeshQueueRegistrationTest.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundMeshQueueRegistrationTest.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.nio.file.Files; import java.time.Instant; +import java.time.LocalDateTime; import java.time.ZonedDateTime; import static org.mockito.Mockito.when; @@ -42,11 +43,13 @@ public class InboundMeshQueueRegistrationTest extends IntegrationBaseTest { private static final ReferenceTransactionType.Inbound TRANSACTION_TYPE = ReferenceTransactionType.Inbound.APPROVAL; private static final String OPERATION_ID = OperationId.buildOperationId(RECIPIENT, TN); private static final Instant TRANSLATION_TIMESTAMP = ZonedDateTime - .of(2020, 1, 25, 12, 35, 0, 0, TimestampService.UK_ZONE) + .of(LocalDateTime.parse("2020-01-25T12:35:00"), TimestampService.UK_ZONE) .toInstant(); - private static final Instant GENERATED_TIMESTAMP = ZonedDateTime.of(2020, 6, 10, 14, 38, 00, 0, TimestampService.UK_ZONE) + private static final Instant GENERATED_TIMESTAMP = ZonedDateTime + .of(LocalDateTime.parse("2020-06-10T14:38:00"), TimestampService.UK_ZONE) .toInstant(); - private static final String ISO_GENERATED_TIMESTAMP = new TimestampService().formatInISO(GENERATED_TIMESTAMP); + private static final String ISO_GENERATED_TIMESTAMP = new TimestampService() + .formatInISO(GENERATED_TIMESTAMP); @MockBean private TimestampService timestampService; @@ -83,7 +86,7 @@ void When_MeshInboundQueueRegistrationMessageIsReceived_Expect_MessageIsHandled( } private void assertOutboundRecepMessage(SoftAssertions softly) throws IOException { - var meshMessage = waitForMeshMessage(nhaisMeshClient); + var meshMessage = waitForMeshMessage(super.getNhaisMeshClient()); softly.assertThat(meshMessage.getContent()).isEqualTo(new String(Files.readAllBytes(recep.getFile().toPath()))); softly.assertThat(meshMessage.getWorkflowId()).isEqualTo(WorkflowId.RECEP); @@ -104,7 +107,7 @@ private void assertGpSystemInboundQueueMessage(SoftAssertions softly) throws JMS private void assertInboundState(SoftAssertions softly) { var inboundState = waitFor( - () -> inboundStateRepository + () -> super.getInboundStateRepository() .findBy(WorkflowId.REGISTRATION, SENDER, RECIPIENT, SIS, SMS, TN) .orElse(null)); @@ -123,7 +126,7 @@ private void assertInboundState(SoftAssertions softly) { } private void assertOutboundState(SoftAssertions softly) { - Iterable outboundStates = outboundStateRepository.findAll(); + Iterable outboundStates = super.getOutboundStateRepository().findAll(); softly.assertThat(outboundStates).hasSize(1); var outboundState = outboundStates.iterator().next(); diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundStateRepositoryTest.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundStateRepositoryTest.java index f222ecfe2..2269f24c8 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundStateRepositoryTest.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundStateRepositoryTest.java @@ -21,6 +21,8 @@ @AutoConfigureMockMvc @DirtiesContext public class InboundStateRepositoryTest { + private static final long INTERCHANGE_SEQUENCE = 123L; + private static final long MESSAGE_SEQUENCE = 234L; @Autowired private InboundStateRepository inboundStateRepository; @@ -31,14 +33,14 @@ void When_DuplicateInterchangeInboundStateInserted_Expect_ThrowsException() { .setWorkflowId(WorkflowId.REGISTRATION) .setSender("some_sender") .setRecipient("some_recipient") - .setInterchangeSequence(123L) - .setMessageSequence(234L); + .setInterchangeSequence(INTERCHANGE_SEQUENCE) + .setMessageSequence(MESSAGE_SEQUENCE); var duplicateInboundState = new InboundState() .setWorkflowId(WorkflowId.REGISTRATION) .setSender("some_sender") .setRecipient("some_recipient") - .setInterchangeSequence(123L) - .setMessageSequence(234L); + .setInterchangeSequence(INTERCHANGE_SEQUENCE) + .setMessageSequence(MESSAGE_SEQUENCE); assertInsert(inboundState, duplicateInboundState); } @@ -49,12 +51,12 @@ void When_DuplicateRecepInboundStateInserted_Expect_ThrowsException() { .setWorkflowId(WorkflowId.RECEP) .setSender("some_sender") .setRecipient("some_recipient") - .setInterchangeSequence(123L); + .setInterchangeSequence(INTERCHANGE_SEQUENCE); var duplicateInboundState = new InboundState() .setWorkflowId(WorkflowId.RECEP) .setSender("some_sender") .setRecipient("some_recipient") - .setInterchangeSequence(123L); + .setInterchangeSequence(INTERCHANGE_SEQUENCE); assertInsert(inboundState, duplicateInboundState); } diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundUserAcceptanceTest.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundUserAcceptanceTest.java index e0f57943b..7685ccfa8 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundUserAcceptanceTest.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/inbound/InboundUserAcceptanceTest.java @@ -67,7 +67,7 @@ void testTranslatingFromEdifactToFhir(String category, TestData testData) throws .getInterchangeHeader().getRecipient(); // Acting as an NHAIS system, send EDIFACT to adaptor's MESH mailbox - nhaisMeshClient.sendEdifactMessage(OutboundMeshMessage.create( + super.getNhaisMeshClient().sendEdifactMessage(OutboundMeshMessage.create( recipient, WorkflowId.REGISTRATION, testData.getEdifact(), null, null)); var expectedTransactionType = category.split("/")[0]; @@ -92,7 +92,7 @@ private Message getGpSystemInboundQueueMessageWithCloseQuarterWorkaround(String if (category.equals("close_quarter_notification/close-quarter-notification")) { // there should be no inbound gp system message for close quarter // fetch without the helper and waitFor since we expect this to be null so only need to try once - return jmsTemplate.receive(gpSystemInboundQueueName); + return super.getJmsTemplate().receive(super.getGpSystemInboundQueueName()); } else { // use the helper method that includes a more robust waitFor return getGpSystemInboundQueueMessage(); @@ -130,10 +130,10 @@ private void assertMessageHeaders(Message gpSystemInboundQueueMessage, String ex private void assertOutboundRecepMessage(String recep) { // Acting as an NHAIS system, receive and validate the RECEP returned by the adaptor List messageIds = waitFor(() -> { - List inboxMessageIds = nhaisMeshClient.getInboxMessageIds(); + List inboxMessageIds = super.getNhaisMeshClient().getInboxMessageIds(); return inboxMessageIds.isEmpty() ? null : inboxMessageIds; }); - var meshMessage = nhaisMeshClient.getEdifactMessage(messageIds.get(0)); + var meshMessage = super.getNhaisMeshClient().getEdifactMessage(messageIds.get(0)); Interchange expectedRecep = edifactParser.parse(recep); Interchange actualRecep = edifactParser.parse(meshMessage.getContent()); diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/mesh/MeshClientIntegrationTest.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/mesh/MeshClientIntegrationTest.java index f36f00853..f838d18ea 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/mesh/MeshClientIntegrationTest.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/mesh/MeshClientIntegrationTest.java @@ -46,6 +46,7 @@ public class MeshClientIntegrationTest extends IntegrationBaseTest { private static final OutboundMeshMessage OUTBOUND_MESH_MESSAGE = OutboundMeshMessage.create( RECIPIENT, WorkflowId.REGISTRATION, CONTENT, null, null ); + private static final int REPEAT_COUNT = 100000000; @Autowired private MeshRequests meshRequests; @@ -61,16 +62,16 @@ void beforeEach() { @Test void When_CallingMeshSendMessageEndpoint_Expect_MessageIdIsReturned() { - MeshMessageId meshMessageId = meshClient.sendEdifactMessage(OUTBOUND_MESH_MESSAGE); + MeshMessageId meshMessageId = super.getMeshClient().sendEdifactMessage(OUTBOUND_MESH_MESSAGE); assertThat(meshMessageId).isNotNull(); assertThat(meshMessageId.getMessageID()).isNotEmpty(); } @Test void When_CallingMeshGetMessageEndpoint_Expect_MessageIsReturned() { - MeshMessageId testMessageId = meshClient.sendEdifactMessage(OUTBOUND_MESH_MESSAGE); + MeshMessageId testMessageId = super.getMeshClient().sendEdifactMessage(OUTBOUND_MESH_MESSAGE); - InboundMeshMessage meshMessage = nhaisMeshClient.getEdifactMessage(testMessageId.getMessageID()); + InboundMeshMessage meshMessage = super.getNhaisMeshClient().getEdifactMessage(testMessageId.getMessageID()); assertThat(meshMessage.getContent()).isEqualTo(CONTENT); assertThat(meshMessage.getWorkflowId()).isEqualTo(WorkflowId.REGISTRATION); } @@ -79,7 +80,7 @@ void When_CallingMeshGetMessageEndpoint_Expect_MessageIsReturned() { void When_CallingGetMessageWithLargeContentAndWrongWorkflowId_Expect_MeshWorkflowUnknownExceptionIsThrown() { MeshMessageId testMessageId = sendLargeMessageWithWrongWorkflowId(); - assertThatThrownBy(() -> nhaisMeshClient.getEdifactMessage(testMessageId.getMessageID())) + assertThatThrownBy(() -> super.getNhaisMeshClient().getEdifactMessage(testMessageId.getMessageID())) .isInstanceOf(MeshWorkflowUnknownException.class) .hasMessageContaining("NOT_NHAIS"); } @@ -93,7 +94,7 @@ private MeshMessageId sendLargeMessageWithWrongWorkflowId() { var request = meshRequests.sendMessage(recipientMailbox, WorkflowId.REGISTRATION); request.removeHeaders("Mex-WorkflowID"); request.setHeader("Mex-WorkflowID", "NOT_NHAIS"); - request.setEntity(new StringEntity("a".repeat(100000000))); // 100mb + request.setEntity(new StringEntity("a".repeat(REPEAT_COUNT))); // 100mb try (CloseableHttpResponse response = client.execute(request)) { assertThat(response.getStatusLine().getStatusCode()).isEqualTo(HttpStatus.ACCEPTED.value()); return parseInto(MeshMessageId.class, response); @@ -109,44 +110,44 @@ private T parseInto(Class clazz, CloseableHttpResponse response) throws I @Test void When_CallingMeshAcknowledgeEndpoint_Expect_NoExceptionIsThrown() { - MeshMessageId testMessageId = meshClient.sendEdifactMessage(OUTBOUND_MESH_MESSAGE); + MeshMessageId testMessageId = super.getMeshClient().sendEdifactMessage(OUTBOUND_MESH_MESSAGE); - assertThatCode(() -> nhaisMeshClient.acknowledgeMessage(testMessageId.getMessageID())) + assertThatCode(() -> super.getNhaisMeshClient().acknowledgeMessage(testMessageId.getMessageID())) .doesNotThrowAnyException(); } @Test void When_PollingFromMesh_Expect_EmptyListIsReturned() { - assertThat(meshClient.getInboxMessageIds()).isEqualTo(List.of()); + assertThat(super.getMeshClient().getInboxMessageIds()).isEqualTo(List.of()); } @Test void When_PollingFromMeshAfterSendingMsg_Expect_ListWithMsgIdIsReturned() { - MeshMessageId testMessageId = meshClient.sendEdifactMessage(OUTBOUND_MESH_MESSAGE); + MeshMessageId testMessageId = super.getMeshClient().sendEdifactMessage(OUTBOUND_MESH_MESSAGE); - assertThat(nhaisMeshClient.getInboxMessageIds()).contains(testMessageId.getMessageID()); + assertThat(super.getNhaisMeshClient().getInboxMessageIds()).contains(testMessageId.getMessageID()); } @Test void When_Authenticating_Expect_NoExceptionThrown() { - assertThatCode(() -> meshClient.authenticate()).doesNotThrowAnyException(); + assertThatCode(() -> super.getMeshClient().authenticate()).doesNotThrowAnyException(); } @Test void When_DownloadMessageThatDoesNotExist_Expect_ExceptionThrown() { assertThatExceptionOfType(MeshApiConnectionException.class).isThrownBy( - () -> meshClient.getEdifactMessage("thisisaninvalidmessageid1234567890") + () -> super.getMeshClient().getEdifactMessage("thisisaninvalidmessageid1234567890") ); } @Test void When_DownloadingMessageWhichIsGone_Expect_ExceptionThrown() { - MeshMessageId testMessageId = meshClient.sendEdifactMessage(OUTBOUND_MESH_MESSAGE); + MeshMessageId testMessageId = super.getMeshClient().sendEdifactMessage(OUTBOUND_MESH_MESSAGE); var messageId = testMessageId.getMessageID(); - nhaisMeshClient.acknowledgeMessage(messageId); + super.getNhaisMeshClient().acknowledgeMessage(messageId); assertThatExceptionOfType(MeshApiConnectionException.class).isThrownBy( - () -> meshClient.getEdifactMessage(messageId) + () -> super.getMeshClient().getEdifactMessage(messageId) ); } } \ No newline at end of file diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/outbound/OutboundUserAcceptanceTest.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/outbound/OutboundUserAcceptanceTest.java index 4e8f7da26..215e37a01 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/outbound/OutboundUserAcceptanceTest.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/outbound/OutboundUserAcceptanceTest.java @@ -21,6 +21,7 @@ import uk.nhs.digital.nhsconnect.nhais.utils.TimestampService; import java.time.Instant; +import java.time.LocalDateTime; import java.time.ZonedDateTime; import static org.assertj.core.api.Assertions.assertThat; @@ -41,8 +42,9 @@ public class OutboundUserAcceptanceTest extends IntegrationBaseTest { private static final String RECIPIENT = "XX11"; private static final String SENDER = "TES5"; private static final Instant GENERATED_TIMESTAMP = ZonedDateTime - .of(2020, 6, 10, 14, 38, 10, 0, TimestampService.UK_ZONE) + .of(LocalDateTime.parse("2020-06-10T14:38:10"), TimestampService.UK_ZONE) .toInstant(); + @Autowired private MockMvc mockMvc; @@ -67,7 +69,7 @@ void testTranslatingFromFhirToEdifact(String category, TestData testData) throws sendToApi(testData.getJson(), transactionType); // fetch EDIFACT message from MESH - var meshMessage = waitForMeshMessage(nhaisMeshClient); + var meshMessage = waitForMeshMessage(super.getNhaisMeshClient()); // assert output EDIFACT is correct assertMessageBody(meshMessage, testData.getEdifact()); @@ -100,7 +102,7 @@ private void assertMessageBody(InboundMeshMessage meshMessage, String expectedEd private void assertOutboundState(String transactionTypeString) { Iterable outboundStates = waitFor(() -> { - var result = outboundStateRepository.findAll(); + var result = super.getOutboundStateRepository().findAll(); return result.iterator().hasNext() ? result : null; }); diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/outbound/controller/SequenceServiceIntegrationTest.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/outbound/controller/SequenceServiceIntegrationTest.java index 9b201fb52..420e92a7a 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/outbound/controller/SequenceServiceIntegrationTest.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/outbound/controller/SequenceServiceIntegrationTest.java @@ -44,6 +44,10 @@ public class SequenceServiceIntegrationTest { private static final String INTERCHANGE_KEY_2 = String.format("SIS-%s-%s", SENDER_2, RECIPIENT_2); private static final String INTERCHANGE_MESSAGE_KEY_1 = String.format("SMS-%s-%s", SENDER_1, RECIPIENT_1); private static final String INTERCHANGE_MESSAGE_KEY_2 = String.format("SMS-%s-%s", SENDER_2, RECIPIENT_2); + private static final long SEQUENCE_NUMBER_1 = 1L; + private static final long SEQUENCE_NUMBER_2 = 2L; + private static final long SEQUENCE_NUMBER_3 = 3L; + private static final long MAXIMUM_ID_VALUE = 9_999_999L; @Autowired private MockMvc mockMvc; @@ -56,34 +60,34 @@ public class SequenceServiceIntegrationTest { public void When_GenerateTransactionId_Expect_IncreasedByOne() { resetCounter(TRANSACTION_SENDER); - assertThat(sequenceService.generateTransactionNumber(TRANSACTION_SENDER)).isEqualTo(1L); - assertThat(sequenceService.generateTransactionNumber(TRANSACTION_SENDER)).isEqualTo(2L); - assertThat(sequenceService.generateTransactionNumber(TRANSACTION_SENDER)).isEqualTo(3L); + assertThat(sequenceService.generateTransactionNumber(TRANSACTION_SENDER)).isEqualTo(SEQUENCE_NUMBER_1); + assertThat(sequenceService.generateTransactionNumber(TRANSACTION_SENDER)).isEqualTo(SEQUENCE_NUMBER_2); + assertThat(sequenceService.generateTransactionNumber(TRANSACTION_SENDER)).isEqualTo(SEQUENCE_NUMBER_3); } @Test public void When_GenerateInterchangeId_Expect_IncreasedByOne() { resetCounter(INTERCHANGE_KEY_1); - assertThat(sequenceService.generateInterchangeSequence(SENDER_1, RECIPIENT_1)).isEqualTo(1L); - assertThat(sequenceService.generateInterchangeSequence(SENDER_1, RECIPIENT_1)).isEqualTo(2L); - assertThat(sequenceService.generateInterchangeSequence(SENDER_1, RECIPIENT_1)).isEqualTo(3L); + assertThat(sequenceService.generateInterchangeSequence(SENDER_1, RECIPIENT_1)).isEqualTo(SEQUENCE_NUMBER_1); + assertThat(sequenceService.generateInterchangeSequence(SENDER_1, RECIPIENT_1)).isEqualTo(SEQUENCE_NUMBER_2); + assertThat(sequenceService.generateInterchangeSequence(SENDER_1, RECIPIENT_1)).isEqualTo(SEQUENCE_NUMBER_3); } @Test public void When_GenerateMessageId_Expect_IncreasedByOne() { resetCounter(INTERCHANGE_MESSAGE_KEY_1); - assertThat(sequenceService.generateMessageSequence(SENDER_1, RECIPIENT_1)).isEqualTo(1L); - assertThat(sequenceService.generateMessageSequence(SENDER_1, RECIPIENT_1)).isEqualTo(2L); - assertThat(sequenceService.generateMessageSequence(SENDER_1, RECIPIENT_1)).isEqualTo(3L); + assertThat(sequenceService.generateMessageSequence(SENDER_1, RECIPIENT_1)).isEqualTo(SEQUENCE_NUMBER_1); + assertThat(sequenceService.generateMessageSequence(SENDER_1, RECIPIENT_1)).isEqualTo(SEQUENCE_NUMBER_2); + assertThat(sequenceService.generateMessageSequence(SENDER_1, RECIPIENT_1)).isEqualTo(SEQUENCE_NUMBER_3); } @Test public void When_GenerateIdGreaterThan9999999_Expect_CounterReset() { - setCounter(TRANSACTION_KEY, 9_999_999L); + setCounter(TRANSACTION_KEY, MAXIMUM_ID_VALUE); - assertThat(sequenceService.generateTransactionNumber(TRANSACTION_SENDER)).isEqualTo(1L); + assertThat(sequenceService.generateTransactionNumber(TRANSACTION_SENDER)).isEqualTo(SEQUENCE_NUMBER_1); } @Test @@ -92,9 +96,9 @@ public void When_GenerateDifferentId_Expect_Expect_SeparateSequence() { resetCounter(INTERCHANGE_KEY_1); resetCounter(INTERCHANGE_MESSAGE_KEY_1); - assertThat(sequenceService.generateTransactionNumber(TRANSACTION_SENDER)).isEqualTo(1L); - assertThat(sequenceService.generateInterchangeSequence(SENDER_1, RECIPIENT_1)).isEqualTo(1L); - assertThat(sequenceService.generateMessageSequence(SENDER_1, RECIPIENT_1)).isEqualTo(1L); + assertThat(sequenceService.generateTransactionNumber(TRANSACTION_SENDER)).isEqualTo(SEQUENCE_NUMBER_1); + assertThat(sequenceService.generateInterchangeSequence(SENDER_1, RECIPIENT_1)).isEqualTo(SEQUENCE_NUMBER_1); + assertThat(sequenceService.generateMessageSequence(SENDER_1, RECIPIENT_1)).isEqualTo(SEQUENCE_NUMBER_1); } @Test @@ -102,10 +106,10 @@ public void When_GenerateInterchangeId_Expect_Expect_SeparateSequenceForEachKey( resetCounter(INTERCHANGE_KEY_1); resetCounter(INTERCHANGE_KEY_2); - assertThat(sequenceService.generateInterchangeSequence(SENDER_1, RECIPIENT_1)).isEqualTo(1L); - assertThat(sequenceService.generateInterchangeSequence(SENDER_2, RECIPIENT_2)).isEqualTo(1L); - assertThat(sequenceService.generateInterchangeSequence(SENDER_1, RECIPIENT_1)).isEqualTo(2L); - assertThat(sequenceService.generateInterchangeSequence(SENDER_2, RECIPIENT_2)).isEqualTo(2L); + assertThat(sequenceService.generateInterchangeSequence(SENDER_1, RECIPIENT_1)).isEqualTo(SEQUENCE_NUMBER_1); + assertThat(sequenceService.generateInterchangeSequence(SENDER_2, RECIPIENT_2)).isEqualTo(SEQUENCE_NUMBER_1); + assertThat(sequenceService.generateInterchangeSequence(SENDER_1, RECIPIENT_1)).isEqualTo(SEQUENCE_NUMBER_2); + assertThat(sequenceService.generateInterchangeSequence(SENDER_2, RECIPIENT_2)).isEqualTo(SEQUENCE_NUMBER_2); } @Test @@ -113,17 +117,19 @@ public void When_GenerateMessageId_Expect_Expect_SeparateSequenceForEachKey() { resetCounter(INTERCHANGE_MESSAGE_KEY_1); resetCounter(INTERCHANGE_MESSAGE_KEY_2); - assertThat(sequenceService.generateMessageSequence(SENDER_1, RECIPIENT_1)).isEqualTo(1L); - assertThat(sequenceService.generateMessageSequence(SENDER_2, RECIPIENT_2)).isEqualTo(1L); - assertThat(sequenceService.generateMessageSequence(SENDER_1, RECIPIENT_1)).isEqualTo(2L); - assertThat(sequenceService.generateMessageSequence(SENDER_2, RECIPIENT_2)).isEqualTo(2L); + assertThat(sequenceService.generateMessageSequence(SENDER_1, RECIPIENT_1)).isEqualTo(SEQUENCE_NUMBER_1); + assertThat(sequenceService.generateMessageSequence(SENDER_2, RECIPIENT_2)).isEqualTo(SEQUENCE_NUMBER_1); + assertThat(sequenceService.generateMessageSequence(SENDER_1, RECIPIENT_1)).isEqualTo(SEQUENCE_NUMBER_2); + assertThat(sequenceService.generateMessageSequence(SENDER_2, RECIPIENT_2)).isEqualTo(SEQUENCE_NUMBER_2); } @Test public void When_GenerateTransactionIdInParallel_Expect_Expect_CorrectValues() { resetCounter(TRANSACTION_KEY); + final long minimumRange = 1; + final long maximumRange = 100; - List expectedList = LongStream.rangeClosed(1, 100) + List expectedList = LongStream.rangeClosed(minimumRange, maximumRange) .boxed() .collect(Collectors.toList()); @@ -139,17 +145,22 @@ private void resetCounter(String key) { } private List generateMultiThreadedSeqList() { + final int numberOfThreads = 10; + final int sequenceCount = 100; + final int awaitDelay = 20; + List seqList = Collections.synchronizedList(new ArrayList<>()); - ExecutorService service = Executors.newFixedThreadPool(10); - for (int i = 0; i < 100; i++) { + ExecutorService service = Executors.newFixedThreadPool(numberOfThreads); + + for (int i = 0; i < sequenceCount; i++) { service.submit(() -> { seqList.add(sequenceService.generateTransactionNumber(TRANSACTION_SENDER)); }); } - await().atMost(20, SECONDS) - .untilAsserted(() -> MatcherAssert.assertThat(seqList.size(), Matchers.is(100))); + await().atMost(awaitDelay, SECONDS) + .untilAsserted(() -> MatcherAssert.assertThat(seqList.size(), Matchers.is(sequenceCount))); return seqList.stream() .sorted() diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/outbound/repository/OutboundStateRepositoryTest.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/outbound/repository/OutboundStateRepositoryTest.java index 0ea5ac916..e55b8cf79 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/outbound/repository/OutboundStateRepositoryTest.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/outbound/repository/OutboundStateRepositoryTest.java @@ -19,6 +19,8 @@ @SpringBootTest @DirtiesContext public class OutboundStateRepositoryTest { + private static final long INTERCHANGE_SEQUENCE = 123L; + private static final long MESSAGE_SEQUENCE = 234L; @Autowired private OutboundStateRepository outboundStateRepository; @@ -29,14 +31,14 @@ void When_DuplicateInterchangeOutboundStateInserted_Expect_ExceptionThrown() { .setWorkflowId(WorkflowId.REGISTRATION) .setSender("some_sender") .setRecipient("some_recipient") - .setInterchangeSequence(123L) - .setMessageSequence(234L); + .setInterchangeSequence(INTERCHANGE_SEQUENCE) + .setMessageSequence(MESSAGE_SEQUENCE); var duplicateOutboundState = new OutboundState() .setWorkflowId(WorkflowId.REGISTRATION) .setSender("some_sender") .setRecipient("some_recipient") - .setInterchangeSequence(123L) - .setMessageSequence(234L); + .setInterchangeSequence(INTERCHANGE_SEQUENCE) + .setMessageSequence(MESSAGE_SEQUENCE); assertInsert(outboundState, duplicateOutboundState); } @@ -47,12 +49,12 @@ void When_DuplicateRecepOutboundStateInserted_Expect_ExceptionThrown() { .setWorkflowId(WorkflowId.RECEP) .setSender("some_sender") .setRecipient("some_recipient") - .setInterchangeSequence(123L); + .setInterchangeSequence(INTERCHANGE_SEQUENCE); var duplicateOutboundState = new OutboundState() .setWorkflowId(WorkflowId.RECEP) .setSender("some_sender") .setRecipient("some_recipient") - .setInterchangeSequence(123L); + .setInterchangeSequence(INTERCHANGE_SEQUENCE); assertInsert(outboundState, duplicateOutboundState); } diff --git a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/uat/common/InboundArgumentsProvider.java b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/uat/common/InboundArgumentsProvider.java index 88f03a775..25d2669b3 100644 --- a/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/uat/common/InboundArgumentsProvider.java +++ b/src/intTest/java/uk/nhs/digital/nhsconnect/nhais/uat/common/InboundArgumentsProvider.java @@ -9,6 +9,7 @@ import java.util.stream.Stream; public class InboundArgumentsProvider extends AbstractArgumentsProvider { + private static final int EXPECTED_NUMBER_OF_TEST_FILES = 3; @Override public String getFolder() { @@ -22,7 +23,7 @@ public Stream provideArguments(ExtensionContext context) th var grouped = groupedResources(resources).entrySet() .stream() .peek(es -> { - if (es.getValue().size() != 3) { + if (es.getValue().size() != EXPECTED_NUMBER_OF_TEST_FILES) { throw new IllegalStateException(String.format( "There should be 3 test data files: '%s', '%s' and '%s': %s", FHIR_FILE_ENDING, diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/CustomTrustStore.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/CustomTrustStore.java index 8669be33e..ca2b43742 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/CustomTrustStore.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/CustomTrustStore.java @@ -33,10 +33,11 @@ public void addToDefault(String trustStorePath, String trustStorePassword) { X509TrustManager combinedTrustManager = new CombinedTrustManager(customTrustManager, defaultTrustManager); SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, new TrustManager[] - { - combinedTrustManager - }, null); + sslContext.init( + null, + new TrustManager[] {combinedTrustManager}, + null + ); LOGGER.info("Overriding default TrustStore with combined one"); SSLContext.setDefault(sslContext); } @@ -77,7 +78,7 @@ private X509TrustManager getCustomDbTrustManager(AmazonS3URI s3URI, String trust } @RequiredArgsConstructor - private static class CombinedTrustManager implements X509TrustManager { + private static final class CombinedTrustManager implements X509TrustManager { private final X509TrustManager primaryTrustManager; private final X509TrustManager secondaryTrustManager; diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/ttl/CosmosTtlCreator.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/ttl/CosmosTtlCreator.java index 9fc8007f0..e527190da 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/ttl/CosmosTtlCreator.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/ttl/CosmosTtlCreator.java @@ -22,21 +22,21 @@ public void create(Class clazz) { LOGGER.info( "TTL value has changed for {} - dropping index and creating new one using value {}", clazz.getSimpleName(), - duration + super.getDuration() ); String indexName = findTtlIndex().map(IndexInfo::getName).orElseThrow(); - indexOperations.dropIndex(indexName); + super.getIndexOperations().dropIndex(indexName); } - indexOperations.ensureIndex( + super.getIndexOperations().ensureIndex( new Index() - .expire(duration) + .expire(super.getDuration()) .on(INDEX_FIELD_KEY, Sort.Direction.ASC) ); } @Override protected Optional findTtlIndex() { - return indexOperations.getIndexInfo().stream() + return super.getIndexOperations().getIndexInfo().stream() .filter(this::isTtlIndex) .findFirst(); } diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/ttl/MongoTtlCreator.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/ttl/MongoTtlCreator.java index 15cb3874f..aa5272808 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/ttl/MongoTtlCreator.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/ttl/MongoTtlCreator.java @@ -23,13 +23,13 @@ public void create(Class clazz) { LOGGER.info( "TTL value has changed for {} - dropping index and creating new one using value {}", clazz.getSimpleName(), - duration + super.getDuration() ); - indexOperations.dropIndex(TTL_INDEX_NAME); + super.getIndexOperations().dropIndex(TTL_INDEX_NAME); } - indexOperations.ensureIndex( + super.getIndexOperations().ensureIndex( new Index() - .expire(duration) + .expire(super.getDuration()) .named(TTL_INDEX_NAME) .on(FIELD_KEY, Sort.Direction.ASC) ); @@ -37,7 +37,7 @@ public void create(Class clazz) { @Override protected Optional findTtlIndex() { - return indexOperations.getIndexInfo().stream() + return super.getIndexOperations().getIndexInfo().stream() .filter(index -> TTL_INDEX_NAME.equals(index.getName())) .findFirst(); } diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/ttl/TtlCreator.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/ttl/TtlCreator.java index 0bfbb8dda..dd2ce881e 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/ttl/TtlCreator.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/configuration/ttl/TtlCreator.java @@ -1,5 +1,6 @@ package uk.nhs.digital.nhsconnect.nhais.configuration.ttl; +import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.data.mongodb.core.index.IndexInfo; import org.springframework.data.mongodb.core.index.IndexOperations; @@ -8,10 +9,11 @@ import java.util.Optional; @RequiredArgsConstructor +@Getter public abstract class TtlCreator { - protected final IndexOperations indexOperations; - protected final Duration duration; + private final IndexOperations indexOperations; + private final Duration duration; public abstract void create(Class clazz); diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/inbound/fhir/EdifactToFhirService.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/inbound/fhir/EdifactToFhirService.java index 660f2565c..b9a91607c 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/inbound/fhir/EdifactToFhirService.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/inbound/fhir/EdifactToFhirService.java @@ -17,7 +17,7 @@ @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class EdifactToFhirService { - public final Map transactionMappers; + private final Map transactionMappers; public Parameters convertToFhir(Transaction transaction) { var transactionType = transaction.getMessage().getReferenceTransactionType().getTransactionType(); diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/inbound/fhir/mapper/DeductionRejectionTransactionMapper.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/inbound/fhir/mapper/DeductionRejectionTransactionMapper.java index a26ff3549..b73357a0c 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/inbound/fhir/mapper/DeductionRejectionTransactionMapper.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/inbound/fhir/mapper/DeductionRejectionTransactionMapper.java @@ -23,7 +23,7 @@ public Parameters map(Transaction transaction) { .map(PersonName::getNhsNumber) .map(NhsIdentifier::new) .orElseThrow(() -> new EdifactValidationException("NHS Number is mandatory for inbound deduction request rejection")); - ParametersExtension.extractPatient(parameters).setIdentifier(List.of(nhsIdentifier)); + ParametersExtension.extractPatient(parameters).setIdentifier(List.of(nhsIdentifier)); var freeText = transaction .getFreeText() diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/http/MeshConfig.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/http/MeshConfig.java index 8dff0a6a8..bfaff02bd 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/http/MeshConfig.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/http/MeshConfig.java @@ -1,54 +1,34 @@ package uk.nhs.digital.nhsconnect.nhais.mesh.http; import lombok.Getter; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; import uk.nhs.digital.nhsconnect.nhais.utils.PemFormatter; -@Component @Getter +@Setter +@Configuration +@ConfigurationProperties(prefix = "nhais.mesh") public class MeshConfig { - - private final String mailboxId; - private final String mailboxPassword; - private final String sharedKey; - private final String host; - private final String certValidation; - private final String endpointCert; - private final String endpointPrivateKey; - private final String subCAcert; - - @Autowired - public MeshConfig( - @Value("${nhais.mesh.mailboxId}") String mailboxId, - @Value("${nhais.mesh.mailboxPassword}") String mailboxPassword, - @Value("${nhais.mesh.sharedKey}") String sharedKey, - @Value("${nhais.mesh.host}") String host, - @Value("${nhais.mesh.certValidation}") String certValidation, - @Value("${nhais.mesh.endpointCert}") String endpointCert, - @Value("${nhais.mesh.endpointPrivateKey}") String endpointPrivateKey, - @Value("${nhais.mesh.subCAcert}") String subCAcert) { - this.mailboxId = mailboxId; - this.mailboxPassword = mailboxPassword; - this.sharedKey = sharedKey; - this.host = host; - this.certValidation = certValidation; - this.endpointCert = endpointCert; - this.endpointPrivateKey = endpointPrivateKey; - this.subCAcert = subCAcert; - } - - public String getEndpointCert() { + private String mailboxId; + private String mailboxPassword; + private String sharedKey; + private String host; + private String certValidation; + private String endpointCert; + private String endpointPrivateKey; + private String subCAcert; + + public String getFormattedEndpointCert() { return PemFormatter.format(endpointCert); } - public String getEndpointPrivateKey() { + public String getFormattedEndpointPrivateKey() { return PemFormatter.format(endpointPrivateKey); } - public String getSubCAcert() { + public String getFormattedSubCaCert() { return PemFormatter.format(subCAcert); } - -} +} \ No newline at end of file diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/http/SSLContextBuilder.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/http/SSLContextBuilder.java index 23eab2e80..639aceb32 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/http/SSLContextBuilder.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/http/SSLContextBuilder.java @@ -70,15 +70,15 @@ private SSLContext noValidationSSLContext() { @SneakyThrows private static KeyStore buildKeyStore(MeshConfig meshConfig) { return EnvKeyStore.createFromPEMStrings( - meshConfig.getEndpointPrivateKey(), - meshConfig.getEndpointCert(), + meshConfig.getFormattedEndpointPrivateKey(), + meshConfig.getFormattedEndpointCert(), meshConfig.getMailboxPassword()).keyStore(); } @SneakyThrows private static KeyStore buildTrustStore(MeshConfig meshConfig) { return EnvKeyStore.createFromPEMStrings( - meshConfig.getSubCAcert(), + meshConfig.getFormattedSubCaCert(), meshConfig.getMailboxPassword()).keyStore(); } } diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/token/AuthorizationHashGenerator.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/token/AuthorizationHashGenerator.java index 18ba06268..6762aeb68 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/token/AuthorizationHashGenerator.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/token/AuthorizationHashGenerator.java @@ -19,8 +19,8 @@ public String computeHash(MeshConfig meshConfig, Nonce nonce, String timestamp) String hashInput = String.join( ":", meshConfig.getMailboxId(), - nonce.value, - nonce.count, + nonce.getValue(), + nonce.getCount(), meshConfig.getMailboxPassword(), timestamp ); diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/token/MeshAuthorizationToken.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/token/MeshAuthorizationToken.java index 3d04aa17e..b7d1c7c70 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/token/MeshAuthorizationToken.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/token/MeshAuthorizationToken.java @@ -23,7 +23,7 @@ public MeshAuthorizationToken( ) { String prefix = MESSAGE_TYPE + meshConfig.getMailboxId(); String currentTimeFormatted = new TokenTimestamp(timestamp).getValue(); - this.data = String.join(":", prefix, nonce.value, nonce.count, currentTimeFormatted); + this.data = String.join(":", prefix, nonce.getValue(), nonce.getCount(), currentTimeFormatted); this.hash = authorizationHashGenerator.computeHash(meshConfig, nonce, currentTimeFormatted); } diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/token/Nonce.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/token/Nonce.java index c48da2ab6..edf5aad49 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/token/Nonce.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/mesh/token/Nonce.java @@ -12,8 +12,9 @@ * Used in MESH authorization token - can by used only once per API request */ class Nonce { - @NonNull final String value; - final String count = "1"; //token should use Nonce only once + @NonNull + private final String value; + private final String count = "1"; //token should use Nonce only once Nonce() { this.value = UUID.randomUUID().toString(); diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/AcceptanceType.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/AcceptanceType.java index 3154853e2..7ab3cdd70 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/AcceptanceType.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/AcceptanceType.java @@ -52,7 +52,7 @@ public enum AvailableTypes { IMMIGRANT("4"); @Getter - public String code; + private final String code; AvailableTypes(String code) { this.code = code; } diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/FreeText.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/FreeText.java index 6f60b8b5d..c5411c8b7 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/FreeText.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/FreeText.java @@ -16,6 +16,7 @@ public class FreeText extends Segment { private static final String KEY = "FTX"; private static final String QUALIFIER = "RGI"; + private static final int FREE_TEXT_INDEX = 4; public static final String KEY_QUALIFIER = KEY + PLUS_SEPARATOR + QUALIFIER; private final String freeTextValue; @@ -27,7 +28,7 @@ public static FreeText fromString(String edifactString) { String[] split = Split.byPlus( Split.bySegmentTerminator(edifactString)[0] ); - return new FreeText(split[4]); + return new FreeText(split[FREE_TEXT_INDEX]); } @Override diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/InterchangeHeader.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/InterchangeHeader.java index f1a1a914c..6e9fbdf50 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/InterchangeHeader.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/InterchangeHeader.java @@ -30,6 +30,11 @@ public class InterchangeHeader extends Segment { private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyMMdd:HHmm").withZone(TimestampService.UK_ZONE); private static final long MAX_INTERCHANGE_SEQUENCE = 99_999_999L; private static final String RECEP_ENDING = "+RECEP+++EDIFACT TRANSFER"; + private static final int EDIFACT_SENDER_INDEX = 2; + private static final int EDIFACT_RECIPIENT_INDEX = 3; + private static final int EDIFACT_DATETIME_INDEX = 4; + private static final int EDIFACT_SEQUENCE_NUMBER_INDEX = 5; + private @NonNull String sender; private @NonNull String recipient; @@ -43,10 +48,14 @@ public static InterchangeHeader fromString(String edifactString) { String[] split = Split.byPlus(edifactString); ZonedDateTime translationTime = ZonedDateTime.parse( - split[4], + split[EDIFACT_DATETIME_INDEX], DateTimeFormatter.ofPattern("yyMMdd:HHmm").withZone(TimestampService.UK_ZONE) ); - return new InterchangeHeader(split[2], split[3], translationTime.toInstant(), Long.valueOf(split[5])); + return new InterchangeHeader( + split[EDIFACT_SENDER_INDEX], + split[EDIFACT_RECIPIENT_INDEX], + translationTime.toInstant(), + Long.valueOf(split[EDIFACT_SEQUENCE_NUMBER_INDEX])); } @Override diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/PersonAddress.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/PersonAddress.java index 1a757c8ec..a0624b829 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/PersonAddress.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/model/edifact/PersonAddress.java @@ -6,6 +6,7 @@ import org.apache.commons.lang3.StringUtils; import uk.nhs.digital.nhsconnect.nhais.model.edifact.message.EdifactValidationException; import uk.nhs.digital.nhsconnect.nhais.model.edifact.message.Split; +import uk.nhs.digital.nhsconnect.nhais.utils.EdifactAddressPart; import java.util.Objects; import java.util.stream.Collectors; @@ -24,6 +25,8 @@ public class PersonAddress extends Segment { public static final String KEY_QUALIFIER = KEY + PLUS_SEPARATOR + QUALIFIER; private static final int POSTAL_CODE_OFFSET = 5; private static final String EMPTY_FIRST_ADDRESS_LINE_PLACEHOLDER = "??"; + private static final int ADDRESS_LINE_INDEX = 3; + private String addressLine1; private String addressLine2; private String addressLine3; @@ -37,28 +40,28 @@ public static PersonAddress fromString(String edifactString) { } String[] addressComponents = Split.byPlus(edifactString); String[] addressLinesParts = - Split.byColon(addressComponents[3]); + Split.byColon(addressComponents[ADDRESS_LINE_INDEX]); var builder = PersonAddress.builder(); - if (addressLinesParts.length > 0) { - String addressLine1 = replacePlaceholderWithEmpty(addressLinesParts[0]); + if (addressLinesParts.length > EdifactAddressPart.ADDRESS_LINE_1_INDEX) { + String addressLine1 = replacePlaceholderWithEmpty(addressLinesParts[EdifactAddressPart.ADDRESS_LINE_1_INDEX]); builder.addressLine1(addressLine1); } - if (addressLinesParts.length > 1) { - builder.addressLine2(addressLinesParts[1]); + if (addressLinesParts.length > EdifactAddressPart.ADDRESS_LINE_2_INDEX) { + builder.addressLine2(addressLinesParts[EdifactAddressPart.ADDRESS_LINE_2_INDEX]); } - if (addressLinesParts.length > 2) { - builder.addressLine3(addressLinesParts[2]); + if (addressLinesParts.length > EdifactAddressPart.ADDRESS_LINE_3_INDEX) { + builder.addressLine3(addressLinesParts[EdifactAddressPart.ADDRESS_LINE_3_INDEX]); } - if (addressLinesParts.length > 3) { - builder.addressLine4(addressLinesParts[3]); + if (addressLinesParts.length > EdifactAddressPart.ADDRESS_LINE_4_INDEX) { + builder.addressLine4(addressLinesParts[EdifactAddressPart.ADDRESS_LINE_4_INDEX]); } - if (addressLinesParts.length > 4) { - builder.addressLine5(addressLinesParts[4]); + if (addressLinesParts.length > EdifactAddressPart.ADDRESS_LINE_5_INDEX) { + builder.addressLine5(addressLinesParts[EdifactAddressPart.ADDRESS_LINE_5_INDEX]); } - if (addressComponents.length > 8) { - builder.postalCode(addressComponents[8]); + if (addressComponents.length > EdifactAddressPart.POSTAL_CODE_INDEX) { + builder.postalCode(addressComponents[EdifactAddressPart.POSTAL_CODE_INDEX]); } return builder.build(); diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/outbound/AbstractToEdifactService.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/outbound/AbstractToEdifactService.java index cfa5efbf3..24db44415 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/outbound/AbstractToEdifactService.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/outbound/AbstractToEdifactService.java @@ -29,11 +29,11 @@ @Slf4j public abstract class AbstractToEdifactService { - protected final SequenceService sequenceService; - protected final TimestampService timestampService; - protected final OutboundStateRepository outboundStateRepository; - protected final RecipientMailboxIdMappings recipientMailboxIdMappings; - protected final ConversationIdService conversationIdService; + private final SequenceService sequenceService; + private final TimestampService timestampService; + private final OutboundStateRepository outboundStateRepository; + private final RecipientMailboxIdMappings recipientMailboxIdMappings; + private final ConversationIdService conversationIdService; protected abstract List createMessageSegments(T translationItems); diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/outbound/mapper/PersonAddressMapper.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/outbound/mapper/PersonAddressMapper.java index 53a10ba7d..976488386 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/outbound/mapper/PersonAddressMapper.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/outbound/mapper/PersonAddressMapper.java @@ -8,21 +8,21 @@ import uk.nhs.digital.nhsconnect.nhais.outbound.FhirValidationException; import uk.nhs.digital.nhsconnect.nhais.model.edifact.PersonAddress; import uk.nhs.digital.nhsconnect.nhais.model.fhir.ParametersExtension; +import uk.nhs.digital.nhsconnect.nhais.utils.EdifactAddressPart; import java.util.List; @Component public class PersonAddressMapper implements FromFhirToEdifactMapper { - public PersonAddress map(Parameters parameters) { Address address = getAddress(parameters); return PersonAddress.builder() - .addressLine1(getAddressLineOrNull(address.getLine(), 0)) - .addressLine2(getAddressLineOrNull(address.getLine(), 1)) - .addressLine3(getAddressLineOrNull(address.getLine(), 2)) - .addressLine4(getAddressLineOrNull(address.getLine(), 3)) - .addressLine5(getAddressLineOrNull(address.getLine(), 4)) + .addressLine1(getAddressLineOrNull(address.getLine(), EdifactAddressPart.ADDRESS_LINE_1_INDEX)) + .addressLine2(getAddressLineOrNull(address.getLine(), EdifactAddressPart.ADDRESS_LINE_2_INDEX)) + .addressLine3(getAddressLineOrNull(address.getLine(), EdifactAddressPart.ADDRESS_LINE_3_INDEX)) + .addressLine4(getAddressLineOrNull(address.getLine(), EdifactAddressPart.ADDRESS_LINE_4_INDEX)) + .addressLine5(getAddressLineOrNull(address.getLine(), EdifactAddressPart.ADDRESS_LINE_5_INDEX)) .postalCode(address.getPostalCode()) .build(); } diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/outbound/mapper/PersonOldAddressMapper.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/outbound/mapper/PersonOldAddressMapper.java index 2eb036fc4..58523ad72 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/outbound/mapper/PersonOldAddressMapper.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/outbound/mapper/PersonOldAddressMapper.java @@ -8,6 +8,7 @@ import uk.nhs.digital.nhsconnect.nhais.outbound.FhirValidationException; import uk.nhs.digital.nhsconnect.nhais.model.edifact.PersonOldAddress; import uk.nhs.digital.nhsconnect.nhais.model.fhir.ParametersExtension; +import uk.nhs.digital.nhsconnect.nhais.utils.EdifactAddressPart; import java.util.List; @@ -18,11 +19,11 @@ public PersonOldAddress map(Parameters parameters) { Address address = getOldAddress(parameters); return PersonOldAddress.builder() - .addressLine1(getAddressLineOrNull(address.getLine(), 0)) - .addressLine2(getAddressLineOrNull(address.getLine(), 1)) - .addressLine3(getAddressLineOrNull(address.getLine(), 2)) - .addressLine4(getAddressLineOrNull(address.getLine(), 3)) - .addressLine5(getAddressLineOrNull(address.getLine(), 4)) + .addressLine1(getAddressLineOrNull(address.getLine(), EdifactAddressPart.ADDRESS_LINE_1_INDEX)) + .addressLine2(getAddressLineOrNull(address.getLine(), EdifactAddressPart.ADDRESS_LINE_2_INDEX)) + .addressLine3(getAddressLineOrNull(address.getLine(), EdifactAddressPart.ADDRESS_LINE_3_INDEX)) + .addressLine4(getAddressLineOrNull(address.getLine(), EdifactAddressPart.ADDRESS_LINE_4_INDEX)) + .addressLine5(getAddressLineOrNull(address.getLine(), EdifactAddressPart.ADDRESS_LINE_5_INDEX)) .build(); } diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/utils/EdifactAddressPart.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/utils/EdifactAddressPart.java new file mode 100644 index 000000000..eff7f8211 --- /dev/null +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/utils/EdifactAddressPart.java @@ -0,0 +1,12 @@ +package uk.nhs.digital.nhsconnect.nhais.utils; + +public final class EdifactAddressPart { + public static final int ADDRESS_LINE_1_INDEX = 0; + public static final int ADDRESS_LINE_2_INDEX = 1; + public static final int ADDRESS_LINE_3_INDEX = 2; + public static final int ADDRESS_LINE_4_INDEX = 3; + public static final int ADDRESS_LINE_5_INDEX = 4; + public static final int POSTAL_CODE_INDEX = 8; + + private EdifactAddressPart() { } +} diff --git a/src/main/java/uk/nhs/digital/nhsconnect/nhais/utils/PemFormatter.java b/src/main/java/uk/nhs/digital/nhsconnect/nhais/utils/PemFormatter.java index 74dea5457..44250ec9d 100644 --- a/src/main/java/uk/nhs/digital/nhsconnect/nhais/utils/PemFormatter.java +++ b/src/main/java/uk/nhs/digital/nhsconnect/nhais/utils/PemFormatter.java @@ -9,6 +9,9 @@ public class PemFormatter { private static final Pattern PEM_PATTERN = Pattern.compile("(-----[A-Z ]+-----)([^-]+)(-----[A-Z ]+-----)"); + private static final int HEADER_INDEX = 1; + private static final int BODY_INDEX = 2; + private static final int FOOTER_INDEX = 3; /** * Different methods of importing the certificates (application.yml, ENV, Cloud secret) can affect whitespace @@ -25,9 +28,9 @@ public static String format(String value) { throw new RuntimeException("Invalid certificate or key format"); } - String header = matcher.group(1).strip(); - String body = matcher.group(2); - String footer = matcher.group(3).strip(); + String header = matcher.group(HEADER_INDEX).strip(); + String body = matcher.group(BODY_INDEX); + String footer = matcher.group(FOOTER_INDEX).strip(); body = Arrays.stream(body.split("\\s+")) .map(String::strip) diff --git a/src/recepResponder/java/uk/nhs/digital/nhsconnect/nhais/ResponderNhaisApplication.java b/src/recepResponder/java/uk/nhs/digital/nhsconnect/nhais/ResponderNhaisApplication.java index e48aa89be..02dc06c36 100644 --- a/src/recepResponder/java/uk/nhs/digital/nhsconnect/nhais/ResponderNhaisApplication.java +++ b/src/recepResponder/java/uk/nhs/digital/nhsconnect/nhais/ResponderNhaisApplication.java @@ -13,14 +13,14 @@ @SpringBootApplication public class ResponderNhaisApplication { public static void main(String[] args) { - SpringApplication.run(ResponderNhaisApplication.class, args); - } + SpringApplication.run(ResponderNhaisApplication.class, args); + } @Configuration class Config { @Bean String registrationConsumerService() { - return RecepResponderService.class.getSimpleName(); - } + return RecepResponderService.class.getSimpleName(); + } } } diff --git a/src/test/java/uk/nhs/digital/nhsconnect/nhais/mesh/FakeMeshConfig.java b/src/test/java/uk/nhs/digital/nhsconnect/nhais/mesh/FakeMeshConfig.java deleted file mode 100644 index f6c21c689..000000000 --- a/src/test/java/uk/nhs/digital/nhsconnect/nhais/mesh/FakeMeshConfig.java +++ /dev/null @@ -1,16 +0,0 @@ -package uk.nhs.digital.nhsconnect.nhais.mesh; - -import uk.nhs.digital.nhsconnect.nhais.mesh.http.MeshConfig; - -public class FakeMeshConfig extends MeshConfig { - public FakeMeshConfig() { - super("mailboxId", - "password", - "SharedKey", - System.getProperty("NHAIS_MESH_HOST"), - "false", - System.getProperty("NHAIS_MESH_ENDPOINT_CERT"), - System.getProperty("NHAIS_MESH_ENDPOINT_KEY"), - System.getProperty("NHAIS_MESH_SUB_CA")); - } -} diff --git a/src/test/java/uk/nhs/digital/nhsconnect/nhais/mesh/MeshHeadersTest.java b/src/test/java/uk/nhs/digital/nhsconnect/nhais/mesh/MeshHeadersTest.java index 11402f7d4..89e35e613 100644 --- a/src/test/java/uk/nhs/digital/nhsconnect/nhais/mesh/MeshHeadersTest.java +++ b/src/test/java/uk/nhs/digital/nhsconnect/nhais/mesh/MeshHeadersTest.java @@ -16,7 +16,16 @@ class MeshHeadersTest { - private final MeshConfig meshConfig = new FakeMeshConfig(); + private final MeshConfig meshConfig = new MeshConfig() + .setMailboxId("mailboxId") + .setMailboxPassword("password") + .setSharedKey("SharedKey") + .setHost("NHAIS_MESH_HOST") + .setCertValidation("false") + .setEndpointCert("NHAIS_MESH_ENDPOINT_CERT") + .setEndpointPrivateKey("NHAIS_MESH_ENDPOINT_PRIVATE_KEY") + .setSubCAcert("NHAIS_MESH_SUB_CA"); + private final MeshHeaders meshHeaders = new MeshHeaders(meshConfig); @Test diff --git a/src/test/java/uk/nhs/digital/nhsconnect/nhais/mesh/MeshRequestsTest.java b/src/test/java/uk/nhs/digital/nhsconnect/nhais/mesh/MeshRequestsTest.java index b268aafe0..123b7eb57 100644 --- a/src/test/java/uk/nhs/digital/nhsconnect/nhais/mesh/MeshRequestsTest.java +++ b/src/test/java/uk/nhs/digital/nhsconnect/nhais/mesh/MeshRequestsTest.java @@ -1,6 +1,5 @@ package uk.nhs.digital.nhsconnect.nhais.mesh; -import org.apache.commons.lang3.StringUtils; import org.apache.http.Header; import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import org.apache.http.client.methods.HttpGet; @@ -16,14 +15,16 @@ class MeshRequestsTest { - private final MeshConfig meshConfig = new MeshConfig("mailboxId", - "password", - "SharedKey", - "https://localhost:8829/messageexchange/", - "false", - StringUtils.EMPTY, - StringUtils.EMPTY, - StringUtils.EMPTY); + private final MeshConfig meshConfig = new MeshConfig() + .setMailboxId("mailboxId") + .setMailboxPassword("password") + .setSharedKey("SharedKey") + .setHost("https://localhost:8829/messageexchange/") + .setCertValidation("false") + .setEndpointCert("") + .setEndpointPrivateKey("") + .setSubCAcert(""); + private final MeshHeaders meshHeaders = new MeshHeaders(meshConfig); @Test