From 92aa02c42746afd0dc551f58801dfe725bc36459 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 11 Jul 2024 14:44:04 +0100 Subject: [PATCH 1/2] MS-577 Fetching GUID for verification only when biometricDataSource is Simprints --- .../usecases/steps/BuildStepsUseCase.kt | 30 +++++++++++++------ .../usecases/steps/BuildStepsUseCaseTest.kt | 28 ++++++++++++++++- 2 files changed, 48 insertions(+), 10 deletions(-) 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 d1df4c34c6..93f4d698bc 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 @@ -68,7 +68,7 @@ internal class BuildStepsUseCase @Inject constructor( is ActionRequest.VerifyActionRequest -> listOf( buildSetupStep(), buildAgeSelectionStepIfNeeded(action, projectConfiguration), - buildFetchGuidStep(action.projectId, action.verifyGuid), + buildFetchGuidStepIfNeeded(action), buildConsentStep(ConsentType.VERIFY), buildModalityCaptureAndMatchStepsForVerify(action, projectConfiguration) ) @@ -222,14 +222,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(action: ActionRequest.VerifyActionRequest) = + with(action) { + val isBiometricDataSourceSimprints = + BiometricDataSource.fromString( + value = biometricDataSource, + callerPackageName = callerPackageName, + ) == BiometricDataSource.Simprints + if (isBiometricDataSourceSimprints) { + listOf( + Step( + id = StepId.FETCH_GUID, + navigationActionId = R.id.action_orchestratorFragment_to_fetchSubject, + destinationId = FetchSubjectContract.DESTINATION, + payload = FetchSubjectContract.getArgs(projectId, action.verifyGuid), + ) + ) + } else { + 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 81181828a1..e305127b33 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 @@ -368,6 +368,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() @@ -523,4 +549,4 @@ class BuildStepsUseCaseTest { assertEquals(0, steps.size) } -} \ No newline at end of file +} From 5616d7b2c072e2b14e6a5d8c6afe6543b08eeef8 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 11 Jul 2024 16:13:57 +0100 Subject: [PATCH 2/2] MS-577 Verification build step code style unified with identification --- .../usecases/steps/BuildStepsUseCase.kt | 47 ++++++++++--------- 1 file changed, 26 insertions(+), 21 deletions(-) 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 fca1dd810a..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), - buildFetchGuidStepIfNeeded(action), + buildFetchGuidStepIfNeeded( + projectId = action.projectId, + subjectId = action.verifyGuid, + biometricDataSource = action.biometricDataSource, + callerPackageName = action.callerPackageName + ), buildConsentStep(ConsentType.VERIFY), buildModalityCaptureAndMatchStepsForVerify(action, projectConfiguration) ) @@ -226,26 +231,26 @@ internal class BuildStepsUseCase @Inject constructor( ) ) - private fun buildFetchGuidStepIfNeeded(action: ActionRequest.VerifyActionRequest) = - with(action) { - val isBiometricDataSourceSimprints = - BiometricDataSource.fromString( - value = biometricDataSource, - callerPackageName = callerPackageName, - ) == BiometricDataSource.Simprints - if (isBiometricDataSourceSimprints) { - listOf( - Step( - id = StepId.FETCH_GUID, - navigationActionId = R.id.action_orchestratorFragment_to_fetchSubject, - destinationId = FetchSubjectContract.DESTINATION, - payload = FetchSubjectContract.getArgs(projectId, action.verifyGuid), - ) - ) - } else { - emptyList() - } - } + 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(