Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -50,63 +50,118 @@
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.*;


public class AppModuleTest {

@Mock Application mockApplication;
@Mock Context mockContext;
@Mock CertificateManagerService certificateManagerService;
@Mock ClientCryptoManagerService clientCryptoManagerService;
@Mock CryptoManagerService cryptoManagerService;
@Mock IPacketCryptoService iPacketCryptoService;
@Mock ObjectMapper objectMapper;
@Mock ObjectAdapterService objectAdapterService;
@Mock PacketKeeper packetKeeper;
@Mock PacketManagerHelper packetManagerHelper;
@Mock PacketWriterService packetWriterService;
@Mock SyncRestService syncRestService;
@Mock MachineRepository machineRepository;
@Mock ReasonListRepository reasonListRepository;
@Mock RegistrationCenterRepository registrationCenterRepository;
@Mock DocumentTypeRepository documentTypeRepository;
@Mock ApplicantValidDocRepository applicantValidDocRepository;
@Mock TemplateRepository templateRepository;
@Mock DynamicFieldRepository dynamicFieldRepository;
@Mock LocationRepository locationRepository;
@Mock GlobalParamRepository globalParamRepository;
@Mock IdentitySchemaRepository identitySchemaRepository;
@Mock BlocklistedWordRepository blocklistedWordRepository;
@Mock SyncJobDefRepository syncJobDefRepository;
@Mock UserDetailRepository userDetailRepository;
@Mock LanguageRepository languageRepository;
@Mock UserRoleRepository userRoleRepository;
@Mock JobManagerService jobManagerService;
@Mock FileSignatureDao fileSignatureDao;
@Mock UserBiometricRepository userBiometricRepository;
@Mock RegistrationRepository registrationRepository;
@Mock KeyStoreRepository keyStoreRepository;
@Mock AuditManagerService auditManagerService;
@Mock AuditRepository auditRepository;
@Mock JobTransactionRepository jobTransactionRepository;
@Mock CertificateDBHelper certificateDBHelper;
@Mock CACertificateStoreRepository caCertificateStoreRepository;
@Mock DateUtil dateUtil;
@Mock PreRegistrationDataSyncDao preRegistrationDataSyncDao;
@Mock PreRegistrationDataSyncRepositoryDao preRegistrationDataSyncRepositoryDao;
@Mock PreRegZipHandlingService preRegZipHandlingService;
@Mock PreRegistrationList preRegistrationList;
@Mock
Application mockApplication;
@Mock
Context mockContext;
@Mock
CertificateManagerService certificateManagerService;
@Mock
ClientCryptoManagerService clientCryptoManagerService;
@Mock
CryptoManagerService cryptoManagerService;
@Mock
IPacketCryptoService iPacketCryptoService;
@Mock
ObjectMapper objectMapper;
@Mock
ObjectAdapterService objectAdapterService;
@Mock
PacketKeeper packetKeeper;
@Mock
PacketManagerHelper packetManagerHelper;
@Mock
PacketWriterService packetWriterService;
@Mock
SyncRestService syncRestService;
@Mock
MachineRepository machineRepository;
@Mock
ReasonListRepository reasonListRepository;
@Mock
RegistrationCenterRepository registrationCenterRepository;
@Mock
DocumentTypeRepository documentTypeRepository;
@Mock
ApplicantValidDocRepository applicantValidDocRepository;
@Mock
TemplateRepository templateRepository;
@Mock
DynamicFieldRepository dynamicFieldRepository;
@Mock
LocationRepository locationRepository;
@Mock
GlobalParamRepository globalParamRepository;
@Mock
IdentitySchemaRepository identitySchemaRepository;
@Mock
BlocklistedWordRepository blocklistedWordRepository;
@Mock
SyncJobDefRepository syncJobDefRepository;
@Mock
UserDetailRepository userDetailRepository;
@Mock
LanguageRepository languageRepository;
@Mock
UserRoleRepository userRoleRepository;
@Mock
JobManagerService jobManagerService;
@Mock
FileSignatureDao fileSignatureDao;
@Mock
UserBiometricRepository userBiometricRepository;
@Mock
RegistrationRepository registrationRepository;
@Mock
KeyStoreRepository keyStoreRepository;
@Mock
AuditManagerService auditManagerService;
@Mock
AuditRepository auditRepository;
@Mock
JobTransactionRepository jobTransactionRepository;
@Mock
CertificateDBHelper certificateDBHelper;
@Mock
CACertificateStoreRepository caCertificateStoreRepository;
@Mock
DateUtil dateUtil;
@Mock
PreRegistrationDataSyncDao preRegistrationDataSyncDao;
@Mock
PreRegistrationDataSyncRepositoryDao preRegistrationDataSyncRepositoryDao;
@Mock
PreRegZipHandlingService preRegZipHandlingService;
@Mock
PreRegistrationList preRegistrationList;
@Mock
Provider<PreRegistrationDataSyncService> preRegistrationDataSyncServiceProvider;

@Mock Biometrics095Service biometricService;
@Mock
Biometrics095Service biometricService;

@Mock JobTransactionService jobTransactionService;
@Mock
JobTransactionService jobTransactionService;

@Mock PermittedLocalConfigRepository permittedLocalConfigRepository;
@Mock
PermittedLocalConfigRepository permittedLocalConfigRepository;

@Mock LocalConfigDAO localConfigDAO;
@Mock
LocalConfigDAO localConfigDAO;

@Mock LocationValidationService locationValidationService;
@Mock
LocalConfigService localConfigService;

@Mock
LocationValidationService locationValidationService;

@Mock
PacketService packetService;

@Mock
PreCheckValidatorService preCheckValidatorService;

private AppModule appModule;
private MockedStatic<ConfigService> configServiceMock;
Expand Down Expand Up @@ -153,7 +208,8 @@ public void testProvideClientCryptoManagerService() {

@Test
public void testProvideIPacketCryptoService() {
IPacketCryptoService service = appModule.provideIPacketCryptoService(clientCryptoManagerService, cryptoManagerService);
IPacketCryptoService service = appModule.provideIPacketCryptoService(clientCryptoManagerService,
cryptoManagerService);
assertNotNull(service);
assertTrue(service instanceof PacketCryptoServiceImpl);
}
Expand All @@ -179,8 +235,8 @@ public void testProvideMasterDataService() {
registrationCenterRepository, documentTypeRepository, applicantValidDocRepository, templateRepository,
dynamicFieldRepository, locationRepository, globalParamRepository, identitySchemaRepository,
blocklistedWordRepository, syncJobDefRepository, userDetailRepository, certificateManagerService,
languageRepository, jobManagerService, fileSignatureDao, jobTransactionService, permittedLocalConfigRepository, localConfigDAO
);
languageRepository, jobManagerService, fileSignatureDao, jobTransactionService,
permittedLocalConfigRepository, localConfigDAO);
assertNotNull(service);
assertTrue(service instanceof MasterDataServiceImpl);
}
Expand All @@ -193,16 +249,18 @@ public void testProvideSyncRestFactory() {

@Test
public void testProvideLoginService() {
LoginService service = appModule.provideLoginService(clientCryptoManagerService, userDetailRepository,userRoleRepository);
LoginService service = appModule.provideLoginService(clientCryptoManagerService, userDetailRepository,
userRoleRepository);
assertNotNull(service);
}

@Test
public void testProvideRegistrationService() {
RegistrationService service = appModule.provideRegistrationService(
packetWriterService, registrationRepository, mock(MasterDataService.class), identitySchemaRepository,
clientCryptoManagerService, keyStoreRepository, globalParamRepository, auditManagerService,registrationCenterRepository,locationValidationService, preRegistrationDataSyncServiceProvider,biometricService
);
clientCryptoManagerService, keyStoreRepository, globalParamRepository, auditManagerService,
registrationCenterRepository, locationValidationService, preRegistrationDataSyncServiceProvider,
biometricService, packetService, preCheckValidatorService);
assertNotNull(service);
assertTrue(service instanceof RegistrationServiceImpl);
}
Expand All @@ -216,8 +274,8 @@ public void testProvideUserInterfaceHelperService() {
@Test
public void testProvidePacketService() {
PacketService service = appModule.providePacketService(
registrationRepository, iPacketCryptoService, syncRestService, mock(MasterDataService.class), globalParamRepository
);
registrationRepository, iPacketCryptoService, syncRestService, mock(MasterDataService.class),
globalParamRepository);
assertNotNull(service);
assertTrue(service instanceof PacketServiceImpl);
}
Expand All @@ -244,16 +302,17 @@ public void testProvideAuditManagerService() {

@Test
public void testProvideJobManagerService() {
JobManagerService service = appModule.provideJobManagerService(syncJobDefRepository, mock(JobTransactionService.class), dateUtil);
JobManagerService service = appModule.provideJobManagerService(syncJobDefRepository,
mock(JobTransactionService.class), dateUtil, localConfigService);
assertNotNull(service);
assertTrue(service instanceof JobManagerServiceImpl);
}

@Test
public void testProvideBiometrics095Service() {
Biometrics095Service service = appModule.provideBiometrics095Service(
objectMapper, auditManagerService, globalParamRepository, clientCryptoManagerService, userBiometricRepository
);
objectMapper, auditManagerService, globalParamRepository, clientCryptoManagerService,
userBiometricRepository);
assertNotNull(service);
assertTrue(service instanceof Biometrics095Service);
}
Expand All @@ -262,26 +321,24 @@ public void testProvideBiometrics095Service() {
public void testProvideUserOnboardService() {
UserOnboardService service = appModule.provideUserOnboardService(
objectMapper, auditManagerService, certificateManagerService, syncRestService, cryptoManagerService,
mock(RegistrationService.class), userBiometricRepository, clientCryptoManagerService, userDetailRepository, globalParamRepository
);
mock(RegistrationService.class), userBiometricRepository, clientCryptoManagerService,
userDetailRepository, globalParamRepository);
assertNotNull(service);
assertTrue(service instanceof UserOnboardService);
}

@Test
public void testTemplateService() {
TemplateService service = appModule.TemplateService(
mock(MasterDataService.class), identitySchemaRepository, globalParamRepository
);
mock(MasterDataService.class), identitySchemaRepository, globalParamRepository);
assertNotNull(service);
}

@Test
public void testPreRegistrationDataSyncService() {
PreRegistrationDataSyncService service = appModule.PreRegistrationDataSyncService(
preRegistrationDataSyncDao, mock(MasterDataService.class), syncRestService, preRegZipHandlingService,
preRegistrationList, globalParamRepository, mock(RegistrationService.class)
);
preRegistrationList, globalParamRepository, mock(RegistrationService.class));
assertNotNull(service);
}

Expand All @@ -296,8 +353,7 @@ public void testPreRegZipHandlingService() {
PreRegZipHandlingService service = appModule.PreRegZipHandlingService(
mock(ApplicantValidDocumentDao.class), identitySchemaRepository, clientCryptoManagerService,
mock(RegistrationService.class), cryptoManagerService, packetKeeper, iPacketCryptoService,
mock(MasterDataService.class), globalParamRepository
);
mock(MasterDataService.class), globalParamRepository);
assertNotNull(service);
}

Expand Down Expand Up @@ -338,5 +394,4 @@ public void test_provide_packet_manager_helper_with_null_context() {
});
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package io.mosip.registration.clientmanager.jobs;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;

import java.util.concurrent.TimeUnit;

import io.mosip.registration.clientmanager.spi.PacketService;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.verify;

@RunWith(MockitoJUnitRunner.class)
public class RegistrationDeletionJobTest {

@Spy
private RegistrationDeletionJob registrationDeletionJob = new RegistrationDeletionJob();

@Mock
private PacketService packetService;

@Before
public void setUp() {
MockitoAnnotations.openMocks(this);

registrationDeletionJob.packetService = packetService;
}

@Test
public void testTriggerJob_SuccessfulDeletion_ReturnsTrue() {
int jobId = 1;
long currentTimeMillis = System.currentTimeMillis();

boolean result = registrationDeletionJob.triggerJob(jobId);

assertTrue(result);
verify(packetService).deleteRegistrationPackets();
verify(registrationDeletionJob).logJobTransaction(jobId, TimeUnit.MILLISECONDS.toSeconds(currentTimeMillis));
}
Comment on lines +36 to +46
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix the timestamp verification logic.

The test captures currentTimeMillis at line 39 but then verifies logJobTransaction is called with TimeUnit.MILLISECONDS.toSeconds(currentTimeMillis) at line 45. However, the actual elapsed time calculation in the production code will differ from this pre-captured value, causing the verification to fail.

Consider either:

  1. Using any() matcher for the timestamp parameter if exact timing isn't critical
  2. Using argument captor to verify the timestamp is reasonable (e.g., within expected range)
  3. Mocking the time source if precise timing verification is required
🔧 Proposed fix
     @Test
     public void testTriggerJob_SuccessfulDeletion_ReturnsTrue() {
         int jobId = 1;
-        long currentTimeMillis = System.currentTimeMillis();

         boolean result = registrationDeletionJob.triggerJob(jobId);

         assertTrue(result);
         verify(packetService).deleteRegistrationPackets();
-        verify(registrationDeletionJob).logJobTransaction(jobId, TimeUnit.MILLISECONDS.toSeconds(currentTimeMillis));
+        verify(registrationDeletionJob).logJobTransaction(eq(jobId), anyLong());
     }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
@Test
public void testTriggerJob_SuccessfulDeletion_ReturnsTrue() {
int jobId = 1;
long currentTimeMillis = System.currentTimeMillis();
boolean result = registrationDeletionJob.triggerJob(jobId);
assertTrue(result);
verify(packetService).deleteRegistrationPackets();
verify(registrationDeletionJob).logJobTransaction(jobId, TimeUnit.MILLISECONDS.toSeconds(currentTimeMillis));
}
@Test
public void testTriggerJob_SuccessfulDeletion_ReturnsTrue() {
int jobId = 1;
boolean result = registrationDeletionJob.triggerJob(jobId);
assertTrue(result);
verify(packetService).deleteRegistrationPackets();
verify(registrationDeletionJob).logJobTransaction(eq(jobId), anyLong());
}
🤖 Prompt for AI Agents
In
@android/clientmanager/src/test/java/io/mosip/registration/clientmanager/jobs/RegistrationDeletionJobTest.java
around lines 36 - 46, The timestamp verification in
testTriggerJob_SuccessfulDeletion_ReturnsTrue is brittle because
currentTimeMillis is captured before triggerJob and the production code computes
elapsed time differently; update the test to avoid exact-match timing: replace
the strict verification of logJobTransaction(jobId,
TimeUnit.MILLISECONDS.toSeconds(currentTimeMillis)) with either
verify(registrationDeletionJob).logJobTransaction(eq(jobId), anyLong()) or use
an ArgumentCaptor<Long> to capture the timestamp and assert it falls within an
expected range, or alternatively mock the time source used by
registrationDeletionJob so you can assert an exact value; ensure
packetService.deleteRegistrationPackets() is still verified and keep references
to registrationDeletionJob.triggerJob and logJobTransaction in your changes.


@Test
public void testTriggerJob_DeletionThrowsException_ReturnsFalse() {
int jobId = 1;
doThrow(new RuntimeException("Deletion failed"))
.when(packetService).deleteRegistrationPackets();

boolean result = registrationDeletionJob.triggerJob(jobId);

assertFalse(result);
verify(packetService).deleteRegistrationPackets();
}

@Test
public void testTriggerJob_LogsStartAndCompletion() {
int jobId = 1;

registrationDeletionJob.triggerJob(jobId);

verify(packetService).deleteRegistrationPackets();
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ public void setUp() {

@Test
public void testGetRCaptureRequest() {
when(mockGlobalParamRepository.getCachedStringGlobalParam(RegistrationConstants.SERVER_ACTIVE_PROFILE))
.thenReturn("Developer");

Modality modality = Modality.FACE;
String deviceId = "testDevice";
List<String> exceptionAttributes = new ArrayList<>();
Expand Down Expand Up @@ -169,6 +172,8 @@ public void testValidateJWTResponse_invalidSignature() throws Exception {
public void test_creates_capture_request_with_standard_environment_settings() {
when(mockContext.getSharedPreferences(anyString(), anyInt())).thenReturn(mockSharedPreferences);
when(mockContext.getString(anyInt())).thenReturn("app_name");
when(mockGlobalParamRepository.getCachedStringGlobalParam(RegistrationConstants.SERVER_ACTIVE_PROFILE))
.thenReturn("Developer");

Biometrics095Service biometrics095Service = new Biometrics095Service(
mockContext, mockObjectMapper, mockAuditManagerService,
Expand Down
Loading