diff --git a/id-repository/id-repository-vid-service/pom.xml b/id-repository/id-repository-vid-service/pom.xml
index 9ad5916e5..9c7eb067b 100644
--- a/id-repository/id-repository-vid-service/pom.xml
+++ b/id-repository/id-repository-vid-service/pom.xml
@@ -26,6 +26,7 @@
2.2.10
1.5.10
1.1.1
+ 2.0.0
@@ -150,6 +151,18 @@
${spring.boot.version}
true
+
+ org.powermock
+ powermock-api-mockito2
+ ${powermock.version}
+ test
+
+
+ org.powermock
+ powermock-module-junit4
+ ${powermock.version}
+ test
+
diff --git a/id-repository/id-repository-vid-service/src/test/java/io/mosip/idrepository/vid/service/impl/NotificationServiceTest.java b/id-repository/id-repository-vid-service/src/test/java/io/mosip/idrepository/vid/service/impl/NotificationServiceTest.java
new file mode 100644
index 000000000..f6085e66e
--- /dev/null
+++ b/id-repository/id-repository-vid-service/src/test/java/io/mosip/idrepository/vid/service/impl/NotificationServiceTest.java
@@ -0,0 +1,176 @@
+package io.mosip.idrepository.vid.service.impl;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.io.IOUtils;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.springframework.core.env.Environment;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import io.mosip.idrepository.core.exception.IdRepoAppException;
+import io.mosip.idrepository.core.helper.AuditHelper;
+import io.mosip.idrepository.core.helper.RestHelper;
+import io.mosip.idrepository.vid.dto.NotificationResponseDTO;
+import io.mosip.idrepository.vid.dto.TemplateDto;
+import io.mosip.idrepository.vid.dto.TemplateResponseDto;
+import io.mosip.idrepository.vid.util.JsonUtil;
+import io.mosip.idrepository.vid.util.Utility;
+import io.mosip.kernel.core.http.ResponseWrapper;
+import io.mosip.kernel.core.templatemanager.spi.TemplateManager;
+
+@RunWith(PowerMockRunner.class)
+@PowerMockIgnore({ "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*" })
+@PrepareForTest({ JsonUtil.class, IOUtils.class, HashSet.class })
+public class NotificationServiceTest {
+
+ @InjectMocks
+ private NotificationService notificationService;
+
+ @Mock
+ private Utility utility;
+
+ @Mock
+ private Environment env;
+
+ @Mock
+ private AuditHelper audit;
+
+ @Mock
+ RestHelper restHelper;
+
+ @Mock
+ private TemplateManager templateManager;
+
+ @Mock
+ private Map mailingAttributes;
+ private ResponseWrapper smsNotificationResponse;
+
+ private static final String EMAILNOTIFIER = "EMAILNOTIFIER";
+ private static final String SMS_EMAIL_SUCCESS = "Notification has been sent to the provided contact detail(s)";
+ private static final String SMS_SUCCESS = "Notification has been sent to the provided contact phone number";
+ private static final String EMAIL_SUCCESS = "Notification has been sent to the provided email ";
+
+ @Before
+ public void setUp() throws Exception {
+ Map additionalAttributes = new HashMap<>();
+ additionalAttributes.put("RID", "10008200070004420191203104356");
+ mailingAttributes = new HashMap();
+ mailingAttributes.put("fullName_eng", "Test");
+ mailingAttributes.put("fullName_ara", "Test");
+ mailingAttributes.put("phone", "9876543210");
+ mailingAttributes.put("email", "test@test.com");
+ Set templateLangauges = new HashSet();
+ templateLangauges.add("eng");
+ templateLangauges.add("ara");
+ ReflectionTestUtils.setField(notificationService, "notificationEmails", "test@test.com|test1@test1.com");
+ Mockito.when(utility.getPhoneAttribute()).thenReturn("phone");
+ Mockito.when(utility.getEmailAttribute()).thenReturn("email");
+ String vid = ("6392586435291409");
+ boolean isSMSSent = true;
+ boolean isEmailSent = true;
+ LocalDate today = LocalDate.now();
+ LocalDate expiryDate = today.plusDays(1);
+ Mockito.when(env.getProperty(EMAILNOTIFIER)).thenReturn("https://int.mosip.io/template/email");
+ ReflectionTestUtils.setField(notificationService, "emailRegex",
+ "^[\\w-\\+]+(\\.[\\w]+)*@[\\w-]+(\\.[\\w]+)*(\\.[a-zA-Z]{2,})$");
+ ReflectionTestUtils.setField(notificationService, "phoneRegex", "^([6-9]{1})([0-9]{9})$");
+ ResponseWrapper primaryLangResp = new ResponseWrapper<>();
+ TemplateResponseDto primaryTemplateResp = new TemplateResponseDto();
+ TemplateDto primaryTemplateDto = new TemplateDto();
+ primaryTemplateDto.setDescription("re print uin");
+ primaryTemplateDto.setFileText(
+ "Hi $name_eng,Your request for \"Reprint Of UIN\" has been successfully placed. Your RID (Req Number) is $RID.");
+ List primaryTemplateList = new ArrayList<>();
+ primaryTemplateList.add(primaryTemplateDto);
+ primaryTemplateResp.setTemplates(primaryTemplateList);
+ primaryLangResp.setResponse(primaryTemplateResp);
+ Mockito.when(restHelper.getApi(Mockito.any(), Mockito.any(), Mockito.anyString(), Mockito.any(),
+ Mockito.any(Class.class))).thenReturn(primaryLangResp);
+
+ String primaryTemplatetext = "Hi Test,Your request for \"Reprint Of UIN\" has been successfully placed. Your RID (Req Number) is 10008200070004420191203104356.";
+ InputStream primaryIs = new ByteArrayInputStream(primaryTemplatetext.getBytes(StandardCharsets.UTF_8));
+ Mockito.when(templateManager.merge(Mockito.any(), Mockito.any())).thenReturn(primaryIs);
+ smsNotificationResponse = new ResponseWrapper<>();
+ NotificationResponseDTO notificationResp = new NotificationResponseDTO();
+ notificationResp.setMessage("Notification has been sent to provided contact details");
+ notificationResp.setStatus("success");
+ smsNotificationResponse.setResponse(notificationResp);
+ Mockito.when(restHelper.postApi(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(Class.class)))
+ .thenReturn(smsNotificationResponse);
+ }
+
+ @Test
+ public void sendNotificationTest() throws Exception, IdRepoAppException, IOException {
+ Mockito.when(utility.getMailingAttributes(Mockito.any(), Mockito.any())).thenReturn(mailingAttributes);
+ LocalDate today = LocalDate.now();
+ LocalDate expiryDate = today.plusDays(1);
+ NotificationResponseDTO response = notificationService.sendNotification("6392586435291409", true, true,
+ expiryDate);
+ assertEquals(SMS_EMAIL_SUCCESS, response.getMessage());
+
+ }
+
+ @Test
+ public void sendEmailNotificationTest() throws Exception, IdRepoAppException, IOException {
+ LocalDate today = LocalDate.now();
+ LocalDate expiryDate = today.plusDays(1);
+ mailingAttributes = new HashMap();
+ mailingAttributes.put("fullName_eng", "Test");
+ mailingAttributes.put("fullName_ara", "Test");
+ mailingAttributes.put("phone", null);
+ mailingAttributes.put("email", "test@test.com");
+ Mockito.when(utility.getMailingAttributes(Mockito.any(), Mockito.any())).thenReturn(mailingAttributes);
+ NotificationResponseDTO response = notificationService.sendNotification("6392586435291409", false, true,
+ expiryDate);
+ assertEquals(EMAIL_SUCCESS, response.getMessage());
+
+ }
+
+ @Test
+ public void sendSMSNotificationTest() throws Exception, IdRepoAppException, IOException {
+ LocalDate today = LocalDate.now();
+ LocalDate expiryDate = today.plusDays(1);
+ mailingAttributes = new HashMap();
+ mailingAttributes.put("fullName_eng", "Test");
+ mailingAttributes.put("fullName_ara", "Test");
+ mailingAttributes.put("phone", "9876543210");
+ mailingAttributes.put("email", null);
+ Mockito.when(utility.getMailingAttributes(Mockito.any(), Mockito.any())).thenReturn(mailingAttributes);
+ NotificationResponseDTO response = notificationService.sendNotification("6392586435291409", true, false,
+ expiryDate);
+ assertEquals(SMS_SUCCESS, response.getMessage());
+
+ }
+
+ @Test(expected = IdRepoAppException.class)
+ public void getTemplateNullResponseTest() throws IdRepoAppException {
+ LocalDate today = LocalDate.now();
+ LocalDate expiryDate = today.plusDays(1);
+ ReflectionTestUtils.setField(notificationService, "emailRegex", "");
+ ReflectionTestUtils.setField(notificationService, "phoneRegex", "");
+ Mockito.when(restHelper.getApi(Mockito.any(), Mockito.any(), Mockito.anyString(), Mockito.any(),
+ Mockito.any(Class.class))).thenReturn(null);
+ notificationService.sendNotification("6392586435291409", false, false, expiryDate);
+ }
+
+}