diff --git a/api/src/main/java/org/openmrs/api/context/Context.java b/api/src/main/java/org/openmrs/api/context/Context.java index 79e5d3573443..141eda64b549 100644 --- a/api/src/main/java/org/openmrs/api/context/Context.java +++ b/api/src/main/java/org/openmrs/api/context/Context.java @@ -565,23 +565,22 @@ public static ProgramWorkflowService getProgramWorkflowService() { * * @return message service */ - public static MessageService getMessageService() { - MessageService ms = getServiceContext().getMessageService(); - try { - // Message service dependencies - if (ms.getMessagePreparator() == null) { - ms.setMessagePreparator(getMessagePreparator()); - } - - if (ms.getMessageSender() == null) { - ms.setMessageSender(getMessageSender()); - } - - } - catch (Exception e) { - log.error("Unable to create message service due", e); + public static MessageService getMessageService() throws APIException { + return getServiceContext().getMessageService(); + } + + /** + * Convenience method to configure the MessageService via dependency injection. + * + * @param sender the MessageSender to set + * @param preparator the MessagePreparator to set + */ + public static void configureMessageService(MessageSender sender, MessagePreparator preparator) { + MessageService messageService = getServiceContext().getMessageService(); + if (messageService != null) { + messageService.setMessageSender(sender); + messageService.setMessagePreparator(preparator); } - return ms; } /** diff --git a/api/src/test/java/org/openmrs/api/UserServiceTest.java b/api/src/test/java/org/openmrs/api/UserServiceTest.java index fe27de4a187b..d6778c9bca32 100644 --- a/api/src/test/java/org/openmrs/api/UserServiceTest.java +++ b/api/src/test/java/org/openmrs/api/UserServiceTest.java @@ -9,6 +9,9 @@ */ package org.openmrs.api; +import static org.mockito.Mockito.*; +import org.mockito.Mockito; + import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.emptyString; import static org.hamcrest.Matchers.greaterThanOrEqualTo; @@ -1564,15 +1567,16 @@ public void getUserByUsernameOrEmail_shouldFailIfEmailIsNull() { assertThat(exception.getMessage(), is(messages.getMessage("error.usernameOrEmail.notNullOrBlank"))); } - @Test public void setUserActivationKey_shouldCreateUserActivationKey() throws Exception { - User createdUser = createTestUser(); - Context.getAdministrationService().setGlobalProperty(OpenmrsConstants.GP_PASSWORD_RESET_URL, - "http://localhost:8080/openmrs/admin/users/changePassword.form/{activationKey}"); - assertNull(dao.getLoginCredential(createdUser).getActivationKey()); - assertThrows(MessageException.class, () -> userService.setUserActivationKey(createdUser)); - assertNotNull(dao.getLoginCredential(createdUser).getActivationKey()); + User createdUser = createTestUser(); + Context.getAdministrationService().setGlobalProperty(OpenmrsConstants.GP_PASSWORD_RESET_URL, + "http://localhost:8080/openmrs/admin/users/changePassword.form/{activationKey}"); + assertNull(dao.getLoginCredential(createdUser).getActivationKey()); + userService.setUserActivationKey(createdUser); + LoginCredential credentials = dao.getLoginCredential(createdUser); + assertNotNull(credentials.getActivationKey()); + assertTrue(credentials.getActivationKey().matches("^[a-f0-9]+:\\d+$")); // Verify format } @Test diff --git a/api/src/test/java/org/openmrs/api/context/ContextTest.java b/api/src/test/java/org/openmrs/api/context/ContextTest.java index 7c5ec7e20673..56ca1a0ddae1 100644 --- a/api/src/test/java/org/openmrs/api/context/ContextTest.java +++ b/api/src/test/java/org/openmrs/api/context/ContextTest.java @@ -15,6 +15,7 @@ import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; import java.util.List; import java.util.Locale; @@ -34,6 +35,10 @@ import org.openmrs.api.UserService; import org.openmrs.api.handler.EncounterVisitHandler; import org.openmrs.api.handler.ExistingOrNewVisitAssignmentHandler; +import org.openmrs.notification.MessagePreparator; +import org.openmrs.notification.MessageSender; +import org.openmrs.notification.MessageService; +import org.openmrs.notification.impl.MessageServiceImpl; import org.openmrs.test.jupiter.BaseContextSensitiveTest; import org.openmrs.util.LocaleUtility; import org.openmrs.util.OpenmrsConstants; @@ -353,4 +358,22 @@ public void clearEntireCache_shouldClearEntireCache() { assertFalse(sf.getCache().containsEntity(PERSON_NAME_CLASS, PERSON_NAME_ID_8)); assertFalse(sf.getCache().containsEntity(Patient.class, PERSON_NAME_ID_2)); } + @Test + public void configureMessageService_shouldSetMessageSenderAndPreparator() { + // Given + MessageService messageService = new MessageServiceImpl(); + MessageSender mockSender = mock(MessageSender.class); + MessagePreparator mockPreparator = mock(MessagePreparator.class); + + // Inject test instance + Context.getServiceContext().setMessageService(messageService); + + // When + Context.configureMessageService(mockSender, mockPreparator); + + // Then + assertEquals(mockSender, messageService.getMessageSender()); + assertEquals(mockPreparator, messageService.getMessagePreparator()); + } + }