diff --git a/feature/orchestrator/src/main/java/com/simprints/feature/orchestrator/usecases/steps/BuildStepsUseCase.kt b/feature/orchestrator/src/main/java/com/simprints/feature/orchestrator/usecases/steps/BuildStepsUseCase.kt index a5c6176fa9..8586c16e4c 100644 --- a/feature/orchestrator/src/main/java/com/simprints/feature/orchestrator/usecases/steps/BuildStepsUseCase.kt +++ b/feature/orchestrator/src/main/java/com/simprints/feature/orchestrator/usecases/steps/BuildStepsUseCase.kt @@ -72,7 +72,12 @@ internal class BuildStepsUseCase @Inject constructor( is ActionRequest.VerifyActionRequest -> listOf( buildSetupStep(), buildAgeSelectionStepIfNeeded(action, projectConfiguration), - buildFetchGuidStep(action.projectId, action.verifyGuid), + buildFetchGuidStepIfNeeded( + projectId = action.projectId, + subjectId = action.verifyGuid, + biometricDataSource = action.biometricDataSource, + callerPackageName = action.callerPackageName + ), buildConsentStep(ConsentType.VERIFY), buildModalityCaptureAndMatchStepsForVerify(action, projectConfiguration) ) @@ -226,14 +231,26 @@ internal class BuildStepsUseCase @Inject constructor( ) ) - private fun buildFetchGuidStep(projectId: String, subjectId: String) = listOf( - Step( - id = StepId.FETCH_GUID, - navigationActionId = R.id.action_orchestratorFragment_to_fetchSubject, - destinationId = FetchSubjectContract.DESTINATION, - payload = FetchSubjectContract.getArgs(projectId, subjectId), + private fun buildFetchGuidStepIfNeeded( + projectId: String, + subjectId: String, + biometricDataSource: String, + callerPackageName: String + ) = when (BiometricDataSource.fromString( + value = biometricDataSource, + callerPackageName = callerPackageName + )) { + BiometricDataSource.Simprints -> listOf( + Step( + id = StepId.FETCH_GUID, + navigationActionId = R.id.action_orchestratorFragment_to_fetchSubject, + destinationId = FetchSubjectContract.DESTINATION, + payload = FetchSubjectContract.getArgs(projectId, subjectId), + ) ) - ) + + is BiometricDataSource.CommCare -> emptyList() + } private fun buildConsentStep(consentType: ConsentType) = listOf( Step( diff --git a/feature/orchestrator/src/test/java/com/simprints/feature/orchestrator/usecases/steps/BuildStepsUseCaseTest.kt b/feature/orchestrator/src/test/java/com/simprints/feature/orchestrator/usecases/steps/BuildStepsUseCaseTest.kt index e7ed2a02cb..6410513b3b 100644 --- a/feature/orchestrator/src/test/java/com/simprints/feature/orchestrator/usecases/steps/BuildStepsUseCaseTest.kt +++ b/feature/orchestrator/src/test/java/com/simprints/feature/orchestrator/usecases/steps/BuildStepsUseCaseTest.kt @@ -394,6 +394,32 @@ class BuildStepsUseCaseTest { ) } + @Test + fun `build - verify action - co-sync data source - returns steps without fetch GUID`() { + val projectConfiguration = mockCommonProjectConfiguration() + val ageGroup = AgeGroup(18, 60) + every { secugenSimMatcher.allowedAgeRange } returns ageGroup + every { nec.allowedAgeRange } returns ageGroup + every { projectConfiguration.face?.rankOne?.allowedAgeRange } returns ageGroup + + val action = mockk(relaxed = true) + every { action.getSubjectAgeIfAvailable() } returns 25 // Subject age within the supported range + every { action.biometricDataSource } returns "COMMCARE" + val steps = useCase.build(action, projectConfiguration) + + assertStepOrder(steps, + StepId.SETUP, + // no StepId.FETCH_GUID + StepId.CONSENT, + StepId.FINGERPRINT_CAPTURE, + StepId.FINGERPRINT_CAPTURE, + StepId.FACE_CAPTURE, + StepId.FINGERPRINT_MATCHER, + StepId.FINGERPRINT_MATCHER, + StepId.FACE_MATCHER + ) + } + @Test fun `build - enrol action - age restriction - subject age not supported - throws SubjectAgeNotSupportedException`() { val projectConfiguration = mockCommonProjectConfiguration()