diff --git a/pom.xml b/pom.xml index 34b80ea..b13edb5 100644 --- a/pom.xml +++ b/pom.xml @@ -72,6 +72,12 @@ + + junit + junit + 4.13.2 + test + org.junit.vintage junit-vintage-engine diff --git a/src/main/java/DigitalCardControllerTest.java b/src/main/java/DigitalCardControllerTest.java new file mode 100644 index 0000000..2c7a49d --- /dev/null +++ b/src/main/java/DigitalCardControllerTest.java @@ -0,0 +1,102 @@ +package io.mosip.digitalcard.test.controller; + +import io.mosip.digitalcard.controller.DigitalCardController; +import io.mosip.digitalcard.dto.DataShareResponseDto; +import io.mosip.digitalcard.dto.DigitalCardStatusResponseDto; +import io.mosip.digitalcard.service.DigitalCardService; +import io.mosip.digitalcard.test.TestBootApplication; +import io.mosip.kernel.core.http.ResponseWrapper; +import io.mosip.kernel.core.websub.model.Event; +import io.mosip.kernel.core.websub.model.EventModel; +import io.mosip.kernel.core.websub.model.Type; +import org.jetbrains.annotations.NotNull; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.boot.test.context.SpringBootTest; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import java.util.HashMap; +import java.util.Map; +import org.springframework.core.env.Environment; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; +import static org.springframework.test.util.AssertionErrors.assertEquals; + +@SpringBootTest(classes = TestBootApplication.class) +@RunWith(MockitoJUnitRunner.class) +public class DigitalCardControllerTest { + @InjectMocks + private DigitalCardController digitalCardController; + @Mock + private DigitalCardService digitalCardService; + @Mock + private Environment environment; + @Test + public void handleIdentityCreateEventTest(){ + EventModel eventModel = getEventModel(); + doNothing().when(digitalCardService).initiateCredentialRequest(anyString(), anyString()); + ResponseEntity responseEntity = digitalCardController.handleIdentityCreateEvent(eventModel); + assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + @Test + public void testHandleIdentityUpdateEvent_Success() { + EventModel eventModel = getEventModel(); + doNothing().when(digitalCardService).initiateCredentialRequest(anyString(), anyString()); + ResponseEntity responseEntity = digitalCardController.handleIdentityUpdateEvent(eventModel); + assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK); + } + @Test + public void testHandleIdentityUpdateEvent_Exception() { + EventModel eventModel = getEventModel(); + ResponseEntity responseEntity = digitalCardController.handleIdentityUpdateEvent(eventModel); + assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + @NotNull + private static EventModel getEventModel() { + EventModel eventModel=new EventModel(); + Event event=new Event(); + event.setId("113534"); + Type type=new Type(); + type.setName("rwctw"); + type.setNamespace("huea"); + Map data = new HashMap<>(); + data.put("registration_id", "test_registration_id"); + data.put("id_hash", "test_id_hash"); + event.setData(data); + event.setType(type); + event.setTimestamp("211"); + event.setTransactionId("edfvgghdfghjdfghj"); + event.setDataShareUri("dfgwyyw"); + eventModel.setEvent(event); + eventModel.setPublisher("ytft"); + eventModel.setPublishedOn("yguygyug"); + eventModel.setTopic("fgwqdtwdqv"); + return eventModel; + } + @Test + public void credentialEventTest(){ + EventModel eventModel = getEventModel(); + ResponseEntity responseEntity = digitalCardController.credentialEvent(eventModel); + assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK); + } + @Test + public void getDigitalCardTest(){ + String rid = "123456"; + DigitalCardStatusResponseDto digitalCardStatusResponseDto = new DigitalCardStatusResponseDto(); + digitalCardStatusResponseDto.setStatusCode("123"); + digitalCardStatusResponseDto.setUrl("url"); + digitalCardStatusResponseDto.setId("id_121"); + ResponseWrapper expectedResponse = new DataShareResponseDto(); + expectedResponse.setResponse(digitalCardStatusResponseDto); + when(digitalCardService.getDigitalCard(rid)).thenReturn(digitalCardStatusResponseDto); + ResponseWrapper actualResponse = digitalCardController.getDigitalCard(rid); + assertEquals(expectedResponse.getResponse().getId(), actualResponse.getResponse().getStatusCode(), expectedResponse.getResponse().getStatusCode()); + } +} \ No newline at end of file diff --git a/src/test/test/java/io/mosip/digitalcard/test/TestBootApplication.java b/src/test/test/java/io/mosip/digitalcard/test/TestBootApplication.java new file mode 100644 index 0000000..b810dc0 --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/TestBootApplication.java @@ -0,0 +1,19 @@ +package io.mosip.digitalcard.test; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableAsync; + + +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) + +@EnableAsync +@EnableCaching +public class TestBootApplication { + +public static void main(String... args) { + SpringApplication.run(TestBootApplication.class, args); +} +} diff --git a/src/test/test/java/io/mosip/digitalcard/test/config/SchedulingConfigurerConfigurationTest.java b/src/test/test/java/io/mosip/digitalcard/test/config/SchedulingConfigurerConfigurationTest.java new file mode 100644 index 0000000..7830f14 --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/config/SchedulingConfigurerConfigurationTest.java @@ -0,0 +1,33 @@ +package io.mosip.digitalcard.test.config; + +import io.mosip.digitalcard.config.SchedulingConfigurerConfiguration; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +@RunWith(MockitoJUnitRunner.class) +public class SchedulingConfigurerConfigurationTest { + + @InjectMocks + private SchedulingConfigurerConfiguration schedulingConfigurerConfiguration; + + @Mock + private ScheduledTaskRegistrar taskRegistrar; + + @Test + public void testConfigureTasks() { + schedulingConfigurerConfiguration.configureTasks(taskRegistrar); + + verify(taskRegistrar, times(1)).setTaskScheduler(any(ThreadPoolTaskScheduler.class)); + + } + +} diff --git a/src/test/test/java/io/mosip/digitalcard/test/controller/DigitalCardControllerTest.java b/src/test/test/java/io/mosip/digitalcard/test/controller/DigitalCardControllerTest.java new file mode 100644 index 0000000..80cd3ab --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/controller/DigitalCardControllerTest.java @@ -0,0 +1,98 @@ +package io.mosip.digitalcard.test.controller; + +import io.mosip.digitalcard.controller.DigitalCardController; +import io.mosip.digitalcard.dto.DataShareResponseDto; +import io.mosip.digitalcard.dto.DigitalCardStatusResponseDto; +import io.mosip.digitalcard.service.DigitalCardService; +import io.mosip.digitalcard.test.TestBootApplication; +import io.mosip.kernel.core.http.ResponseWrapper; +import io.mosip.kernel.core.websub.model.Event; +import io.mosip.kernel.core.websub.model.EventModel; +import io.mosip.kernel.core.websub.model.Type; +import jakarta.validation.constraints.NotNull; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.boot.test.context.SpringBootTest; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import java.util.HashMap; +import java.util.Map; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; +import static org.springframework.test.util.AssertionErrors.assertEquals; + +@SpringBootTest(classes = TestBootApplication.class) +@RunWith(MockitoJUnitRunner.class) +public class DigitalCardControllerTest { + + @InjectMocks + private DigitalCardController digitalCardController; + + @Mock + private DigitalCardService digitalCardService; + + @Test + public void handleIdentityCreateEventTest(){ + EventModel eventModel = getEventModel(); + doNothing().when(digitalCardService).initiateCredentialRequest(anyString(), anyString()); + ResponseEntity responseEntity = digitalCardController.handleIdentityCreateEvent(eventModel); + assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + @Test + public void testHandleIdentityUpdateEvent_Success() { + EventModel eventModel = getEventModel(); + doNothing().when(digitalCardService).initiateCredentialRequest(anyString(), anyString()); + ResponseEntity responseEntity = digitalCardController.handleIdentityUpdateEvent(eventModel); + assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + @Test + public void testHandleIdentityUpdateEvent_Exception() { + EventModel eventModel = getEventModel(); + ResponseEntity responseEntity = digitalCardController.handleIdentityUpdateEvent(eventModel); + assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + @NotNull + private static EventModel getEventModel() { + EventModel eventModel=new EventModel(); + Event event=new Event(); + event.setId("113534"); + Type type=new Type(); + type.setName("rwctw"); + type.setNamespace("huea"); + Map data = new HashMap<>(); + data.put("registration_id", "test_registration_id"); + data.put("id_hash", "test_id_hash"); + event.setData(data); + event.setType(type); + event.setTimestamp("211"); + event.setTransactionId("edfvgghdfghjdfghj"); + event.setDataShareUri("dfgwyyw"); + eventModel.setEvent(event); + eventModel.setPublisher("ytft"); + eventModel.setPublishedOn("yguygyug"); + eventModel.setTopic("fgwqdtwdqv"); + return eventModel; + } + + @Test + public void getDigitalCardTest(){ + String rid = "123456"; + DigitalCardStatusResponseDto digitalCardStatusResponseDto = new DigitalCardStatusResponseDto(); + digitalCardStatusResponseDto.setStatusCode("123"); + digitalCardStatusResponseDto.setUrl("url"); + digitalCardStatusResponseDto.setId("id_121"); + ResponseWrapper expectedResponse = new DataShareResponseDto(); + expectedResponse.setResponse(digitalCardStatusResponseDto); + when(digitalCardService.getDigitalCard(rid)).thenReturn(digitalCardStatusResponseDto); + ResponseWrapper actualResponse = digitalCardController.getDigitalCard(rid); + assertEquals(expectedResponse.getResponse().getId(), actualResponse.getResponse().getStatusCode(), expectedResponse.getResponse().getStatusCode()); + } +} \ No newline at end of file diff --git a/src/test/test/java/io/mosip/digitalcard/test/exception/ApiExceptionHandlerTest.java b/src/test/test/java/io/mosip/digitalcard/test/exception/ApiExceptionHandlerTest.java new file mode 100644 index 0000000..31e9f35 --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/exception/ApiExceptionHandlerTest.java @@ -0,0 +1,143 @@ +package io.mosip.digitalcard.test.exception; + +import io.mosip.digitalcard.constant.AuthAdapterErrorCode; +import io.mosip.digitalcard.constant.DigitalCardServiceErrorCodes; +import io.mosip.digitalcard.exception.ApiExceptionHandler; +import io.mosip.digitalcard.exception.DataNotFoundException; +import io.mosip.digitalcard.exception.DigitalCardServiceException; +import io.mosip.kernel.core.authmanager.exception.AuthNException; +import io.mosip.kernel.core.authmanager.exception.AuthZException; +import jakarta.servlet.http.HttpServletRequest; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.junit.MockitoJUnitRunner; + +import io.mosip.kernel.core.exception.ServiceError; +import io.mosip.kernel.core.http.ResponseWrapper; + +import org.junit.runner.RunWith; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.AccessDeniedException; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.*; +import static org.powermock.api.mockito.PowerMockito.mock; + +@RunWith(MockitoJUnitRunner.class) +public class ApiExceptionHandlerTest { + + @InjectMocks + private ApiExceptionHandler apiExceptionHandler; + + @Test + public void controlDataNotFoundExceptionTest()throws IOException { + ResponseEntity> actualControlDataServiceExceptionResult = apiExceptionHandler + .controlDataNotFoundException(null, new DataNotFoundException("DCS-408","PDF not found")); + assertTrue(actualControlDataServiceExceptionResult.hasBody()); + assertTrue(actualControlDataServiceExceptionResult.getHeaders().isEmpty()); + assertEquals(HttpStatus.OK, actualControlDataServiceExceptionResult.getStatusCode()); + List errors = actualControlDataServiceExceptionResult.getBody().getErrors(); + assertEquals(1, errors.size()); + ServiceError getResult = errors.get(0); + assertEquals("DCS-408", getResult.getErrorCode()); + assertEquals("PDF not found", getResult.getMessage()); + } + + @Test + public void controlDataNotFoundExceptionTest1()throws IOException { + ResponseEntity> actualControlDataServiceExceptionResult = apiExceptionHandler + .controlDataNotFoundException(null, new DigitalCardServiceException("DCS-408","PDF not found")); + assertTrue(actualControlDataServiceExceptionResult.hasBody()); + assertTrue(actualControlDataServiceExceptionResult.getHeaders().isEmpty()); + assertEquals(HttpStatus.OK, actualControlDataServiceExceptionResult.getStatusCode()); + List errors = actualControlDataServiceExceptionResult.getBody().getErrors(); + assertEquals(1, errors.size()); + ServiceError getResult = errors.get(0); + assertEquals("DCS-011", getResult.getErrorCode()); + assertEquals("PDF not found", getResult.getMessage()); + } + + @Test + public void testOnAccessDeniedException() throws IOException { + HttpServletRequest httpServletRequest = mock(HttpServletRequest.class); + AccessDeniedException accessDeniedException = new AccessDeniedException("Access denied"); + ResponseEntity> responseEntity = apiExceptionHandler.onAccessDeniedException(httpServletRequest, accessDeniedException); + + assertEquals(HttpStatus.FORBIDDEN, responseEntity.getStatusCode()); + + ResponseWrapper responseBody = responseEntity.getBody(); + assertNotNull(responseBody); + assertNotNull(responseBody.getErrors()); + assertEquals(1, responseBody.getErrors().size()); + + ServiceError serviceError = responseBody.getErrors().get(0); + assertEquals(AuthAdapterErrorCode.FORBIDDEN.getErrorCode(), serviceError.getErrorCode()); + } + + @Test + public void testOnAuthZException() throws IOException { + HttpServletRequest httpServletRequest = mock(HttpServletRequest.class); + + List serviceErrors = new ArrayList<>(); + serviceErrors.add(new ServiceError(AuthAdapterErrorCode.FORBIDDEN.getErrorCode(), + AuthAdapterErrorCode.FORBIDDEN.getErrorMessage())); + + AuthZException authZException = new AuthZException(serviceErrors); + + ResponseEntity> responseEntity = apiExceptionHandler.onAuthZException(httpServletRequest, authZException); + + assertEquals(HttpStatus.FORBIDDEN, responseEntity.getStatusCode()); + + ResponseWrapper responseBody = responseEntity.getBody(); + assertNotNull(responseBody); + assertNotNull(responseBody.getErrors()); + assertEquals(1, responseBody.getErrors().size()); + + ServiceError serviceError = responseBody.getErrors().get(0); + assertEquals(AuthAdapterErrorCode.FORBIDDEN.getErrorCode(), serviceError.getErrorCode()); + } + + @Test + public void testOnAuthNException() throws IOException { + HttpServletRequest httpServletRequest = mock(HttpServletRequest.class); + List serviceErrors = new ArrayList<>(); + serviceErrors.add(new ServiceError(AuthAdapterErrorCode.UNAUTHORIZED.getErrorCode(), + AuthAdapterErrorCode.UNAUTHORIZED.getErrorMessage())); + + AuthNException authNException = new AuthNException(serviceErrors); + + ResponseEntity> responseEntity = apiExceptionHandler.onAuthNException(httpServletRequest, authNException); + + assertEquals(HttpStatus.UNAUTHORIZED, responseEntity.getStatusCode()); + + ResponseWrapper responseBody = responseEntity.getBody(); + assertNotNull(responseBody); + assertNotNull(responseBody.getErrors()); + assertEquals(1, responseBody.getErrors().size()); + + ServiceError serviceError = responseBody.getErrors().get(0); + assertEquals(AuthAdapterErrorCode.UNAUTHORIZED.getErrorCode(), serviceError.getErrorCode()); + } + + @Test + public void testDefaultErrorHandler() throws IOException { + HttpServletRequest httpServletRequest = mock(HttpServletRequest.class); + Exception exception = new Exception("An unexpected error occurred"); + ResponseEntity> responseEntity = apiExceptionHandler.defaultErrorHandler(httpServletRequest, exception); + + assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); + + ResponseWrapper responseBody = responseEntity.getBody(); + assertNotNull(responseBody); + assertNotNull(responseBody.getErrors()); + assertEquals(1, responseBody.getErrors().size()); + + ServiceError serviceError = responseBody.getErrors().get(0); + assertEquals(DigitalCardServiceErrorCodes.DIGITAL_CARD_NOT_GENERATED.getErrorCode(), serviceError.getErrorCode()); + } + +} diff --git a/src/test/test/java/io/mosip/digitalcard/test/service/DigitalCardServiceTest.java b/src/test/test/java/io/mosip/digitalcard/test/service/DigitalCardServiceTest.java new file mode 100644 index 0000000..ea326af --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/service/DigitalCardServiceTest.java @@ -0,0 +1,320 @@ +package io.mosip.digitalcard.test.service; + +import io.mosip.digitalcard.constant.DigitalCardServiceErrorCodes; +import io.mosip.digitalcard.controller.DigitalCardController; +import io.mosip.digitalcard.dto.*; +import io.mosip.digitalcard.entity.DigitalCardTransactionEntity; +import io.mosip.digitalcard.exception.DigitalCardServiceException; +import io.mosip.digitalcard.repositories.DigitalCardTransactionRepository; +import io.mosip.digitalcard.service.CardGeneratorService; +import io.mosip.digitalcard.service.impl.DigitalCardServiceImpl; +import io.mosip.digitalcard.test.TestBootApplication; +import io.mosip.digitalcard.util.*; +import io.mosip.digitalcard.websub.WebSubSubscriptionHelper; +import io.mosip.kernel.core.logger.spi.Logger; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.json.JSONObject; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.springframework.test.util.ReflectionTestUtils; + +@SpringBootTest(classes = TestBootApplication.class) +@RunWith(MockitoJUnitRunner.class) +public class DigitalCardServiceTest { + + @InjectMocks + DigitalCardServiceImpl digitalCardService; + + @Mock + private EncryptionUtil encryptionUtil; + + @Mock + private DigitalCardTransactionRepository digitalCardTransactionRepository; + + @Mock + private CredentialUtil credentialUtil; + + @Mock + private WebSubSubscriptionHelper webSubSubscriptionHelper; + + @Mock + Logger logger = DigitalCardRepoLogger.getLogger(DigitalCardController.class); + + @Mock + private CardGeneratorService pdfCardServiceImpl; + + @Mock + private DataShareUtil dataShareUtil; + private String rid = "testRid"; + private String partnerId = "partnerId"; + private String credentialType = "credentialType"; + private boolean isInitiateFlag = true; + @Value("${mosip.digitalcard.datashare.policy.id}") + private String dataSharePolicyId; + @Value("${mosip.digitalcard.datashare.partner.id}") + private String dataSharePartnerId; + @Value("${mosip.digitalcard.websub.publish.topic:CREDENTIAL_STATUS_UPDATE}") + private String topic; + @Value("${mosip.digitalcard.uincard.password}") + private String digitalCardPassword; + + @Test + public void generateDigitalCardTest() throws Exception { + String credential="encryptedCredential"; + String credentialType="c_type"; + String eventId="54154f54"; + String transactionId="de5fefe673r"; + Map additionalAttributes = new HashMap<>(); + + boolean verifyCredentialsFlag = false; + boolean isPasswordProtected = true; + + String decryptedCredential = "{ \"credentialSubject\": { \"id\": \"12345\" } }"; + JSONObject jsonObject = new JSONObject(decryptedCredential); + JSONObject decryptedCredentialJson = jsonObject.getJSONObject("credentialSubject"); + System.out.println(decryptedCredentialJson); + byte[] pdfBytes = new byte[]{1, 2, 3}; + + ReflectionTestUtils.setField(digitalCardService, "verifyCredentialsFlag", verifyCredentialsFlag); + ReflectionTestUtils.setField(digitalCardService, "isPasswordProtected", isPasswordProtected); + + DigitalCardServiceException exception = assertThrows(DigitalCardServiceException.class, () -> { + ReflectionTestUtils.invokeMethod(digitalCardService, "generateDigitalCard", credential, credentialType, null, eventId, transactionId, additionalAttributes); + }); + + assertEquals("DCS-011 --> Error while generating PDF for Digital Card", exception.getMessage()); + assertEquals(DigitalCardServiceErrorCodes.DATASHARE_EXCEPTION.getErrorCode()+" --> "+DigitalCardServiceErrorCodes.DIGITAL_CARD_NOT_GENERATED.getErrorMessage(), exception.getMessage()); + try { + digitalCardService.generateDigitalCard(credential, credentialType, null, eventId, transactionId, additionalAttributes); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + @Test + public void testGenerateDigitalCard_Failure_VerificationFailed() throws Exception { + String credential = "encryptedCredential"; + String decryptedCredential = "{ \"credentialSubject\": { \"id\": \"12345\" } }"; + String credentialType = "someType"; + String dataShareUrl = null; + String eventId = "eventId"; + String transactionId = "transactionId"; + Map additionalAttributes = new HashMap<>(); + + when(encryptionUtil.decryptData(credential)).thenReturn(decryptedCredential); + + JSONObject jsonObject = new JSONObject(decryptedCredential); + JSONObject decryptedCredentialJson = jsonObject.getJSONObject("credentialSubject"); + + assertThrows(DigitalCardServiceException.class, () -> { + ReflectionTestUtils.invokeMethod(digitalCardService, "generateDigitalCard", credential, credentialType, dataShareUrl, eventId, transactionId, additionalAttributes); + }); + + verify(pdfCardServiceImpl, never()).generateCard(any(), anyString(), anyString(), anyMap()); + verify(webSubSubscriptionHelper, never()).digitalCardStatusUpdateEvent(anyString(), any()); + } + + @Test + public void testGetDigitalCard_Success() { + DigitalCardTransactionEntity entity = new DigitalCardTransactionEntity(); + entity.setrid(rid); + entity.setStatusCode("200"); + entity.setDataShareUrl("http://example.com"); + + when(digitalCardTransactionRepository.findByRID(rid)).thenReturn(entity); + + DigitalCardStatusResponseDto response = digitalCardService.getDigitalCard(rid); + + assertNotNull(response); + assertEquals(rid, response.getId()); + assertEquals("200", response.getStatusCode()); + assertEquals("http://example.com", response.getUrl()); + } + + private void setPrivateField(Object target, String fieldName, Object value) throws Exception { + Field field = target.getClass().getDeclaredField(fieldName); + ((Field) field).setAccessible(true); + field.set(target, value); + } + + @Test + public void testGetDigitalCard_InitiateFlagTrue() throws Exception { + setPrivateField(digitalCardService, "isInitiateFlag", true); + + when(digitalCardTransactionRepository.findByRID(rid)).thenReturn(null); + + CredentialResponse credentialResponse = new CredentialResponse(); + + when(credentialUtil.reqCredential(any(CredentialRequestDto.class))).thenReturn(credentialResponse); + + try { + digitalCardService.getDigitalCard(rid); + fail("Expected DigitalCardServiceException"); + } catch (DigitalCardServiceException e) { + assertEquals(DigitalCardServiceErrorCodes.DATASHARE_EXCEPTION.getErrorCode(), e.getErrorCode()); + } + + verify(credentialUtil).reqCredential(any(CredentialRequestDto.class)); + } + + @Test(expected = DigitalCardServiceException.class) + public void testInitiateCredentialRequest_DigitalCardServiceException() throws Exception { + String rid = "testRid"; + String ridHash = "testRidHash"; + + when(credentialUtil.reqCredential(any(CredentialRequestDto.class))).thenThrow(new DigitalCardServiceException("Error")); + + digitalCardService.initiateCredentialRequest(rid, ridHash); + verify(logger).error(anyString(), any(DigitalCardServiceException.class)); + } + + @Test + public void saveTransactionDetailsTest() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + CredentialResponse credentialResponse=new CredentialResponse(); + credentialResponse.setId("45564"); + credentialResponse.setRequestId("ft656ft"); + String idHash="id_hash"; + String rid = "mockedRid"; + + DigitalCardTransactionEntity digitalCardEntity=new DigitalCardTransactionEntity(); + digitalCardEntity.setrid(rid); + digitalCardEntity.setrid(credentialResponse.getId()); + digitalCardEntity.setUinSaltedHash(idHash); + digitalCardEntity.setCredentialId(credentialResponse.getRequestId()); + digitalCardEntity.setCreateDateTime(LocalDateTime.now()); + digitalCardEntity.setCreatedBy(Utility.getUser()); + digitalCardEntity.setStatusCode("NEW"); + + Method saveTransactionDetailsMethod = DigitalCardServiceImpl.class.getDeclaredMethod("saveTransactionDetails", CredentialResponse.class, String.class); + ((Method) saveTransactionDetailsMethod).setAccessible(true); + + saveTransactionDetailsMethod.invoke(digitalCardService, credentialResponse, idHash); + } + + @Test + public void testDigitalCardStatusUpdate_NewTransaction() throws Exception { + byte[] data = new byte[]{1, 2, 3, 4}; + String dataSharePolicyId="mpolicy-default-digitalcard"; + String dataSharePartnerId="mpartner-default-digitalcard"; + String requestId = UUID.randomUUID().toString(); + String credentialType = "credentialType"; + String rid = "sampleRID"; + String topic = "sampleTopic"; + + ReflectionTestUtils.setField(digitalCardService, "dataSharePolicyId", dataSharePolicyId); + ReflectionTestUtils.setField(digitalCardService, "dataSharePartnerId", dataSharePartnerId); + + DataShareDto dataShareDto = new DataShareDto(); + dataShareDto.setUrl("https://gsjdg"); + dataShareDto.setSignature("sign"); + dataShareDto.setValidForInMinutes(5); + dataShareDto.setPolicyId("P121313"); + dataShareDto.setSubscriberId("SUB123"); + dataShareDto.setTransactionsAllowed(10); + + DigitalCardTransactionEntity digitalCardTransactionEntity = new DigitalCardTransactionEntity(); + digitalCardTransactionEntity.setrid(rid); + digitalCardTransactionEntity.setCreateDateTime(LocalDateTime.now()); + digitalCardTransactionEntity.setCreatedBy("testUser"); + digitalCardTransactionEntity.setDataShareUrl(dataShareDto.getUrl()); + digitalCardTransactionEntity.setStatusCode("AVAILABLE"); + + when(dataShareUtil.getDataShare(any(byte[].class), anyString(), anyString())).thenReturn(dataShareDto); + when(digitalCardTransactionRepository.findByRID(anyString())).thenReturn(null); + + ReflectionTestUtils.invokeMethod(digitalCardService, "digitalCardStatusUpdate", requestId, data, credentialType, rid); + + verify(dataShareUtil).getDataShare(eq(data), anyString(), anyString()); + verify(digitalCardTransactionRepository).findByRID(eq(rid)); + verify(digitalCardTransactionRepository).save(any(DigitalCardTransactionEntity.class)); + } + + @Test + public void testGetRid() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + Method method = DigitalCardServiceImpl.class.getDeclaredMethod("getRid", Object.class); + method.setAccessible(true); + Object id = "http://example.com/credentials/123"; + String result = (String) method.invoke(digitalCardService, id); + + assertEquals("123", result); + } + + @Test + public void getPasswordTest() throws NoSuchMethodException { + Method getPasswordMethod = DigitalCardServiceImpl.class.getDeclaredMethod("getPassword", org.json.JSONObject.class); + getPasswordMethod.setAccessible(true); + assertThrows(Exception.class, () -> { + getPasswordMethod.invoke(digitalCardService, (JSONObject) null); + }); + } + + @Test + public void testGetPassword() throws Exception { + String digitalCardPassword="attr1|attr2|attr3"; + String templateLang="eng"; + String[] attributes = digitalCardPassword.split("\\|"); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("attr1", "value1"); + jsonObject.put("attr2", "value2"); + jsonObject.put("attr3", "value3"); + ReflectionTestUtils.setField(digitalCardService, "digitalCardPassword", digitalCardPassword); + ReflectionTestUtils.setField(digitalCardService, "templateLang", templateLang); + ReflectionTestUtils.invokeMethod(digitalCardService, "getPassword", jsonObject); + } + + @Test + public void getFormattedPasswordAttributeTestNew(){ + String password="hvhjeyeyd#hvhdv@"; + ReflectionTestUtils.invokeMethod(digitalCardService, "getFormattedPasswordAttribute", password); + } + + @Test + public void testGetFormattedPasswordAttribute_LengthThree() { + String password = "abc"; + String result = ReflectionTestUtils.invokeMethod(digitalCardService, "getFormattedPasswordAttribute", password); + assertEquals("abca", result); + } + + @Test + public void testGetFormattedPasswordAttribute_LengthTwo() { + String password = "ab"; + String result = ReflectionTestUtils.invokeMethod(digitalCardService, "getFormattedPasswordAttribute", password); + assertEquals("abab", result); + } + + @Test + public void testGetFormattedPasswordAttribute_LengthOne() { + String password = "a"; + String result = ReflectionTestUtils.invokeMethod(digitalCardService, "getFormattedPasswordAttribute", password); + assertEquals("aaaa", result); + } + + @Test + public void loginErrorDetailsTest(){ + String rid = "sampleRid"; + String errorMsg = "sampleErrorMsg"; + LocalDateTime currentTime = LocalDateTime.now(); + String user = "sampleUser"; + + digitalCardService.loginErrorDetails(rid, errorMsg); + } +} diff --git a/src/test/test/java/io/mosip/digitalcard/test/service/PDFCardServiceImplTest.java b/src/test/test/java/io/mosip/digitalcard/test/service/PDFCardServiceImplTest.java new file mode 100644 index 0000000..4e25948 --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/service/PDFCardServiceImplTest.java @@ -0,0 +1,204 @@ +package io.mosip.digitalcard.test.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.biometrics.util.ConvertRequestDto; +import io.mosip.digitalcard.constant.DigitalCardServiceErrorCodes; +import io.mosip.digitalcard.dto.SignatureResponseDto; +import io.mosip.digitalcard.exception.IdentityNotFoundException; +import io.mosip.digitalcard.service.impl.PDFCardServiceImpl; +import io.mosip.digitalcard.test.TestBootApplication; +import io.mosip.digitalcard.util.CbeffToBiometricUtil; +import io.mosip.digitalcard.util.RestClient; +import io.mosip.digitalcard.util.TemplateGenerator; +import io.mosip.kernel.biometrics.spi.CbeffUtil; +import io.mosip.kernel.core.http.ResponseWrapper; +import io.mosip.kernel.core.pdfgenerator.spi.PDFGenerator; +import io.mosip.kernel.core.qrcodegenerator.exception.QrcodeGenerationException; +import io.mosip.kernel.core.qrcodegenerator.spi.QrCodeGenerator; +import io.mosip.kernel.qrcode.generator.zxing.constant.QrVersion; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.util.ReflectionTestUtils; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.*; +import org.json.simple.JSONObject; + +import static org.junit.Assert.*; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.anyMap; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; +import static org.mockito.Mockito.verify; + +@SpringBootTest(classes = TestBootApplication.class) +@RunWith(MockitoJUnitRunner.class) +public class PDFCardServiceImplTest { + + @Mock + private ObjectMapper objectMapper; + + @InjectMocks + private PDFCardServiceImpl pdfCardService; + + @Mock + private TemplateGenerator templateGenerator; + + @Mock + private QrCodeGenerator qrCodeGenerator; + + @Mock + private PDFGenerator pdfGenerator; + + @Mock + private RestClient restApiClient; + + private static final String APPLICANT_PHOTO = "ApplicantPhoto"; + private static final String FACE = "Face"; + private static final String DATETIME_PATTERN ="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; + + @Mock + CbeffUtil cbeffutil; + + @Test + public void generateCardTest() throws Exception { + org.json.JSONObject decryptedCredentialJson = new org.json.JSONObject(); + decryptedCredentialJson.put("UIN", "testUIN"); + decryptedCredentialJson.put("biometrics", "sampleBiometricsData"); + boolean isPhotoSet=true; + decryptedCredentialJson.put("isPhotoSet",isPhotoSet); + String credentialType = "qrcode"; + String password = "testPassword"; + Map additionalAttributes = new HashMap<>(); + additionalAttributes.put("TEMPLATE_TYPE_CODE", "templateTypeCode"); + Map attributes = new LinkedHashMap<>(); + attributes.put("key","value"); + + String defaultTemplateTypeCode="RPR_UIN_CARD_TEMPLATE"; + ReflectionTestUtils.setField(pdfCardService, "defaultTemplateTypeCode", defaultTemplateTypeCode); + + String uin = decryptedCredentialJson.getString("UIN"); + + InputStream mockInputStream = mock(InputStream.class); + lenient().when(templateGenerator.getTemplate(anyString(), anyMap(), anyString())).thenReturn(mockInputStream); + + try { + byte[] result = pdfCardService.generateCard(decryptedCredentialJson, credentialType, password, additionalAttributes); + + assertNotNull(result); + verify(templateGenerator, times(1)).getTemplate(anyString(), anyMap(), anyString()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Test + public void setQrCodeTest() throws QrcodeGenerationException, IOException { + + String qrString = "{\"biometrics\":\"sampleBiometricsData\", \"otherKey\":\"otherValue\"}"; + Map attributes = new HashMap<>(); + attributes.put("xyz","cdcs"); + boolean isPhotoSet = true; + + JSONObject qrJsonObj = new JSONObject(); + qrJsonObj.put("biometrics", "sampleBiometricsData"); + qrJsonObj.put("otherKey", "otherValue"); + when(objectMapper.readValue(anyString(), eq(JSONObject.class))).thenReturn(qrJsonObj); + byte[] qrCodeBytes = "sampleQRCode".getBytes(); + when(qrCodeGenerator.generateQrCode(anyString(), any())).thenReturn(qrCodeBytes); + + ReflectionTestUtils.invokeMethod(pdfCardService, "setQrCode", qrString, attributes, isPhotoSet); + } + + @Test + public void testSetApplicantPhoto_NullInput() throws Exception { + String individualBio = null; + Map attributes = new HashMap<>(); + + String value = individualBio; + List subtype = new ArrayList<>(); + CbeffToBiometricUtil util = new CbeffToBiometricUtil(cbeffutil); + ConvertRequestDto convertRequestDto = new ConvertRequestDto(); + byte[] photoByte = util.getImageBytes(value, FACE, subtype); + convertRequestDto.setVersion("ISO19794_5_2011"); + convertRequestDto.setInputBytes(photoByte); + + Method setApplicantPhotoMethod = PDFCardServiceImpl.class.getDeclaredMethod("setApplicantPhoto",String.class, Map.class); + setApplicantPhotoMethod.setAccessible(true); + boolean isPhotoSet = (boolean) setApplicantPhotoMethod.invoke(pdfCardService, null, attributes); + + Field field = PDFCardServiceImpl.class.getDeclaredField("APPLICANT_PHOTO"); + field.setAccessible(true); + String applicantPhoto = (String) field.get(null); + + assertFalse(isPhotoSet); + assertFalse(attributes.containsKey(applicantPhoto)); + } + + + @Test + public void testSetTemplateAttributes_DemographicIdentityIsNull() { + Map attribute = new HashMap<>(); + IdentityNotFoundException thrown = assertThrows( + IdentityNotFoundException.class, + () -> ReflectionTestUtils.invokeMethod(pdfCardService, "setTemplateAttributes", null, attribute) + ); + + assertEquals(DigitalCardServiceErrorCodes.IDENTITY_NOT_FOUND.getErrorCode(), thrown.getErrorCode()); + } + + @Test + public void generateUinCardTest() throws IOException { + InputStream in = new ByteArrayInputStream(new byte[]{1, 2, 3, 4}); + String password = "samplePassword"; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + out.write(new byte[]{5, 6, 7, 8}); + + int lowerLeftX=73; + int lowerLeftY=100; + int upperRightX=300; + int upperRightY=300; + String reason="signing"; + + ReflectionTestUtils.setField(pdfCardService, "lowerLeftX", lowerLeftX); + ReflectionTestUtils.setField(pdfCardService, "lowerLeftY", lowerLeftY); + ReflectionTestUtils.setField(pdfCardService, "upperRightX", upperRightX); + ReflectionTestUtils.setField(pdfCardService, "upperRightY", upperRightY); + ReflectionTestUtils.setField(pdfCardService, "reason", reason); + + ReflectionTestUtils.invokeMethod(pdfCardService, "generateUinCard", in, password); + } + + @Test + public void testGenerateUinCard() throws Exception { + InputStream inputStream = new ByteArrayInputStream("pdf content".getBytes()); + String password = "testPassword"; + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + outputStream.write("pdf content".getBytes()); + + when(pdfGenerator.generate(any(InputStream.class))).thenReturn(outputStream); + SignatureResponseDto signatureResponseDto = new SignatureResponseDto(); + + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setResponse(signatureResponseDto); + + lenient().when(restApiClient.postApi(any(), any(), any(), any(), any(), any(), any())) + .thenReturn(responseWrapper); + lenient().when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + lenient().when(objectMapper.readValue(anyString(), eq(SignatureResponseDto.class))).thenReturn(signatureResponseDto); + + Method method = PDFCardServiceImpl.class.getDeclaredMethod("generateUinCard", InputStream.class, String.class); + method.setAccessible(true); + byte[] result = (byte[]) method.invoke(pdfCardService, inputStream, password); + } + +} diff --git a/src/test/test/java/io/mosip/digitalcard/test/util/CbeffToBiometricUtilTest.java b/src/test/test/java/io/mosip/digitalcard/test/util/CbeffToBiometricUtilTest.java new file mode 100644 index 0000000..101b261 --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/util/CbeffToBiometricUtilTest.java @@ -0,0 +1,99 @@ +package io.mosip.digitalcard.test.util; + +import io.mosip.digitalcard.util.CbeffToBiometricUtil; +import io.mosip.kernel.biometrics.constant.BiometricType; +import io.mosip.kernel.biometrics.entities.BIR; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.test.util.ReflectionTestUtils; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.hibernate.validator.internal.util.Contracts.assertTrue; +import static org.junit.Assert.assertArrayEquals; +import static org.powermock.api.mockito.PowerMockito.mock; + +@RunWith(MockitoJUnitRunner.class) +public class CbeffToBiometricUtilTest { + + @InjectMocks + CbeffToBiometricUtil cbeffToBiometricUtil; + + @Test + public void testGetImageBytes_Success() { + String cbeffFileString = "validCbeff"; + String type = "face"; + List subType = List.of("front"); + byte[] expectedPhotoBytes = new byte[]{1, 2, 3}; + + try { + byte[] actualPhotoBytes = cbeffToBiometricUtil.getImageBytes(cbeffFileString, type, subType); + assertArrayEquals(expectedPhotoBytes, actualPhotoBytes); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Test + public void testIsSubType_EqualLists() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException { + Method method = CbeffToBiometricUtil.class.getDeclaredMethod("isSubType", List.class, List.class); + ((Method) method).setAccessible(true); + + List list1 = Arrays.asList("A", "B", "C"); + List list2 = Arrays.asList("A", "B", "C"); + + boolean result = (boolean) method.invoke(cbeffToBiometricUtil, list1, list2); + + assertTrue(result, "The lists should be equal"); + } + + @Test + public void testIsSubType_true() throws Exception { + List subType = Arrays.asList("A", "B"); + List subTypeList = Arrays.asList("A", "B"); + + Method method = CbeffToBiometricUtil.class.getDeclaredMethod("isSubType", List.class, List.class); + method.setAccessible(true); + boolean result = (boolean) method.invoke(cbeffToBiometricUtil, subType, subTypeList); + } + + @Test + public void testIsBiometricType_Found() { + String type = "fingerprint"; + List biometricTypeList = new ArrayList<>(); + biometricTypeList.add(BiometricType.DNA); + biometricTypeList.add(BiometricType.IRIS); + + ReflectionTestUtils.invokeMethod(cbeffToBiometricUtil,"isBiometricType",type,biometricTypeList); + } + + @Test + public void testGetBIRDataFromXML_Success() throws Exception { + byte[] xmlBytes = "sample data".getBytes(); + List expectedBIRList = Arrays.asList(new BIR(), new BIR()); + + List actualBIRList = cbeffToBiometricUtil.getBIRDataFromXML(xmlBytes); + } + + @Test + public void testGetPhotoByTypeAndSubType_Found() throws Exception { + + BIR bir = mock(BIR.class); + + List birList = Arrays.asList(bir); + String type = "face"; + List subType = Arrays.asList("subtype1"); + + Method method = CbeffToBiometricUtil.class.getDeclaredMethod("getPhotoByTypeAndSubType", List.class, String.class, List.class); + method.setAccessible(true); + + byte[] actualPhoto = (byte[]) method.invoke(cbeffToBiometricUtil, birList, type, subType); + } + +} diff --git a/src/test/test/java/io/mosip/digitalcard/test/util/CredentialUtilTest.java b/src/test/test/java/io/mosip/digitalcard/test/util/CredentialUtilTest.java new file mode 100644 index 0000000..193bb4b --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/util/CredentialUtilTest.java @@ -0,0 +1,72 @@ +package io.mosip.digitalcard.test.util; + +import io.mosip.digitalcard.constant.ApiName; +import io.mosip.digitalcard.dto.CredentialRequestDto; +import io.mosip.digitalcard.dto.CredentialResponse; +import io.mosip.digitalcard.dto.CredentialStatusResponse; +import io.mosip.digitalcard.exception.ApisResourceAccessException; +import io.mosip.digitalcard.exception.DigitalCardServiceException; +import io.mosip.digitalcard.test.TestBootApplication; +import io.mosip.digitalcard.util.CredentialUtil; +import io.mosip.digitalcard.util.RestClient; +import io.mosip.kernel.core.http.RequestWrapper; +import io.mosip.kernel.core.http.ResponseWrapper; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.junit.Assert.assertThrows; +import static org.mockito.ArgumentMatchers.any; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.Mockito.lenient; +import static org.powermock.api.mockito.PowerMockito.when; + +@SpringBootTest(classes = TestBootApplication.class) +@RunWith(MockitoJUnitRunner.class) +public class CredentialUtilTest { + + @InjectMocks + CredentialUtil credentialUtil; + + @Mock + private RestClient restClient; + + String requestId="sampleRequestId"; + + @Test + public void reqCredentialTest() throws ApisResourceAccessException { + RequestWrapper requestDto = new RequestWrapper<>(); + CredentialRequestDto credentialRequestDto = new CredentialRequestDto(); + requestDto.setRequest(credentialRequestDto); + requestDto.setRequesttime(LocalDateTime.now()); + + ResponseWrapper responseDto = new ResponseWrapper<>(); + CredentialResponse expectedResponse = new CredentialResponse(); + responseDto.setResponse(expectedResponse); + + lenient().when(restClient.postApi(any(ApiName.class), any(), any(), any(), any(), any(RequestWrapper.class), any(Class.class))) + .thenReturn(responseDto); + + } + @Test + public void getStatusTest() { + List pathSegments = new ArrayList<>(); + pathSegments.add(requestId); + + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + CredentialStatusResponse expectedResponse = new CredentialStatusResponse(); + responseWrapper.setResponse(expectedResponse); + + assertThrows(DigitalCardServiceException.class, () -> { + credentialUtil.getStatus(requestId); + }); + } + +} diff --git a/src/test/test/java/io/mosip/digitalcard/test/util/DataShareUtilTest.java b/src/test/test/java/io/mosip/digitalcard/test/util/DataShareUtilTest.java new file mode 100644 index 0000000..45c1742 --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/util/DataShareUtilTest.java @@ -0,0 +1,36 @@ +package io.mosip.digitalcard.test.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.digitalcard.dto.DataShareDto; +import io.mosip.digitalcard.dto.DataShareResponseDto; +import io.mosip.digitalcard.util.DataShareUtil; +import io.mosip.digitalcard.util.DigitalCardRepoLogger; +import io.mosip.digitalcard.util.RestClient; +import io.mosip.kernel.core.logger.spi.Logger; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.core.env.Environment; + +import static org.powermock.api.mockito.PowerMockito.mock; + +@RunWith(MockitoJUnitRunner.class) +public class DataShareUtilTest { + + @InjectMocks + DataShareUtil dataShareUtil; + + @Test + public void testGetDataShareSuccess() throws Exception { + byte[] data = {1, 2, 3}; + String policyId = "policyId"; + String partnerId = "partnerId"; + DataShareResponseDto mockResponseDto = mock(DataShareResponseDto.class); + DataShareDto mockDataShareDto = mock(DataShareDto.class); + + DataShareDto result = dataShareUtil.getDataShare(data, "sacdc", "acacad"); + } + +} diff --git a/src/test/test/java/io/mosip/digitalcard/test/util/EncryptionUtilTest.java b/src/test/test/java/io/mosip/digitalcard/test/util/EncryptionUtilTest.java new file mode 100644 index 0000000..2d26436 --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/util/EncryptionUtilTest.java @@ -0,0 +1,52 @@ +package io.mosip.digitalcard.test.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.digitalcard.util.EncryptionUtil; +import io.mosip.digitalcard.util.RestClient; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.core.env.Environment; +import io.mosip.digitalcard.dto.CryptomanagerResponseDto; + +import static org.powermock.api.mockito.PowerMockito.mock; + +@RunWith(MockitoJUnitRunner.class) +public class EncryptionUtilTest { + + @InjectMocks + EncryptionUtil encryptionUtil; + + @Test + public void testDecryptDataTest() { + String dataToBedecrypted = "encryptedData"; + String responseData = "decryptedData"; + CryptomanagerResponseDto responseDto = new CryptomanagerResponseDto(); + + try { + String result = encryptionUtil.decryptData(dataToBedecrypted); + } catch (Exception e) { + e.printStackTrace(); + + } + } + + @Test + public void testDecryptData_Success() { + String dataToBeDecrypted = "encrypted_data"; + String expectedDecryptedData = "decrypted_data"; + + Environment mockEnv = mock(Environment.class); + RestClient mockRestClient = mock(RestClient.class); + ObjectMapper mockMapper = mock(ObjectMapper.class); + + try{ + String decryptedData = encryptionUtil.decryptData(dataToBeDecrypted); + } + catch (Exception e){ + e.printStackTrace(); + } + + } +} diff --git a/src/test/test/java/io/mosip/digitalcard/test/util/RestClientTest.java b/src/test/test/java/io/mosip/digitalcard/test/util/RestClientTest.java new file mode 100644 index 0000000..8865081 --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/util/RestClientTest.java @@ -0,0 +1,122 @@ +package io.mosip.digitalcard.test.util; + +import io.mosip.digitalcard.constant.ApiName; +import io.mosip.digitalcard.exception.ApisResourceAccessException; +import io.mosip.digitalcard.util.RestClient; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.core.env.Environment; +import org.springframework.web.client.RestTemplate; +import org.springframework.http.MediaType; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class RestClientTest { + + @InjectMocks + RestClient restClient; + + @Mock + Environment environment; + + @Mock + private RestTemplate restTemplate; + + @Test + public void postApiTest() throws ApisResourceAccessException { + ApiName apiName = ApiName.CREDENTIAL_STATUS_URL; + List pathSegments = Arrays.asList("segment1", "segment2"); + String queryParamName = "param1,param2"; + String queryParamValue = "value1,value2"; + MediaType mediaType = MediaType.APPLICATION_JSON; + Object requestType = new Object(); + Class responseClass = String.class; + + when(environment.getProperty(apiName.name())).thenReturn("http://localhost:8080"); + String expectedResponse = "response"; + when(restTemplate.postForObject(anyString(), any(), eq(responseClass))).thenReturn(expectedResponse); + RestClient client = Mockito.spy(restClient); + + String result = restClient.postApi(apiName, pathSegments, queryParamName, queryParamValue, mediaType, requestType, responseClass); + + assertNotNull(result); + assertEquals(expectedResponse, result); + + UriComponentsBuilder builder = UriComponentsBuilder.fromUriString("http://localhost:8080") + .pathSegment("segment1") + .pathSegment("segment2") + .queryParam("param1", "value1") + .queryParam("param2", "value2"); + String expectedUri = builder.toUriString(); + verify(restTemplate).postForObject(eq(expectedUri), any(), eq(responseClass)); + } + + @Test + public void testPostApi_noHostIpPort() throws ApisResourceAccessException { + ApiName apiName = ApiName.CREDENTIAL_STATUS_URL; + List pathSegments = Arrays.asList("segment1", "segment2"); + String queryParamName = "param1,param2"; + String queryParamValue = "value1,value2"; + MediaType mediaType = MediaType.APPLICATION_JSON; + Object requestType = new Object(); + Class responseClass = String.class; + + String result = restClient.postApi(apiName, pathSegments, queryParamName, queryParamValue, mediaType, requestType, responseClass); + + assertNull(result); + + verify(restTemplate, never()).postForObject(anyString(), any(), eq(responseClass)); + } + + @Test + public void testGetForObject_Success() throws Exception { + String url = "http://example.com/api/resource"; + String expectedResponse = "Expected response"; + when(restTemplate.getForObject(url, String.class)).thenReturn(expectedResponse); + + String actualResponse = restClient.getForObject(url, String.class); + + assertEquals(expectedResponse, actualResponse); + verify(restTemplate, times(1)).getForObject(url, String.class); + } + @Test + public void testGetForObject_Exception() { + String url = "http://example.com/api/resource"; + when(restTemplate.getForObject(url, String.class)).thenThrow(new RuntimeException("Test exception")); + + Exception exception = assertThrows(Exception.class, () -> { + restClient.getForObject(url, String.class); + }); + + assertEquals("java.lang.RuntimeException: Test exception", exception.getMessage()); + verify(restTemplate, times(1)).getForObject(url, String.class); + } + + @Test + public void testGetApi_ApiHostIpPortNull() throws Exception { + ApiName apiName=ApiName.CREDENTIAL_STATUS_URL; + List pathSegments = Arrays.asList("segment1", "segment2"); + String queryParamName = "param1,param2"; + String queryParamValue = "value1,value2"; + Class responseType=String.class; + + when(environment.getProperty(apiName.name())).thenReturn(null); + + String result = restClient.getApi(apiName, pathSegments, queryParamName, queryParamValue, responseType); + + assertNull(result); + verify(environment, times(1)).getProperty(apiName.name()); + verifyNoInteractions(restTemplate); // Ensure restTemplate is not called + } +} diff --git a/src/test/test/java/io/mosip/digitalcard/test/util/TemplateGeneratorTest.java b/src/test/test/java/io/mosip/digitalcard/test/util/TemplateGeneratorTest.java new file mode 100644 index 0000000..5c3cc59 --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/util/TemplateGeneratorTest.java @@ -0,0 +1,63 @@ +package io.mosip.digitalcard.test.util; + +import io.mosip.digitalcard.util.DigitalCardRepoLogger; +import io.mosip.digitalcard.util.TemplateGenerator; +import io.mosip.kernel.core.logger.spi.Logger; +import io.mosip.kernel.core.templatemanager.spi.TemplateManager; +import io.mosip.kernel.templatemanager.velocity.impl.TemplateManagerImpl; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.core.env.Environment; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.*; +import static org.powermock.api.mockito.PowerMockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class TemplateGeneratorTest { + + @InjectMocks + TemplateGenerator templateGenerator; + + @Mock + Environment environment; + + private static Logger printLogger = DigitalCardRepoLogger.getLogger(TemplateGenerator.class); + private String resourceLoader = "classpath"; + private String templatePath = "."; + private boolean cache = Boolean.TRUE; + private String defaultEncoding = StandardCharsets.UTF_8.name(); + + @Test + public void testGetTemplate_Success2() throws Exception { + String cardTemplate= "templateCard"; + Map attributes = new HashMap<>(); + + String encodedTemplate = Base64.getEncoder().encodeToString("template-content".getBytes()); + InputStream expectedStream = new ByteArrayInputStream("merged-content".getBytes()); + + when(environment.getProperty(cardTemplate)).thenReturn(encodedTemplate); + + InputStream actualStream = templateGenerator.getTemplate(cardTemplate, attributes, "eng"); + } + + @Test + public void testGetTemplateManager_Success() { + TemplateManager templateManager = templateGenerator.getTemplateManager(); + + assertNotNull(templateManager); + assertTrue(templateManager instanceof TemplateManagerImpl); + + } + +} diff --git a/src/test/test/java/io/mosip/digitalcard/test/util/UtilityTest.java b/src/test/test/java/io/mosip/digitalcard/test/util/UtilityTest.java new file mode 100644 index 0000000..38d0202 --- /dev/null +++ b/src/test/test/java/io/mosip/digitalcard/test/util/UtilityTest.java @@ -0,0 +1,114 @@ +package io.mosip.digitalcard.test.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.digitalcard.test.TestBootApplication; +import io.mosip.digitalcard.util.RestClient; +import io.mosip.digitalcard.util.Utility; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.util.ReflectionTestUtils; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashMap; + +import static org.mockito.Mockito.*; +import static org.powermock.api.mockito.PowerMockito.when; + +@SpringBootTest(classes = TestBootApplication.class) +@RunWith(MockitoJUnitRunner.class) +public class UtilityTest { + + @InjectMocks + Utility utility; + + @Mock + RestClient restClient; + + @Mock + ObjectMapper objectMapper; + + private static final Logger logger = LoggerFactory.getLogger(Utility.class); + @Value("${mosip.kernel.config.server.file.storage.uri}") + private String configServerFileStorageURL; + private String identityJson = "jsbcdbic"; + private String demographicIdentity = "jdbicbic"; + private String expectedJsonResponse = "{loadRegProcessorIdentityJson completed successfully}"; + + @Test + public void loadRegProcessorIdentityJsonTest() { + ReflectionTestUtils.invokeMethod(utility, "loadRegProcessorIdentityJson"); + } + + @Test + public void testGetIdentityMappingJson_WhenBlank_ShouldFetchFromService() throws Exception { + when(restClient.getForObject(configServerFileStorageURL + identityJson, String.class)) + .thenReturn(expectedJsonResponse); + String actualJsonResponse = utility.getIdentityMappingJson(configServerFileStorageURL, identityJson); + + verify(restClient, times(1)) + .getForObject(configServerFileStorageURL + identityJson, String.class); + } + + @Test + public void testGetMappingJsonObject_WhenBlank_ShouldFetchAndParseJson() throws Exception { + JSONObject actualJsonObject = utility.getMappingJsonObject(); + } + + @Test + public void testGetJSONObject_WhenKeyIsPresentAndValueIsLinkedHashMap_ShouldReturnJsonObject() { + LinkedHashMap linkedHashMap = new LinkedHashMap<>(); + linkedHashMap.put("key1", "value1"); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("identity", linkedHashMap); + + JSONObject result = utility.getJSONObject(jsonObject, "identity"); + } + + @Test + public void getJSONValueTest() { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("key1", "value1"); + + String result = utility.getJSONValue(jsonObject, "key1"); + } + + @Test + public void writeValueAsStringTest() throws IOException { + Object obj = new Object(); + String expectedJson = "{\"key\":\"value\"}"; + + when(objectMapper.writeValueAsString(obj)).thenReturn(expectedJson); + + String actualJson = utility.writeValueAsString(obj); + } + + @Test + public void getJSONArrayTest() { + ArrayList list = new ArrayList<>(Arrays.asList("value1", "value2", "value3")); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("key1", list); + + JSONArray jsonArray = utility.getJSONArray(jsonObject, "key1"); + } + + @Test + public void testGetJSONArray_WhenKeyExistsAndValueIsNull_ShouldReturnNull() { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("key3", null); + + JSONArray jsonArray = utility.getJSONArray(jsonObject, "key3"); + } + +}