From 24523346c34121ebc0c7cf27323c6c8f7c8dce34 Mon Sep 17 00:00:00 2001 From: Marinov Date: Thu, 29 May 2025 16:23:51 +0300 Subject: [PATCH 1/5] [MS-932] Add biometricDataSource to the Callout event --- .../ReportActionRequestEventsUseCase.kt | 20 +++++++++++++++++-- .../models/callout/ApiBiometricDataSource.kt | 15 ++++++++++++++ .../models/callout/ApiCalloutPayload.kt | 3 +++ .../models/callout/ApiEnrolmentCallout.kt | 1 + .../callout/ApiIdentificationCallout.kt | 1 + .../models/callout/ApiVerificationCallout.kt | 1 + .../events/sampledata/EventFactoryUtils.kt | 6 +++++- .../infra/events/sampledata/SampleDefaults.kt | 2 ++ .../models/callout/BiometricDataSource.kt | 17 ++++++++++++++++ .../models/callout/EnrolmentCalloutEvent.kt | 5 ++++- .../callout/IdentificationCalloutEvent.kt | 5 ++++- .../callout/VerificationCalloutEvent.kt | 5 ++++- .../callout/EnrolmentCalloutEventTest.kt | 3 +++ .../callout/IdentificationCalloutEventTest.kt | 3 +++ .../callout/VerificationCalloutEventTest.kt | 3 +++ 15 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiBiometricDataSource.kt create mode 100644 infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/BiometricDataSource.kt diff --git a/feature/login-check/src/main/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCase.kt b/feature/login-check/src/main/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCase.kt index a3f38ea4fe..1e46c9f90a 100644 --- a/feature/login-check/src/main/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCase.kt +++ b/feature/login-check/src/main/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCase.kt @@ -5,6 +5,7 @@ import com.simprints.core.tools.time.TimeHelper import com.simprints.core.tools.utils.SimNetworkUtils import com.simprints.infra.events.event.domain.models.ConnectivitySnapshotEvent import com.simprints.infra.events.event.domain.models.SuspiciousIntentEvent +import com.simprints.infra.events.event.domain.models.callout.BiometricDataSource import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEvent import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEvent import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEvent @@ -52,8 +53,22 @@ internal class ReportActionRequestEventsUseCase @Inject constructor( val startTime = timeHelper.now() val event = with(request) { when (this) { - is ActionRequest.EnrolActionRequest -> EnrolmentCalloutEvent(startTime, projectId, userId, moduleId, metadata) - is ActionRequest.IdentifyActionRequest -> IdentificationCalloutEvent(startTime, projectId, userId, moduleId, metadata) + is ActionRequest.EnrolActionRequest -> EnrolmentCalloutEvent( + startTime, + projectId, + userId, + moduleId, + metadata, + BiometricDataSource.fromString(biometricDataSource), + ) + is ActionRequest.IdentifyActionRequest -> IdentificationCalloutEvent( + startTime, + projectId, + userId, + moduleId, + metadata, + BiometricDataSource.fromString(biometricDataSource), + ) is ActionRequest.VerifyActionRequest -> VerificationCalloutEvent( startTime, projectId, @@ -61,6 +76,7 @@ internal class ReportActionRequestEventsUseCase @Inject constructor( moduleId, verifyGuid, metadata, + BiometricDataSource.fromString(biometricDataSource), ) is ActionRequest.ConfirmIdentityActionRequest -> ConfirmationCalloutEvent(startTime, projectId, selectedGuid, sessionId) is ActionRequest.EnrolLastBiometricActionRequest -> EnrolmentLastBiometricsCalloutEvent( diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiBiometricDataSource.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiBiometricDataSource.kt new file mode 100644 index 0000000000..0597707f77 --- /dev/null +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiBiometricDataSource.kt @@ -0,0 +1,15 @@ +package com.simprints.infra.eventsync.event.remote.models.callout + +import androidx.annotation.Keep +import com.simprints.infra.events.event.domain.models.callout.BiometricDataSource + +@Keep +internal enum class ApiBiometricDataSource { + SIMPRINTS, + COMMCARE +} + +internal fun BiometricDataSource.fromDomainToApi(): ApiBiometricDataSource = when (this) { + BiometricDataSource.SIMPRINTS -> ApiBiometricDataSource.SIMPRINTS + BiometricDataSource.COMMCARE -> ApiBiometricDataSource.COMMCARE +} diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayload.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayload.kt index 9013cac615..8b96f49a2b 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayload.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayload.kt @@ -26,6 +26,7 @@ internal data class ApiCalloutPayload( domainPayload.userId.value, domainPayload.moduleId.value, domainPayload.metadata, + domainPayload.biometricDataSource.fromDomainToApi() ), ) @@ -36,6 +37,7 @@ internal data class ApiCalloutPayload( domainPayload.userId.value, domainPayload.moduleId.value, domainPayload.metadata, + domainPayload.biometricDataSource.fromDomainToApi() ), ) @@ -47,6 +49,7 @@ internal data class ApiCalloutPayload( domainPayload.moduleId.value, domainPayload.metadata, domainPayload.verifyGuid, + domainPayload.biometricDataSource.fromDomainToApi() ), ) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCallout.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCallout.kt index eb1b979adc..f03a75627d 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCallout.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCallout.kt @@ -8,4 +8,5 @@ internal data class ApiEnrolmentCallout( val userId: String, val moduleId: String, val metadata: String?, + val biometricDataSource: ApiBiometricDataSource, ) : ApiCallout(ApiCalloutType.Enrolment) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCallout.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCallout.kt index 01046cb314..d85ea3845d 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCallout.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCallout.kt @@ -8,4 +8,5 @@ internal data class ApiIdentificationCallout( val userId: String, val moduleId: String, val metadata: String?, + val biometricDataSource: ApiBiometricDataSource, ) : ApiCallout(ApiCalloutType.Identification) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCallout.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCallout.kt index d9d2fea485..a9ce35c117 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCallout.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCallout.kt @@ -9,4 +9,5 @@ internal data class ApiVerificationCallout( val moduleId: String, val metadata: String, val verifyGuid: String, + val biometricDataSource: ApiBiometricDataSource, ) : ApiCallout(ApiCalloutType.Verification) diff --git a/infra/events/src/debug/java/com/simprints/infra/events/sampledata/EventFactoryUtils.kt b/infra/events/src/debug/java/com/simprints/infra/events/sampledata/EventFactoryUtils.kt index 754919954a..a50e6da948 100644 --- a/infra/events/src/debug/java/com/simprints/infra/events/sampledata/EventFactoryUtils.kt +++ b/infra/events/src/debug/java/com/simprints/infra/events/sampledata/EventFactoryUtils.kt @@ -81,6 +81,7 @@ import com.simprints.infra.events.event.domain.models.scope.EventScopeType import com.simprints.infra.events.event.domain.models.scope.Location import com.simprints.infra.events.event.domain.models.upsync.EventUpSyncRequestEvent import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_BIOMETRIC_DATA_SOURCE import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_MODULE_ID import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_PROJECT_ID @@ -193,6 +194,7 @@ fun createEnrolmentCalloutEvent(projectId: String = DEFAULT_PROJECT_ID) = Enrolm DEFAULT_USER_ID, DEFAULT_MODULE_ID, DEFAULT_METADATA, + DEFAULT_BIOMETRIC_DATA_SOURCE, projectId, ) @@ -202,6 +204,7 @@ fun createIdentificationCalloutEvent() = IdentificationCalloutEvent( DEFAULT_USER_ID, DEFAULT_MODULE_ID, DEFAULT_METADATA, + DEFAULT_BIOMETRIC_DATA_SOURCE, ) fun createLastBiometricsEnrolmentCalloutEvent() = EnrolmentLastBiometricsCalloutEvent( @@ -218,8 +221,9 @@ fun createVerificationCalloutEvent() = VerificationCalloutEvent( DEFAULT_PROJECT_ID, DEFAULT_USER_ID, DEFAULT_MODULE_ID, - DEFAULT_METADATA, GUID2, + DEFAULT_METADATA, + DEFAULT_BIOMETRIC_DATA_SOURCE, ) fun createFaceCaptureBiometricsEvent() = FaceCaptureBiometricsEvent( diff --git a/infra/events/src/debug/java/com/simprints/infra/events/sampledata/SampleDefaults.kt b/infra/events/src/debug/java/com/simprints/infra/events/sampledata/SampleDefaults.kt index 555aa66bd2..8f208db76e 100644 --- a/infra/events/src/debug/java/com/simprints/infra/events/sampledata/SampleDefaults.kt +++ b/infra/events/src/debug/java/com/simprints/infra/events/sampledata/SampleDefaults.kt @@ -3,6 +3,7 @@ package com.simprints.infra.events.sampledata import com.simprints.core.domain.modality.Modes import com.simprints.core.domain.tokenization.asTokenizableRaw import com.simprints.core.tools.time.Timestamp +import com.simprints.infra.events.event.domain.models.callout.BiometricDataSource import java.util.UUID object SampleDefaults { @@ -14,6 +15,7 @@ object SampleDefaults { val DEFAULT_USER_ID = "user_id".asTokenizableRaw() val DEFAULT_USER_ID_2 = "user_id_2".asTokenizableRaw() const val DEFAULT_METADATA = "DEFAULT_METADATA" + val DEFAULT_BIOMETRIC_DATA_SOURCE = BiometricDataSource.SIMPRINTS val CREATED_AT: Timestamp = Timestamp(1234L) val ENDED_AT: Timestamp = Timestamp(4567L) diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/BiometricDataSource.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/BiometricDataSource.kt new file mode 100644 index 0000000000..558061fed6 --- /dev/null +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/BiometricDataSource.kt @@ -0,0 +1,17 @@ +package com.simprints.infra.events.event.domain.models.callout + +import androidx.annotation.Keep + +@Keep +enum class BiometricDataSource { + SIMPRINTS, + COMMCARE; + + companion object { + fun fromString(value: String) = + when (value.uppercase()) { + "COMMCARE" -> COMMCARE + else -> SIMPRINTS + } + } +} diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEvent.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEvent.kt index 985e2ad0b4..00de4c9133 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEvent.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEvent.kt @@ -24,6 +24,7 @@ data class EnrolmentCalloutEvent( userId: TokenizableString, moduleId: TokenizableString, metadata: String?, + biometricDataSource: BiometricDataSource, id: String = UUID.randomUUID().toString(), ) : this( id, @@ -34,6 +35,7 @@ data class EnrolmentCalloutEvent( userId = userId, moduleId = moduleId, metadata = metadata, + biometricDataSource = biometricDataSource, ), CALLOUT_ENROLMENT, ) @@ -58,10 +60,11 @@ data class EnrolmentCalloutEvent( val userId: TokenizableString, val moduleId: TokenizableString, val metadata: String?, + val biometricDataSource: BiometricDataSource, override val endedAt: Timestamp? = null, override val type: EventType = CALLOUT_ENROLMENT, ) : EventPayload() { - override fun toSafeString(): String = "module: $moduleId, metadata: $metadata" + override fun toSafeString(): String = "module: $moduleId, metadata: $metadata, biometricDataSource: $biometricDataSource" } companion object { diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEvent.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEvent.kt index 27af5a714a..9ed4e50fc9 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEvent.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEvent.kt @@ -24,6 +24,7 @@ data class IdentificationCalloutEvent( userId: TokenizableString, moduleId: TokenizableString, metadata: String?, + biometricDataSource: BiometricDataSource, ) : this( UUID.randomUUID().toString(), IdentificationCalloutPayload( @@ -33,6 +34,7 @@ data class IdentificationCalloutEvent( userId = userId, moduleId = moduleId, metadata = metadata, + biometricDataSource = biometricDataSource, ), CALLOUT_IDENTIFICATION, ) @@ -57,10 +59,11 @@ data class IdentificationCalloutEvent( val userId: TokenizableString, val moduleId: TokenizableString, val metadata: String?, + val biometricDataSource: BiometricDataSource, override val endedAt: Timestamp? = null, override val type: EventType = CALLOUT_IDENTIFICATION, ) : EventPayload() { - override fun toSafeString(): String = "module ID: $moduleId, metadata: $metadata" + override fun toSafeString(): String = "module ID: $moduleId, metadata: $metadata, biometricDataSource: $biometricDataSource" } companion object { diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEvent.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEvent.kt index e6c3f6ffa0..ad9fb002cb 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEvent.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEvent.kt @@ -25,6 +25,7 @@ data class VerificationCalloutEvent( moduleId: TokenizableString, verifyGuid: String, metadata: String, + biometricDataSource: BiometricDataSource, ) : this( UUID.randomUUID().toString(), VerificationCalloutPayload( @@ -35,6 +36,7 @@ data class VerificationCalloutEvent( moduleId = moduleId, verifyGuid = verifyGuid, metadata = metadata, + biometricDataSource = biometricDataSource, ), CALLOUT_VERIFICATION, ) @@ -60,10 +62,11 @@ data class VerificationCalloutEvent( val moduleId: TokenizableString, val verifyGuid: String, val metadata: String, + val biometricDataSource: BiometricDataSource, override val endedAt: Timestamp? = null, override val type: EventType = CALLOUT_VERIFICATION, ) : EventPayload() { - override fun toSafeString(): String = "module ID: $moduleId, guid: $verifyGuid, metadata: $metadata" + override fun toSafeString(): String = "module ID: $moduleId, guid: $verifyGuid, metadata: $metadata, biometricDataSource: $biometricDataSource" } companion object { diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventTest.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventTest.kt index 88f12720a2..d44a2f4cd6 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventTest.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventTest.kt @@ -5,6 +5,7 @@ import com.google.common.truth.Truth.assertThat import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_ENROLMENT import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEvent.Companion.EVENT_VERSION import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_BIOMETRIC_DATA_SOURCE import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_MODULE_ID import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_PROJECT_ID @@ -21,6 +22,7 @@ class EnrolmentCalloutEventTest { userId = DEFAULT_USER_ID, moduleId = DEFAULT_MODULE_ID, metadata = DEFAULT_METADATA, + biometricDataSource = DEFAULT_BIOMETRIC_DATA_SOURCE, ) assertThat(event.id).isNotNull() @@ -33,6 +35,7 @@ class EnrolmentCalloutEventTest { assertThat(userId).isEqualTo(DEFAULT_USER_ID) assertThat(moduleId).isEqualTo(DEFAULT_MODULE_ID) assertThat(metadata).isEqualTo(DEFAULT_METADATA) + assertThat(biometricDataSource).isEqualTo(DEFAULT_BIOMETRIC_DATA_SOURCE) } } } diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventTest.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventTest.kt index 8b9b21cb2d..8178bcf1c7 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventTest.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventTest.kt @@ -5,6 +5,7 @@ import com.google.common.truth.Truth.assertThat import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_IDENTIFICATION import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEvent.Companion.EVENT_VERSION import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_BIOMETRIC_DATA_SOURCE import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_MODULE_ID import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_PROJECT_ID @@ -21,6 +22,7 @@ class IdentificationCalloutEventTest { userId = DEFAULT_USER_ID, moduleId = DEFAULT_MODULE_ID, metadata = DEFAULT_METADATA, + biometricDataSource = DEFAULT_BIOMETRIC_DATA_SOURCE, ) assertThat(event.id).isNotNull() @@ -33,6 +35,7 @@ class IdentificationCalloutEventTest { assertThat(userId).isEqualTo(DEFAULT_USER_ID) assertThat(moduleId).isEqualTo(DEFAULT_MODULE_ID) assertThat(metadata).isEqualTo(DEFAULT_METADATA) + assertThat(biometricDataSource).isEqualTo(DEFAULT_BIOMETRIC_DATA_SOURCE) } } } diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventTest.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventTest.kt index d55585552a..86d0565e5a 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventTest.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventTest.kt @@ -5,6 +5,7 @@ import com.google.common.truth.Truth.assertThat import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_VERIFICATION import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEvent.Companion.EVENT_VERSION import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_BIOMETRIC_DATA_SOURCE import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_MODULE_ID import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_PROJECT_ID @@ -23,6 +24,7 @@ class VerificationCalloutEventTest { moduleId = DEFAULT_MODULE_ID, verifyGuid = GUID1, metadata = DEFAULT_METADATA, + biometricDataSource = DEFAULT_BIOMETRIC_DATA_SOURCE, ) assertThat(event.id).isNotNull() @@ -36,6 +38,7 @@ class VerificationCalloutEventTest { assertThat(moduleId).isEqualTo(DEFAULT_MODULE_ID) assertThat(verifyGuid).isEqualTo(GUID1) assertThat(metadata).isEqualTo(DEFAULT_METADATA) + assertThat(biometricDataSource).isEqualTo(DEFAULT_BIOMETRIC_DATA_SOURCE) } } } From 75007f405be3416694626f195455e1f3dedee96b Mon Sep 17 00:00:00 2001 From: Marinov Date: Wed, 4 Jun 2025 19:39:46 +0300 Subject: [PATCH 2/5] [MS-932] Rename callout events to V3 --- .../ReportActionRequestEventsUseCase.kt | 20 +++--- .../logincheck/LoginCheckViewModelTest.kt | 42 ++++++------ .../logincheck/usecases/ActionFactory.kt | 54 ++++++++++++++- .../AddAuthorizationEventUseCaseTest.kt | 4 +- .../usecases/ExtractCrashKeysUseCaseTest.kt | 2 +- ...xtractParametersForAnalyticsUseCaseTest.kt | 4 +- .../usecases/IsUserSignedInUseCaseTest.kt | 2 +- .../ReportActionRequestEventsUseCaseTest.kt | 50 +++++++++++--- .../event/remote/models/ApiEventPayload.kt | 22 +++--- .../callout/ApiCalloutIntegrationInfo.kt | 9 --- ...lloutPayload.kt => ApiCalloutPayloadV3.kt} | 22 +++--- ...Callout.kt => ApiConfirmationCalloutV3.kt} | 2 +- ...entCallout.kt => ApiEnrolmentCalloutV3.kt} | 2 +- ...=> ApiEnrolmentLastBiometricsCalloutV3.kt} | 2 +- ...llout.kt => ApiIdentificationCalloutV3.kt} | 2 +- ...Callout.kt => ApiVerificationCalloutV3.kt} | 2 +- .../eventsync/event/EventValidationUtils.kt | 11 +-- .../events/sampledata/EventFactoryUtils.kt | 20 +++--- .../infra/events/event/domain/models/Event.kt | 68 +++++++++---------- .../event/domain/models/EventPayload.kt | 10 +-- ...Event.kt => ConfirmationCalloutEventV3.kt} | 10 +-- ...outEvent.kt => EnrolmentCalloutEventV3.kt} | 10 +-- ... EnrolmentLastBiometricsCalloutEventV3.kt} | 10 +-- ...ent.kt => IdentificationCalloutEventV3.kt} | 10 +-- ...Event.kt => VerificationCalloutEventV3.kt} | 10 +-- .../event/domain/models/EventPayloadTest.kt | 24 ++++--- ...t.kt => ConfirmationCalloutEventV3Test.kt} | 12 ++-- ...Test.kt => EnrolmentCalloutEventV3Test.kt} | 12 ++-- ...olmentLastBiometricsCalloutEventV3Test.kt} | 12 ++-- ...kt => IdentificationCalloutEventV3Test.kt} | 12 ++-- ...t.kt => VerificationCalloutEventV3Test.kt} | 12 ++-- .../local/migrations/EventMigrationTest.kt | 2 +- .../all-events/callout_confirmation_v3.json | 19 ++++++ .../callout_enrolment_last_biometrics_v3.json | 27 ++++++++ .../all-events/callout_enrolment_v3.json | 26 +++++++ .../all-events/callout_identification_v3.json | 26 +++++++ .../all-events/callout_verification_v3.json | 27 ++++++++ 37 files changed, 404 insertions(+), 207 deletions(-) delete mode 100644 infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutIntegrationInfo.kt rename infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/{ApiCalloutPayload.kt => ApiCalloutPayloadV3.kt} (85%) rename infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/{ApiConfirmationCallout.kt => ApiConfirmationCalloutV3.kt} (81%) rename infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/{ApiEnrolmentCallout.kt => ApiEnrolmentCalloutV3.kt} (87%) rename infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/{ApiEnrolmentLastBiometricsCallout.kt => ApiEnrolmentLastBiometricsCalloutV3.kt} (88%) rename infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/{ApiIdentificationCallout.kt => ApiIdentificationCalloutV3.kt} (86%) rename infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/{ApiVerificationCallout.kt => ApiVerificationCalloutV3.kt} (87%) rename infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/{ConfirmationCalloutEvent.kt => ConfirmationCalloutEventV3.kt} (89%) rename infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/{EnrolmentCalloutEvent.kt => EnrolmentCalloutEventV3.kt} (93%) rename infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/{EnrolmentLastBiometricsCalloutEvent.kt => EnrolmentLastBiometricsCalloutEventV3.kt} (91%) rename infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/{IdentificationCalloutEvent.kt => IdentificationCalloutEventV3.kt} (92%) rename infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/{VerificationCalloutEvent.kt => VerificationCalloutEventV3.kt} (92%) rename infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/{ConfirmationCalloutEventTest.kt => ConfirmationCalloutEventV3Test.kt} (75%) rename infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/{EnrolmentCalloutEventTest.kt => EnrolmentCalloutEventV3Test.kt} (85%) rename infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/{EnrolmentLastBiometricsCalloutEventTest.kt => EnrolmentLastBiometricsCalloutEventV3Test.kt} (85%) rename infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/{IdentificationCalloutEventTest.kt => IdentificationCalloutEventV3Test.kt} (84%) rename infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/{VerificationCalloutEventTest.kt => VerificationCalloutEventV3Test.kt} (86%) create mode 100644 infra/events/src/test/resources/all-events/callout_confirmation_v3.json create mode 100644 infra/events/src/test/resources/all-events/callout_enrolment_last_biometrics_v3.json create mode 100644 infra/events/src/test/resources/all-events/callout_enrolment_v3.json create mode 100644 infra/events/src/test/resources/all-events/callout_identification_v3.json create mode 100644 infra/events/src/test/resources/all-events/callout_verification_v3.json diff --git a/feature/login-check/src/main/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCase.kt b/feature/login-check/src/main/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCase.kt index 1e46c9f90a..55411098f5 100644 --- a/feature/login-check/src/main/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCase.kt +++ b/feature/login-check/src/main/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCase.kt @@ -6,11 +6,11 @@ import com.simprints.core.tools.utils.SimNetworkUtils import com.simprints.infra.events.event.domain.models.ConnectivitySnapshotEvent import com.simprints.infra.events.event.domain.models.SuspiciousIntentEvent import com.simprints.infra.events.event.domain.models.callout.BiometricDataSource -import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEvent +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3 import com.simprints.infra.events.session.SessionEventRepository import com.simprints.infra.orchestration.data.ActionRequest import com.simprints.infra.recent.user.activity.RecentUserActivityManager @@ -53,7 +53,7 @@ internal class ReportActionRequestEventsUseCase @Inject constructor( val startTime = timeHelper.now() val event = with(request) { when (this) { - is ActionRequest.EnrolActionRequest -> EnrolmentCalloutEvent( + is ActionRequest.EnrolActionRequest -> EnrolmentCalloutEventV3( startTime, projectId, userId, @@ -61,7 +61,7 @@ internal class ReportActionRequestEventsUseCase @Inject constructor( metadata, BiometricDataSource.fromString(biometricDataSource), ) - is ActionRequest.IdentifyActionRequest -> IdentificationCalloutEvent( + is ActionRequest.IdentifyActionRequest -> IdentificationCalloutEventV3( startTime, projectId, userId, @@ -69,7 +69,7 @@ internal class ReportActionRequestEventsUseCase @Inject constructor( metadata, BiometricDataSource.fromString(biometricDataSource), ) - is ActionRequest.VerifyActionRequest -> VerificationCalloutEvent( + is ActionRequest.VerifyActionRequest -> VerificationCalloutEventV3( startTime, projectId, userId, @@ -78,8 +78,8 @@ internal class ReportActionRequestEventsUseCase @Inject constructor( metadata, BiometricDataSource.fromString(biometricDataSource), ) - is ActionRequest.ConfirmIdentityActionRequest -> ConfirmationCalloutEvent(startTime, projectId, selectedGuid, sessionId) - is ActionRequest.EnrolLastBiometricActionRequest -> EnrolmentLastBiometricsCalloutEvent( + is ActionRequest.ConfirmIdentityActionRequest -> ConfirmationCalloutEventV3(startTime, projectId, selectedGuid, sessionId) + is ActionRequest.EnrolLastBiometricActionRequest -> EnrolmentLastBiometricsCalloutEventV3( startTime, projectId, userId, diff --git a/feature/login-check/src/test/java/com/simprints/feature/logincheck/LoginCheckViewModelTest.kt b/feature/login-check/src/test/java/com/simprints/feature/logincheck/LoginCheckViewModelTest.kt index 729ba63dad..24f91f5d58 100644 --- a/feature/login-check/src/test/java/com/simprints/feature/logincheck/LoginCheckViewModelTest.kt +++ b/feature/login-check/src/test/java/com/simprints/feature/logincheck/LoginCheckViewModelTest.kt @@ -116,7 +116,7 @@ internal class LoginCheckViewModelTest { @Test fun `Reports action event and extracts analytics for valid action`() = runTest { - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) coVerify { reportActionRequestEventsUseCase.invoke(any()) @@ -128,7 +128,7 @@ internal class LoginCheckViewModelTest { fun `Triggers alert if mismatched project IDs`() = runTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.MISMATCHED_PROJECT_ID - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) viewModel.showAlert .test() @@ -139,7 +139,7 @@ internal class LoginCheckViewModelTest { fun `Returns error response if not signed in and followup action`() = runTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.NOT_SIGNED_IN - viewModel.validateSignInAndProceed(ActionFactory.getFolowUpRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getConfirmationRequest()) viewModel.returnLoginNotComplete.test().assertHasValue() } @@ -148,8 +148,8 @@ internal class LoginCheckViewModelTest { fun `Returns error response if there are several login attempts`() = runTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.NOT_SIGNED_IN - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) viewModel.returnLoginNotComplete.test().assertHasValue() } @@ -158,7 +158,7 @@ internal class LoginCheckViewModelTest { fun `Triggers login flow if not signed in and flow action`() = runTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.NOT_SIGNED_IN - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) coVerify { addAuthorizationEventUseCase.invoke(any(), eq(false)) @@ -166,14 +166,14 @@ internal class LoginCheckViewModelTest { } viewModel.showLoginFlow .test() - .assertValue { it.peekContent() == ActionFactory.getFlowRequest() } + .assertValue { it.peekContent() == ActionFactory.getIdentifyRequest() } } @Test fun `Returns error response if login attempt not complete`() = runTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.NOT_SIGNED_IN - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) viewModel.handleLoginResult(LoginResult(false, LoginError.LoginNotCompleted)) viewModel.returnLoginNotComplete.test().assertHasValue() @@ -194,7 +194,7 @@ internal class LoginCheckViewModelTest { fun `Triggers alert if login attempt failed with integrity error`() = runTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.NOT_SIGNED_IN - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) viewModel.handleLoginResult(LoginResult(false, LoginError.IntegrityServiceError)) viewModel.showAlert @@ -206,7 +206,7 @@ internal class LoginCheckViewModelTest { fun `Triggers alert if login attempt failed with missing play services`() = runTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.NOT_SIGNED_IN - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) viewModel.handleLoginResult(LoginResult(false, LoginError.MissingPlayServices)) viewModel.showAlert @@ -218,7 +218,7 @@ internal class LoginCheckViewModelTest { fun `Triggers alert if login attempt failed with outdated play services`() = runTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.NOT_SIGNED_IN - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) viewModel.handleLoginResult(LoginResult(false, LoginError.OutdatedPlayServices)) viewModel.showAlert @@ -230,7 +230,7 @@ internal class LoginCheckViewModelTest { fun `Triggers alert if login attempt failed with missing or outdated play services`() = runTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.NOT_SIGNED_IN - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) viewModel.handleLoginResult( LoginResult( false, @@ -247,7 +247,7 @@ internal class LoginCheckViewModelTest { fun `Triggers alert if login attempt failed with unknown error`() = runTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.NOT_SIGNED_IN - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) viewModel.handleLoginResult(LoginResult(false, LoginError.Unknown)) viewModel.showAlert @@ -259,7 +259,7 @@ internal class LoginCheckViewModelTest { fun `Correctly handles successful login attempt`() = runTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.NOT_SIGNED_IN - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) viewModel.handleLoginResult(LoginResult(true, null)) coVerify { configManager.getProject(any()) } @@ -269,7 +269,7 @@ internal class LoginCheckViewModelTest { fun `Correctly handles signed in users`() = runTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.SIGNED_IN - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) coVerify { configManager.getProject(any()) } } @@ -279,7 +279,7 @@ internal class LoginCheckViewModelTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.SIGNED_IN coEvery { configManager.getProject(any()).state } returns ProjectState.PROJECT_PAUSED - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) viewModel.showAlert .test() @@ -291,7 +291,7 @@ internal class LoginCheckViewModelTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.SIGNED_IN coEvery { configManager.getProject(any()).state } returns ProjectState.PROJECT_ENDING - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) viewModel.showAlert .test() @@ -303,11 +303,11 @@ internal class LoginCheckViewModelTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.SIGNED_IN coEvery { configManager.getProject(any()).state } returns ProjectState.PROJECT_ENDED - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) viewModel.showLoginFlow .test() - .assertValue { it.peekContent() == ActionFactory.getFlowRequest() } + .assertValue { it.peekContent() == ActionFactory.getIdentifyRequest() } } @Test @@ -315,7 +315,7 @@ internal class LoginCheckViewModelTest { coEvery { isUserSignedInUseCase.invoke(any()) } returns IsUserSignedInUseCase.SignedInState.SIGNED_IN coEvery { configManager.getProject(any()).state } returns ProjectState.RUNNING - viewModel.validateSignInAndProceed(ActionFactory.getFlowRequest()) + viewModel.validateSignInAndProceed(ActionFactory.getIdentifyRequest()) coVerify { updateProjectStateUseCase.invoke() @@ -329,6 +329,6 @@ internal class LoginCheckViewModelTest { viewModel.proceedWithAction .test() - .assertValue { it.peekContent() == ActionFactory.getFlowRequest() } + .assertValue { it.peekContent() == ActionFactory.getIdentifyRequest() } } } diff --git a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ActionFactory.kt b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ActionFactory.kt index 7ad15a5d9e..bd38747545 100644 --- a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ActionFactory.kt +++ b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ActionFactory.kt @@ -6,7 +6,7 @@ import com.simprints.infra.orchestration.data.ActionRequest import com.simprints.infra.orchestration.data.ActionRequestIdentifier internal object ActionFactory { - fun getFlowRequest(extras: Map = emptyMap()) = ActionRequest.EnrolActionRequest( + fun getEnrolRequest(extras: Map = emptyMap()) = ActionRequest.EnrolActionRequest( actionIdentifier = ActionRequestIdentifier( packageName = "com.simprints.id", actionName = ActionConstants.ACTION_ENROL, @@ -22,7 +22,56 @@ internal object ActionFactory { metadata = "", ) - fun getFolowUpRequest() = ActionRequest.ConfirmIdentityActionRequest( + fun getIdentifyRequest(extras: Map = emptyMap()) = ActionRequest.IdentifyActionRequest( + actionIdentifier = ActionRequestIdentifier( + packageName = "com.simprints.id", + actionName = ActionConstants.ACTION_IDENTIFY, + callerPackageName = "", + contractVersion = 1, + timestampMs = 0L, + ), + projectId = MOCK_PROJECT_ID, + userId = MOCK_USER_ID, + moduleId = MOCK_MODULE_ID, + unknownExtras = extras, + biometricDataSource = MOCK_BIOMETRIC_DATA_SOURCE, + metadata = "", + ) + + fun getVerifyRequest(extras: Map = emptyMap()) = ActionRequest.VerifyActionRequest( + actionIdentifier = ActionRequestIdentifier( + packageName = "com.simprints.id", + actionName = ActionConstants.ACTION_VERIFY, + callerPackageName = "", + contractVersion = 1, + timestampMs = 0L, + ), + projectId = MOCK_PROJECT_ID, + userId = MOCK_USER_ID, + moduleId = MOCK_MODULE_ID, + unknownExtras = extras, + biometricDataSource = MOCK_BIOMETRIC_DATA_SOURCE, + metadata = "", + verifyGuid = MOCK_GUID + ) + + fun getEnrolLastRequest() = ActionRequest.EnrolLastBiometricActionRequest( + actionIdentifier = ActionRequestIdentifier( + packageName = "com.simprints.id", + actionName = ActionConstants.ACTION_ENROL_LAST_BIOMETRICS, + callerPackageName = "", + contractVersion = 1, + timestampMs = 0L, + ), + projectId = MOCK_PROJECT_ID, + userId = MOCK_USER_ID, + moduleId = MOCK_MODULE_ID, + sessionId = "sessionId", + metadata = "", + unknownExtras = emptyMap(), + ) + + fun getConfirmationRequest() = ActionRequest.ConfirmIdentityActionRequest( actionIdentifier = ActionRequestIdentifier( packageName = "com.simprints.id", actionName = ActionConstants.ACTION_CONFIRM_IDENTITY, @@ -42,4 +91,5 @@ internal object ActionFactory { val MOCK_MODULE_ID = "moduleId".asTokenizableRaw() const val MOCK_PROJECT_ID = "projectId" private const val MOCK_BIOMETRIC_DATA_SOURCE = "" + private const val MOCK_GUID = "123e4567-e89b-12d3-a456-426614174000" } diff --git a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/AddAuthorizationEventUseCaseTest.kt b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/AddAuthorizationEventUseCaseTest.kt index 8504d0bb97..68b57ea9b1 100644 --- a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/AddAuthorizationEventUseCaseTest.kt +++ b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/AddAuthorizationEventUseCaseTest.kt @@ -35,7 +35,7 @@ class AddAuthorizationEventUseCaseTest { @Test fun `Adds not authorised event`() = runTest { // When - useCase(ActionFactory.getFlowRequest(), false) + useCase(ActionFactory.getIdentifyRequest(), false) // Then coVerify { coreEventRepository.addOrUpdateEvent( @@ -52,7 +52,7 @@ class AddAuthorizationEventUseCaseTest { @Test fun `Adds authorised event`() = runTest { // When - useCase(ActionFactory.getFlowRequest(), true) + useCase(ActionFactory.getIdentifyRequest(), true) // Then coVerify { coreEventRepository.addOrUpdateEvent( diff --git a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ExtractCrashKeysUseCaseTest.kt b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ExtractCrashKeysUseCaseTest.kt index acc4adbd02..c7cd2aa3a3 100644 --- a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ExtractCrashKeysUseCaseTest.kt +++ b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ExtractCrashKeysUseCaseTest.kt @@ -53,7 +53,7 @@ class ExtractCrashKeysUseCaseTest { } every { authStore.signedInProjectId } returns "projectId" - useCase(ActionFactory.getFlowRequest()) + useCase(ActionFactory.getIdentifyRequest()) verify { Simber.setUserProperty(any(), "projectId") diff --git a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ExtractParametersForAnalyticsUseCaseTest.kt b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ExtractParametersForAnalyticsUseCaseTest.kt index 33fe893e44..469957f0ad 100644 --- a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ExtractParametersForAnalyticsUseCaseTest.kt +++ b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ExtractParametersForAnalyticsUseCaseTest.kt @@ -29,7 +29,7 @@ internal class ExtractParametersForAnalyticsUseCaseTest { @Test fun `Logs analytics keys in flow actions`() = runTest { - useCase(ActionFactory.getFlowRequest()) + useCase(ActionFactory.getIdentifyRequest()) verify { Simber.setUserProperty(any(), ActionFactory.MOCK_USER_ID.toString()) @@ -41,7 +41,7 @@ internal class ExtractParametersForAnalyticsUseCaseTest { @Test fun `Does not log analytics keys in follow up actions`() = runTest { - useCase(ActionFactory.getFolowUpRequest()) + useCase(ActionFactory.getConfirmationRequest()) verify(exactly = 0) { Simber.setUserProperty(any(), any()) diff --git a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/IsUserSignedInUseCaseTest.kt b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/IsUserSignedInUseCaseTest.kt index 836504b13b..e88f5589de 100644 --- a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/IsUserSignedInUseCaseTest.kt +++ b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/IsUserSignedInUseCaseTest.kt @@ -19,7 +19,7 @@ internal class IsUserSignedInUseCaseTest { private lateinit var useCase: IsUserSignedInUseCase - private val request = ActionFactory.getFlowRequest() + private val request = ActionFactory.getIdentifyRequest() @Before fun setUp() { diff --git a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCaseTest.kt b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCaseTest.kt index 18b495d791..1ecd316929 100644 --- a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCaseTest.kt +++ b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCaseTest.kt @@ -5,7 +5,11 @@ import com.simprints.core.tools.time.TimeHelper import com.simprints.core.tools.utils.SimNetworkUtils import com.simprints.infra.events.event.domain.models.ConnectivitySnapshotEvent import com.simprints.infra.events.event.domain.models.SuspiciousIntentEvent -import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEvent +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3 import com.simprints.infra.events.session.SessionEventRepository import com.simprints.infra.recent.user.activity.RecentUserActivityManager import com.simprints.infra.recent.user.activity.domain.RecentUserActivity @@ -61,7 +65,7 @@ internal class ReportActionRequestEventsUseCaseTest { @Test fun `Adds event if there are unknown extras`() = runTest { // When - useCase.invoke(ActionFactory.getFlowRequest(extras = mapOf("key" to "value"))) + useCase.invoke(ActionFactory.getIdentifyRequest(extras = mapOf("key" to "value"))) // Then coVerify { sessionEventRepository.addOrUpdateEvent(withArg { it is SuspiciousIntentEvent }) @@ -71,32 +75,58 @@ internal class ReportActionRequestEventsUseCaseTest { @Test fun `Does not add event if no extras`() = runTest { // When - useCase.invoke(ActionFactory.getFlowRequest(extras = emptyMap())) + useCase.invoke(ActionFactory.getIdentifyRequest(extras = emptyMap())) // Then coVerify { sessionEventRepository.addOrUpdateEvent(withArg { it !is SuspiciousIntentEvent }) } } @Test - fun `Adds all required events for flow action`() = runTest { - useCase(ActionFactory.getFlowRequest()) + fun `Adds all required events for enrol action`() = runTest { + useCase(ActionFactory.getEnrolRequest()) coVerify { sessionEventRepository.addOrUpdateEvent(withArg { it is ConnectivitySnapshotEvent }) - sessionEventRepository.addOrUpdateEvent(withArg { it is EnrolmentCalloutEvent }) + sessionEventRepository.addOrUpdateEvent(withArg { it is EnrolmentCalloutEventV3 }) recentUserActivityManager.updateRecentUserActivity(any()) } } @Test - fun `Adds all required events for follow up action`() = runTest { - useCase(ActionFactory.getFolowUpRequest()) + fun `Adds all required events for confirmation action`() = runTest { + useCase(ActionFactory.getConfirmationRequest()) coVerify { - sessionEventRepository.addOrUpdateEvent(withArg { it is EnrolmentCalloutEvent }) + sessionEventRepository.addOrUpdateEvent(withArg { it is EnrolmentCalloutEventV3 }) + sessionEventRepository.addOrUpdateEvent(withArg { it is ConfirmationCalloutEventV3 }) recentUserActivityManager.updateRecentUserActivity(any()) + sessionEventRepository.addOrUpdateEvent(withArg { it !is ConnectivitySnapshotEvent }) } + } + + @Test + fun `Adds callout for identify action`() = runTest { + useCase(ActionFactory.getIdentifyRequest()) + coVerify { - sessionEventRepository.addOrUpdateEvent(withArg { it !is ConnectivitySnapshotEvent }) + sessionEventRepository.addOrUpdateEvent(withArg { it is IdentificationCalloutEventV3 }) + } + } + + @Test + fun `Adds callout for verify action`() = runTest { + useCase(ActionFactory.getVerifyRequest()) + + coVerify { + sessionEventRepository.addOrUpdateEvent(withArg { it is VerificationCalloutEventV3 }) + } + } + + @Test + fun `Adds callout for enrol last action`() = runTest { + useCase(ActionFactory.getEnrolLastRequest()) + + coVerify { + sessionEventRepository.addOrUpdateEvent(withArg { it is EnrolmentLastBiometricsCalloutEventV3 }) } } diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/ApiEventPayload.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/ApiEventPayload.kt index c226ab7e1d..74d0a76ccb 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/ApiEventPayload.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/ApiEventPayload.kt @@ -75,11 +75,11 @@ import com.simprints.infra.events.event.domain.models.callback.ErrorCallbackEven import com.simprints.infra.events.event.domain.models.callback.IdentificationCallbackEvent.IdentificationCallbackPayload import com.simprints.infra.events.event.domain.models.callback.RefusalCallbackEvent.RefusalCallbackPayload import com.simprints.infra.events.event.domain.models.callback.VerificationCallbackEvent.VerificationCallbackPayload -import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEvent.ConfirmationCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEvent.EnrolmentCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEvent.EnrolmentLastBiometricsCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEvent.IdentificationCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEvent.VerificationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3.ConfirmationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3.EnrolmentCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3.EnrolmentLastBiometricsCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3.IdentificationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3.VerificationCalloutPayload import com.simprints.infra.events.event.domain.models.downsync.EventDownSyncRequestEvent import com.simprints.infra.events.event.domain.models.face.FaceCaptureBiometricsEvent import com.simprints.infra.events.event.domain.models.face.FaceCaptureConfirmationEvent.FaceCaptureConfirmationPayload @@ -90,7 +90,7 @@ import com.simprints.infra.events.event.domain.models.fingerprint.FingerprintCap import com.simprints.infra.events.event.domain.models.fingerprint.FingerprintCaptureEvent import com.simprints.infra.events.event.domain.models.upsync.EventUpSyncRequestEvent import com.simprints.infra.eventsync.event.remote.models.callback.ApiCallbackPayload -import com.simprints.infra.eventsync.event.remote.models.callout.ApiCalloutPayload +import com.simprints.infra.eventsync.event.remote.models.callout.ApiCalloutPayloadV3 import com.simprints.infra.eventsync.event.remote.models.downsync.ApiEventDownSyncRequestPayload import com.simprints.infra.eventsync.event.remote.models.face.ApiFaceCaptureBiometricsPayload import com.simprints.infra.eventsync.event.remote.models.face.ApiFaceCaptureConfirmationPayload @@ -132,11 +132,11 @@ internal fun EventPayload.fromDomainToApi(): ApiEventPayload = when (this.type) FACE_CAPTURE -> ApiFaceCapturePayload(this as FaceCaptureEvent.FaceCapturePayload) FACE_CAPTURE_CONFIRMATION -> ApiFaceCaptureConfirmationPayload(this as FaceCaptureConfirmationPayload) SCANNER_FIRMWARE_UPDATE -> ApiScannerFirmwareUpdatePayload(this as ScannerFirmwareUpdatePayload) - CALLOUT_CONFIRMATION -> ApiCalloutPayload(this as ConfirmationCalloutPayload) - CALLOUT_IDENTIFICATION -> ApiCalloutPayload(this as IdentificationCalloutPayload) - CALLOUT_ENROLMENT -> ApiCalloutPayload(this as EnrolmentCalloutPayload) - CALLOUT_VERIFICATION -> ApiCalloutPayload(this as VerificationCalloutPayload) - CALLOUT_LAST_BIOMETRICS -> ApiCalloutPayload(this as EnrolmentLastBiometricsCalloutPayload) + CALLOUT_CONFIRMATION -> ApiCalloutPayloadV3(this as ConfirmationCalloutPayload) + CALLOUT_IDENTIFICATION -> ApiCalloutPayloadV3(this as IdentificationCalloutPayload) + CALLOUT_ENROLMENT -> ApiCalloutPayloadV3(this as EnrolmentCalloutPayload) + CALLOUT_VERIFICATION -> ApiCalloutPayloadV3(this as VerificationCalloutPayload) + CALLOUT_LAST_BIOMETRICS -> ApiCalloutPayloadV3(this as EnrolmentLastBiometricsCalloutPayload) CALLBACK_IDENTIFICATION -> ApiCallbackPayload(this as IdentificationCallbackPayload) CALLBACK_ENROLMENT -> ApiCallbackPayload(this as EnrolmentCallbackPayload) CALLBACK_REFUSAL -> ApiCallbackPayload(this as RefusalCallbackPayload) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutIntegrationInfo.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutIntegrationInfo.kt deleted file mode 100644 index 16539b5597..0000000000 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutIntegrationInfo.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.simprints.infra.eventsync.event.remote.models.callout - -import androidx.annotation.Keep - -@Keep -internal enum class ApiCalloutIntegrationInfo { - ODK, - STANDARD, -} diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayload.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayloadV3.kt similarity index 85% rename from infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayload.kt rename to infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayloadV3.kt index 8b96f49a2b..123a1586ce 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayload.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayloadV3.kt @@ -4,24 +4,24 @@ import androidx.annotation.Keep import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.annotation.JsonInclude.Include import com.simprints.infra.config.store.models.TokenKeyType -import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEvent.ConfirmationCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEvent.EnrolmentCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEvent.EnrolmentLastBiometricsCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEvent.IdentificationCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEvent.VerificationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3.ConfirmationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3.EnrolmentCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3.EnrolmentLastBiometricsCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3.IdentificationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3.VerificationCalloutPayload import com.simprints.infra.eventsync.event.remote.models.ApiEventPayload import com.simprints.infra.eventsync.event.remote.models.ApiTimestamp import com.simprints.infra.eventsync.event.remote.models.fromDomainToApi @Keep @JsonInclude(Include.NON_NULL) -internal data class ApiCalloutPayload( +internal data class ApiCalloutPayloadV3( override val startTime: ApiTimestamp, val callout: ApiCallout, ) : ApiEventPayload(startTime) { constructor(domainPayload: EnrolmentCalloutPayload) : this( domainPayload.createdAt.fromDomainToApi(), - ApiEnrolmentCallout( + ApiEnrolmentCalloutV3( domainPayload.projectId, domainPayload.userId.value, domainPayload.moduleId.value, @@ -32,7 +32,7 @@ internal data class ApiCalloutPayload( constructor(domainPayload: IdentificationCalloutPayload) : this( domainPayload.createdAt.fromDomainToApi(), - ApiIdentificationCallout( + ApiIdentificationCalloutV3( domainPayload.projectId, domainPayload.userId.value, domainPayload.moduleId.value, @@ -43,7 +43,7 @@ internal data class ApiCalloutPayload( constructor(domainPayload: VerificationCalloutPayload) : this( domainPayload.createdAt.fromDomainToApi(), - ApiVerificationCallout( + ApiVerificationCalloutV3( domainPayload.projectId, domainPayload.userId.value, domainPayload.moduleId.value, @@ -55,7 +55,7 @@ internal data class ApiCalloutPayload( constructor(domainPayload: ConfirmationCalloutPayload) : this( domainPayload.createdAt.fromDomainToApi(), - ApiConfirmationCallout( + ApiConfirmationCalloutV3( domainPayload.selectedGuid, domainPayload.sessionId, ), @@ -63,7 +63,7 @@ internal data class ApiCalloutPayload( constructor(domainPayload: EnrolmentLastBiometricsCalloutPayload) : this( domainPayload.createdAt.fromDomainToApi(), - ApiEnrolmentLastBiometricsCallout( + ApiEnrolmentLastBiometricsCalloutV3( domainPayload.projectId, domainPayload.userId.value, domainPayload.moduleId.value, diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiConfirmationCallout.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiConfirmationCalloutV3.kt similarity index 81% rename from infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiConfirmationCallout.kt rename to infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiConfirmationCalloutV3.kt index 1a48adc5c4..e462780288 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiConfirmationCallout.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiConfirmationCalloutV3.kt @@ -3,7 +3,7 @@ package com.simprints.infra.eventsync.event.remote.models.callout import androidx.annotation.Keep @Keep -internal data class ApiConfirmationCallout( +internal data class ApiConfirmationCalloutV3( val selectedGuid: String, val sessionId: String, ) : ApiCallout(ApiCalloutType.Confirmation) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCallout.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCalloutV3.kt similarity index 87% rename from infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCallout.kt rename to infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCalloutV3.kt index f03a75627d..0827b5803d 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCallout.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCalloutV3.kt @@ -3,7 +3,7 @@ package com.simprints.infra.eventsync.event.remote.models.callout import androidx.annotation.Keep @Keep -internal data class ApiEnrolmentCallout( +internal data class ApiEnrolmentCalloutV3( val projectId: String, val userId: String, val moduleId: String, diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentLastBiometricsCallout.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentLastBiometricsCalloutV3.kt similarity index 88% rename from infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentLastBiometricsCallout.kt rename to infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentLastBiometricsCalloutV3.kt index 9fddaaad2b..34771ae4c4 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentLastBiometricsCallout.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentLastBiometricsCalloutV3.kt @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include @Keep @JsonInclude(Include.NON_NULL) -internal data class ApiEnrolmentLastBiometricsCallout( +internal data class ApiEnrolmentLastBiometricsCalloutV3( val projectId: String, val userId: String, val moduleId: String, diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCallout.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCalloutV3.kt similarity index 86% rename from infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCallout.kt rename to infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCalloutV3.kt index d85ea3845d..826cdf3429 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCallout.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCalloutV3.kt @@ -3,7 +3,7 @@ package com.simprints.infra.eventsync.event.remote.models.callout import androidx.annotation.Keep @Keep -internal data class ApiIdentificationCallout( +internal data class ApiIdentificationCalloutV3( val projectId: String, val userId: String, val moduleId: String, diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCallout.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCalloutV3.kt similarity index 87% rename from infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCallout.kt rename to infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCalloutV3.kt index a9ce35c117..131960745e 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCallout.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCalloutV3.kt @@ -3,7 +3,7 @@ package com.simprints.infra.eventsync.event.remote.models.callout import androidx.annotation.Keep @Keep -internal data class ApiVerificationCallout( +internal data class ApiVerificationCalloutV3( val projectId: String, val userId: String, val moduleId: String, diff --git a/infra/event-sync/src/test/java/com/simprints/infra/eventsync/event/EventValidationUtils.kt b/infra/event-sync/src/test/java/com/simprints/infra/eventsync/event/EventValidationUtils.kt index 06976423a6..a8bde5969b 100644 --- a/infra/event-sync/src/test/java/com/simprints/infra/eventsync/event/EventValidationUtils.kt +++ b/infra/event-sync/src/test/java/com/simprints/infra/eventsync/event/EventValidationUtils.kt @@ -143,7 +143,7 @@ fun verifyCallbackErrorApiModel(json: JSONObject) { } fun validateCalloutEventApiModel(json: JSONObject) { - validateCommonParams(json, "Callout", 2) + validateCommonParams(json, "Callout", 3) with(json.getJSONObject("payload")) { validateTimestamp(getJSONObject("startTime")) with(getJSONObject("callout")) { @@ -178,7 +178,8 @@ fun verifyCalloutVerificationApiModel(json: JSONObject) { assertThat(json.getString("moduleId")).isNotNull() assertThat(json.getString("verifyGuid")).isNotNull() assertThat(json.getString("metadata")).isNotNull() - assertThat(json.length()).isEqualTo(6) + assertThat(json.getString("biometricDataSource")).isNotNull() + assertThat(json.length()).isEqualTo(7) } fun verifyCalloutIdentificationApiModel(json: JSONObject) { @@ -187,7 +188,8 @@ fun verifyCalloutIdentificationApiModel(json: JSONObject) { assertThat(json.getString("userId")).isNotNull() assertThat(json.getString("moduleId")).isNotNull() assertThat(json.getString("metadata")).isNotNull() - assertThat(json.length()).isEqualTo(5) + assertThat(json.getString("biometricDataSource")).isNotNull() + assertThat(json.length()).isEqualTo(6) } fun verifyCalloutEnrolmentApiModel(json: JSONObject) { @@ -196,7 +198,8 @@ fun verifyCalloutEnrolmentApiModel(json: JSONObject) { assertThat(json.getString("userId")).isNotNull() assertThat(json.getString("moduleId")).isNotNull() assertThat(json.getString("metadata")).isNotNull() - assertThat(json.length()).isEqualTo(5) + assertThat(json.getString("biometricDataSource")).isNotNull() + assertThat(json.length()).isEqualTo(6) } fun verifyCalloutConfirmationApiModel(json: JSONObject) { diff --git a/infra/events/src/debug/java/com/simprints/infra/events/sampledata/EventFactoryUtils.kt b/infra/events/src/debug/java/com/simprints/infra/events/sampledata/EventFactoryUtils.kt index a50e6da948..f508f98a68 100644 --- a/infra/events/src/debug/java/com/simprints/infra/events/sampledata/EventFactoryUtils.kt +++ b/infra/events/src/debug/java/com/simprints/infra/events/sampledata/EventFactoryUtils.kt @@ -59,11 +59,11 @@ import com.simprints.infra.events.event.domain.models.callback.ErrorCallbackEven import com.simprints.infra.events.event.domain.models.callback.IdentificationCallbackEvent import com.simprints.infra.events.event.domain.models.callback.RefusalCallbackEvent import com.simprints.infra.events.event.domain.models.callback.VerificationCallbackEvent -import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEvent +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3 import com.simprints.infra.events.event.domain.models.downsync.EventDownSyncRequestEvent import com.simprints.infra.events.event.domain.models.face.FaceCaptureBiometricsEvent import com.simprints.infra.events.event.domain.models.face.FaceCaptureConfirmationEvent @@ -181,14 +181,14 @@ fun createVerificationCallbackEventV2() = VerificationCallbackEvent( CallbackComparisonScore(GUID1, 1, MEDIUM), ) -fun createConfirmationCalloutEvent() = ConfirmationCalloutEvent( +fun createConfirmationCalloutEvent() = ConfirmationCalloutEventV3( CREATED_AT, DEFAULT_PROJECT_ID, GUID1, GUID2, ) -fun createEnrolmentCalloutEvent(projectId: String = DEFAULT_PROJECT_ID) = EnrolmentCalloutEvent( +fun createEnrolmentCalloutEvent(projectId: String = DEFAULT_PROJECT_ID) = EnrolmentCalloutEventV3( CREATED_AT, projectId, DEFAULT_USER_ID, @@ -198,7 +198,7 @@ fun createEnrolmentCalloutEvent(projectId: String = DEFAULT_PROJECT_ID) = Enrolm projectId, ) -fun createIdentificationCalloutEvent() = IdentificationCalloutEvent( +fun createIdentificationCalloutEvent() = IdentificationCalloutEventV3( CREATED_AT, DEFAULT_PROJECT_ID, DEFAULT_USER_ID, @@ -207,7 +207,7 @@ fun createIdentificationCalloutEvent() = IdentificationCalloutEvent( DEFAULT_BIOMETRIC_DATA_SOURCE, ) -fun createLastBiometricsEnrolmentCalloutEvent() = EnrolmentLastBiometricsCalloutEvent( +fun createLastBiometricsEnrolmentCalloutEvent() = EnrolmentLastBiometricsCalloutEventV3( CREATED_AT, DEFAULT_PROJECT_ID, DEFAULT_USER_ID, @@ -216,7 +216,7 @@ fun createLastBiometricsEnrolmentCalloutEvent() = EnrolmentLastBiometricsCallout GUID2, ) -fun createVerificationCalloutEvent() = VerificationCalloutEvent( +fun createVerificationCalloutEvent() = VerificationCalloutEventV3( CREATED_AT, DEFAULT_PROJECT_ID, DEFAULT_USER_ID, diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/Event.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/Event.kt index 9c143ed770..dde7444623 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/Event.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/Event.kt @@ -17,10 +17,15 @@ import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLBA import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLBACK_REFUSAL_KEY import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLBACK_VERIFICATION_KEY import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLOUT_CONFIRMATION_KEY +import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLOUT_CONFIRMATION_V3_KEY import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLOUT_ENROLMENT_KEY +import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLOUT_ENROLMENT_V3_KEY import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLOUT_IDENTIFICATION_KEY +import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLOUT_IDENTIFICATION_V3_KEY import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLOUT_LAST_BIOMETRICS_KEY +import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLOUT_LAST_BIOMETRICS_V3_KEY import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLOUT_VERIFICATION_KEY +import com.simprints.infra.events.event.domain.models.EventType.Companion.CALLOUT_VERIFICATION_V3_KEY import com.simprints.infra.events.event.domain.models.EventType.Companion.CANDIDATE_READ_KEY import com.simprints.infra.events.event.domain.models.EventType.Companion.COMPLETION_CHECK_KEY import com.simprints.infra.events.event.domain.models.EventType.Companion.CONNECTIVITY_SNAPSHOT_KEY @@ -54,11 +59,16 @@ import com.simprints.infra.events.event.domain.models.callback.ErrorCallbackEven import com.simprints.infra.events.event.domain.models.callback.IdentificationCallbackEvent import com.simprints.infra.events.event.domain.models.callback.RefusalCallbackEvent import com.simprints.infra.events.event.domain.models.callback.VerificationCallbackEvent -import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEvent +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3 import com.simprints.infra.events.event.domain.models.downsync.EventDownSyncRequestEvent import com.simprints.infra.events.event.domain.models.face.FaceCaptureBiometricsEvent import com.simprints.infra.events.event.domain.models.face.FaceCaptureConfirmationEvent @@ -79,34 +89,24 @@ import com.simprints.infra.events.event.domain.models.upsync.EventUpSyncRequestE JsonSubTypes.Type(value = ConfirmationCallbackEvent::class, name = CALLBACK_CONFIRMATION_KEY), JsonSubTypes.Type(value = EnrolmentCallbackEvent::class, name = CALLBACK_ENROLMENT_KEY), JsonSubTypes.Type(value = ErrorCallbackEvent::class, name = CALLBACK_ERROR_KEY), - JsonSubTypes.Type( - value = IdentificationCallbackEvent::class, - name = CALLBACK_IDENTIFICATION_KEY, - ), + JsonSubTypes.Type(value = IdentificationCallbackEvent::class, name = CALLBACK_IDENTIFICATION_KEY), JsonSubTypes.Type(value = RefusalCallbackEvent::class, name = CALLBACK_REFUSAL_KEY), JsonSubTypes.Type(value = VerificationCallbackEvent::class, name = CALLBACK_VERIFICATION_KEY), - JsonSubTypes.Type(value = ConfirmationCalloutEvent::class, name = CALLOUT_CONFIRMATION_KEY), - JsonSubTypes.Type(value = EnrolmentCalloutEvent::class, name = CALLOUT_ENROLMENT_KEY), - JsonSubTypes.Type( - value = EnrolmentLastBiometricsCalloutEvent::class, - name = CALLOUT_LAST_BIOMETRICS_KEY, - ), - JsonSubTypes.Type(value = IdentificationCalloutEvent::class, name = CALLOUT_IDENTIFICATION_KEY), - JsonSubTypes.Type(value = VerificationCalloutEvent::class, name = CALLOUT_VERIFICATION_KEY), - JsonSubTypes.Type( - value = FaceCaptureConfirmationEvent::class, - name = FACE_CAPTURE_CONFIRMATION_KEY, - ), + JsonSubTypes.Type(value = ConfirmationCalloutEventV2::class, name = CALLOUT_CONFIRMATION_KEY), + JsonSubTypes.Type(value = ConfirmationCalloutEventV3::class, name = CALLOUT_CONFIRMATION_V3_KEY), + JsonSubTypes.Type(value = EnrolmentCalloutEventV2::class, name = CALLOUT_ENROLMENT_KEY), + JsonSubTypes.Type(value = EnrolmentCalloutEventV3::class, name = CALLOUT_ENROLMENT_V3_KEY), + JsonSubTypes.Type(value = EnrolmentLastBiometricsCalloutEventV2::class, name = CALLOUT_LAST_BIOMETRICS_KEY), + JsonSubTypes.Type(value = EnrolmentLastBiometricsCalloutEventV3::class, name = CALLOUT_LAST_BIOMETRICS_V3_KEY), + JsonSubTypes.Type(value = IdentificationCalloutEventV2::class, name = CALLOUT_IDENTIFICATION_KEY), + JsonSubTypes.Type(value = IdentificationCalloutEventV3::class, name = CALLOUT_IDENTIFICATION_V3_KEY), + JsonSubTypes.Type(value = VerificationCalloutEventV2::class, name = CALLOUT_VERIFICATION_KEY), + JsonSubTypes.Type(value = VerificationCalloutEventV3::class, name = CALLOUT_VERIFICATION_V3_KEY), + JsonSubTypes.Type(value = FaceCaptureConfirmationEvent::class, name = FACE_CAPTURE_CONFIRMATION_KEY), JsonSubTypes.Type(value = FaceCaptureEvent::class, name = FACE_CAPTURE_KEY), - JsonSubTypes.Type( - value = FaceCaptureBiometricsEvent::class, - name = FACE_CAPTURE_BIOMETRICS_KEY, - ), + JsonSubTypes.Type(value = FaceCaptureBiometricsEvent::class, name = FACE_CAPTURE_BIOMETRICS_KEY), JsonSubTypes.Type(value = FaceFallbackCaptureEvent::class, name = FACE_FALLBACK_CAPTURE_KEY), - JsonSubTypes.Type( - value = FaceOnboardingCompleteEvent::class, - name = FACE_ONBOARDING_COMPLETE_KEY, - ), + JsonSubTypes.Type(value = FaceOnboardingCompleteEvent::class, name = FACE_ONBOARDING_COMPLETE_KEY), JsonSubTypes.Type(value = AlertScreenEvent::class, name = ALERT_SCREEN_KEY), JsonSubTypes.Type(value = AuthenticationEvent::class, name = AUTHENTICATION_KEY), JsonSubTypes.Type(value = AuthorizationEvent::class, name = AUTHORIZATION_KEY), @@ -117,10 +117,7 @@ import com.simprints.infra.events.event.domain.models.upsync.EventUpSyncRequestE JsonSubTypes.Type(value = EnrolmentEventV2::class, name = ENROLMENT_V2_KEY), JsonSubTypes.Type(value = EnrolmentEventV4::class, name = ENROLMENT_V4_KEY), JsonSubTypes.Type(value = FingerprintCaptureEvent::class, name = FINGERPRINT_CAPTURE_KEY), - JsonSubTypes.Type( - value = FingerprintCaptureBiometricsEvent::class, - name = FINGERPRINT_CAPTURE_BIOMETRICS_KEY, - ), + JsonSubTypes.Type(value = FingerprintCaptureBiometricsEvent::class, name = FINGERPRINT_CAPTURE_BIOMETRICS_KEY), JsonSubTypes.Type(value = GuidSelectionEvent::class, name = GUID_SELECTION_KEY), JsonSubTypes.Type(value = IntentParsingEvent::class, name = INTENT_PARSING_KEY), JsonSubTypes.Type(value = InvalidIntentEvent::class, name = INVALID_INTENT_KEY), @@ -129,10 +126,7 @@ import com.simprints.infra.events.event.domain.models.upsync.EventUpSyncRequestE JsonSubTypes.Type(value = PersonCreationEvent::class, name = PERSON_CREATION_KEY), JsonSubTypes.Type(value = RefusalEvent::class, name = REFUSAL_KEY), JsonSubTypes.Type(value = ScannerConnectionEvent::class, name = SCANNER_CONNECTION_KEY), - JsonSubTypes.Type( - value = ScannerFirmwareUpdateEvent::class, - name = SCANNER_FIRMWARE_UPDATE_KEY, - ), + JsonSubTypes.Type(value = ScannerFirmwareUpdateEvent::class, name = SCANNER_FIRMWARE_UPDATE_KEY), JsonSubTypes.Type(value = SuspiciousIntentEvent::class, name = SUSPICIOUS_INTENT_KEY), JsonSubTypes.Type(value = Vero2InfoSnapshotEvent::class, name = VERO_2_INFO_SNAPSHOT_KEY), JsonSubTypes.Type(value = EventDownSyncRequestEvent::class, name = EVENT_DOWN_SYNC_REQUEST_KEY), diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/EventPayload.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/EventPayload.kt index 8018878ee1..28fcc90092 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/EventPayload.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/EventPayload.kt @@ -31,11 +31,11 @@ import com.simprints.infra.events.event.domain.models.callback.ErrorCallbackEven import com.simprints.infra.events.event.domain.models.callback.IdentificationCallbackEvent.IdentificationCallbackPayload import com.simprints.infra.events.event.domain.models.callback.RefusalCallbackEvent.RefusalCallbackPayload import com.simprints.infra.events.event.domain.models.callback.VerificationCallbackEvent.VerificationCallbackPayload -import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEvent.ConfirmationCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEvent.EnrolmentCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEvent.EnrolmentLastBiometricsCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEvent.IdentificationCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEvent.VerificationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3.ConfirmationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3.EnrolmentCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3.EnrolmentLastBiometricsCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3.IdentificationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3.VerificationCalloutPayload import com.simprints.infra.events.event.domain.models.downsync.EventDownSyncRequestEvent.EventDownSyncRequestPayload import com.simprints.infra.events.event.domain.models.face.FaceCaptureBiometricsEvent.FaceCaptureBiometricsPayload import com.simprints.infra.events.event.domain.models.face.FaceCaptureConfirmationEvent.FaceCaptureConfirmationPayload diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEvent.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV3.kt similarity index 89% rename from infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEvent.kt rename to infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV3.kt index fbe897a2bf..10fc9893ee 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEvent.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV3.kt @@ -7,11 +7,11 @@ import com.simprints.infra.config.store.models.TokenKeyType import com.simprints.infra.events.event.domain.models.Event import com.simprints.infra.events.event.domain.models.EventPayload import com.simprints.infra.events.event.domain.models.EventType -import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_CONFIRMATION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_CONFIRMATION_V3 import java.util.UUID @Keep -data class ConfirmationCalloutEvent( +data class ConfirmationCalloutEventV3( override val id: String = UUID.randomUUID().toString(), override val payload: ConfirmationCalloutPayload, override val type: EventType, @@ -26,7 +26,7 @@ data class ConfirmationCalloutEvent( ) : this( UUID.randomUUID().toString(), ConfirmationCalloutPayload(createdAt, EVENT_VERSION, projectId, selectedGuid, sessionId), - CALLOUT_CONFIRMATION, + CALLOUT_CONFIRMATION_V3, ) override fun getTokenizableFields(): Map = emptyMap() @@ -41,12 +41,12 @@ data class ConfirmationCalloutEvent( val selectedGuid: String, val sessionId: String, override val endedAt: Timestamp? = null, - override val type: EventType = CALLOUT_CONFIRMATION, + override val type: EventType = CALLOUT_CONFIRMATION_V3, ) : EventPayload() { override fun toSafeString(): String = "guid: $selectedGuid, session ID: $sessionId" } companion object { - const val EVENT_VERSION = 2 + const val EVENT_VERSION = 3 } } diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEvent.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV3.kt similarity index 93% rename from infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEvent.kt rename to infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV3.kt index 00de4c9133..e6959dc088 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEvent.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV3.kt @@ -7,11 +7,11 @@ import com.simprints.infra.config.store.models.TokenKeyType import com.simprints.infra.events.event.domain.models.Event import com.simprints.infra.events.event.domain.models.EventPayload import com.simprints.infra.events.event.domain.models.EventType -import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_ENROLMENT +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_ENROLMENT_V3 import java.util.UUID @Keep -data class EnrolmentCalloutEvent( +data class EnrolmentCalloutEventV3( override val id: String = UUID.randomUUID().toString(), override val payload: EnrolmentCalloutPayload, override val type: EventType, @@ -37,7 +37,7 @@ data class EnrolmentCalloutEvent( metadata = metadata, biometricDataSource = biometricDataSource, ), - CALLOUT_ENROLMENT, + CALLOUT_ENROLMENT_V3, ) override fun getTokenizableFields(): Map = mapOf( @@ -62,12 +62,12 @@ data class EnrolmentCalloutEvent( val metadata: String?, val biometricDataSource: BiometricDataSource, override val endedAt: Timestamp? = null, - override val type: EventType = CALLOUT_ENROLMENT, + override val type: EventType = CALLOUT_ENROLMENT_V3, ) : EventPayload() { override fun toSafeString(): String = "module: $moduleId, metadata: $metadata, biometricDataSource: $biometricDataSource" } companion object { - const val EVENT_VERSION = 2 + const val EVENT_VERSION = 3 } } diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEvent.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV3.kt similarity index 91% rename from infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEvent.kt rename to infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV3.kt index 247fa27968..8112787ce8 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEvent.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV3.kt @@ -7,11 +7,11 @@ import com.simprints.infra.config.store.models.TokenKeyType import com.simprints.infra.events.event.domain.models.Event import com.simprints.infra.events.event.domain.models.EventPayload import com.simprints.infra.events.event.domain.models.EventType -import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_LAST_BIOMETRICS +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_LAST_BIOMETRICS_V3 import java.util.UUID @Keep -data class EnrolmentLastBiometricsCalloutEvent( +data class EnrolmentLastBiometricsCalloutEventV3( override val id: String = UUID.randomUUID().toString(), override val payload: EnrolmentLastBiometricsCalloutPayload, override val type: EventType, @@ -36,7 +36,7 @@ data class EnrolmentLastBiometricsCalloutEvent( metadata = metadata, sessionId = sessionId, ), - CALLOUT_LAST_BIOMETRICS, + CALLOUT_LAST_BIOMETRICS_V3, ) override fun getTokenizableFields(): Map = mapOf( @@ -61,12 +61,12 @@ data class EnrolmentLastBiometricsCalloutEvent( val metadata: String?, val sessionId: String, override val endedAt: Timestamp? = null, - override val type: EventType = CALLOUT_LAST_BIOMETRICS, + override val type: EventType = CALLOUT_LAST_BIOMETRICS_V3, ) : EventPayload() { override fun toSafeString(): String = "metadata: $metadata, session ID: $sessionId" } companion object { - const val EVENT_VERSION = 2 + const val EVENT_VERSION = 3 } } diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEvent.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV3.kt similarity index 92% rename from infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEvent.kt rename to infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV3.kt index 9ed4e50fc9..1855358614 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEvent.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV3.kt @@ -7,11 +7,11 @@ import com.simprints.infra.config.store.models.TokenKeyType import com.simprints.infra.events.event.domain.models.Event import com.simprints.infra.events.event.domain.models.EventPayload import com.simprints.infra.events.event.domain.models.EventType -import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_IDENTIFICATION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_IDENTIFICATION_V3 import java.util.UUID @Keep -data class IdentificationCalloutEvent( +data class IdentificationCalloutEventV3( override val id: String = UUID.randomUUID().toString(), override val payload: IdentificationCalloutPayload, override val type: EventType, @@ -36,7 +36,7 @@ data class IdentificationCalloutEvent( metadata = metadata, biometricDataSource = biometricDataSource, ), - CALLOUT_IDENTIFICATION, + CALLOUT_IDENTIFICATION_V3, ) override fun getTokenizableFields(): Map = mapOf( @@ -61,12 +61,12 @@ data class IdentificationCalloutEvent( val metadata: String?, val biometricDataSource: BiometricDataSource, override val endedAt: Timestamp? = null, - override val type: EventType = CALLOUT_IDENTIFICATION, + override val type: EventType = CALLOUT_IDENTIFICATION_V3, ) : EventPayload() { override fun toSafeString(): String = "module ID: $moduleId, metadata: $metadata, biometricDataSource: $biometricDataSource" } companion object { - const val EVENT_VERSION = 2 + const val EVENT_VERSION = 3 } } diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEvent.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV3.kt similarity index 92% rename from infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEvent.kt rename to infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV3.kt index ad9fb002cb..b4f9f4e303 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEvent.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV3.kt @@ -7,11 +7,11 @@ import com.simprints.infra.config.store.models.TokenKeyType import com.simprints.infra.events.event.domain.models.Event import com.simprints.infra.events.event.domain.models.EventPayload import com.simprints.infra.events.event.domain.models.EventType -import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_VERIFICATION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_VERIFICATION_V3 import java.util.UUID @Keep -data class VerificationCalloutEvent( +data class VerificationCalloutEventV3( override val id: String = UUID.randomUUID().toString(), override val payload: VerificationCalloutPayload, override val type: EventType, @@ -38,7 +38,7 @@ data class VerificationCalloutEvent( metadata = metadata, biometricDataSource = biometricDataSource, ), - CALLOUT_VERIFICATION, + CALLOUT_VERIFICATION_V3, ) override fun getTokenizableFields(): Map = mapOf( @@ -64,12 +64,12 @@ data class VerificationCalloutEvent( val metadata: String, val biometricDataSource: BiometricDataSource, override val endedAt: Timestamp? = null, - override val type: EventType = CALLOUT_VERIFICATION, + override val type: EventType = CALLOUT_VERIFICATION_V3, ) : EventPayload() { override fun toSafeString(): String = "module ID: $moduleId, guid: $verifyGuid, metadata: $metadata, biometricDataSource: $biometricDataSource" } companion object { - const val EVENT_VERSION = 2 + const val EVENT_VERSION = 3 } } diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/EventPayloadTest.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/EventPayloadTest.kt index 118b4e440f..0692b9176a 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/EventPayloadTest.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/EventPayloadTest.kt @@ -26,11 +26,11 @@ import com.simprints.infra.events.event.domain.models.callback.ErrorCallbackEven import com.simprints.infra.events.event.domain.models.callback.IdentificationCallbackEvent import com.simprints.infra.events.event.domain.models.callback.RefusalCallbackEvent import com.simprints.infra.events.event.domain.models.callback.VerificationCallbackEvent -import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEvent -import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEvent +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3 import com.simprints.infra.events.event.domain.models.downsync.EventDownSyncRequestEvent import com.simprints.infra.events.event.domain.models.downsync.EventDownSyncRequestEvent.QueryParameters import com.simprints.infra.events.event.domain.models.face.FaceCaptureBiometricsEvent @@ -43,6 +43,7 @@ import com.simprints.infra.events.event.domain.models.fingerprint.FingerprintCap import com.simprints.infra.events.event.domain.models.fingerprint.FingerprintCaptureEvent import com.simprints.infra.events.sampledata.FACE_TEMPLATE_FORMAT import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_BIOMETRIC_DATA_SOURCE import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_MODULE_ID import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_PROJECT_ID @@ -83,15 +84,16 @@ class EventPayloadTest { createdAt = CREATED_AT, score = CallbackComparisonScore(GUID1, 1, AppMatchConfidence.NONE), ), - ConfirmationCalloutEvent(CREATED_AT, DEFAULT_PROJECT_ID, GUID1, GUID2), - EnrolmentCalloutEvent( + ConfirmationCalloutEventV3(CREATED_AT, DEFAULT_PROJECT_ID, GUID1, GUID2), + EnrolmentCalloutEventV3( createdAt = CREATED_AT, projectId = DEFAULT_PROJECT_ID, userId = DEFAULT_USER_ID, moduleId = DEFAULT_MODULE_ID, metadata = DEFAULT_METADATA, + biometricDataSource = DEFAULT_BIOMETRIC_DATA_SOURCE, ), - EnrolmentLastBiometricsCalloutEvent( + EnrolmentLastBiometricsCalloutEventV3( createdAt = CREATED_AT, projectId = DEFAULT_PROJECT_ID, userId = DEFAULT_USER_ID, @@ -99,20 +101,22 @@ class EventPayloadTest { metadata = DEFAULT_METADATA, sessionId = GUID1, ), - IdentificationCalloutEvent( + IdentificationCalloutEventV3( createdAt = CREATED_AT, projectId = DEFAULT_PROJECT_ID, userId = DEFAULT_USER_ID, moduleId = DEFAULT_MODULE_ID, metadata = DEFAULT_METADATA, + biometricDataSource = DEFAULT_BIOMETRIC_DATA_SOURCE, ), - VerificationCalloutEvent( + VerificationCalloutEventV3( createdAt = CREATED_AT, projectId = DEFAULT_PROJECT_ID, userId = DEFAULT_USER_ID, moduleId = DEFAULT_MODULE_ID, verifyGuid = GUID1, metadata = DEFAULT_METADATA, + biometricDataSource = DEFAULT_BIOMETRIC_DATA_SOURCE, ), EventDownSyncRequestEvent( createdAt = CREATED_AT, diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventTest.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV3Test.kt similarity index 75% rename from infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventTest.kt rename to infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV3Test.kt index 1ff0722a31..2d2d2b4c4e 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventTest.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV3Test.kt @@ -2,8 +2,8 @@ package com.simprints.infra.events.event.domain.models.callout import androidx.annotation.Keep import com.google.common.truth.Truth.assertThat -import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_CONFIRMATION -import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEvent.Companion.EVENT_VERSION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_CONFIRMATION_V3 +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3.Companion.EVENT_VERSION import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_PROJECT_ID import com.simprints.infra.events.sampledata.SampleDefaults.GUID1 @@ -11,17 +11,17 @@ import com.simprints.infra.events.sampledata.SampleDefaults.GUID2 import org.junit.Test @Keep -class ConfirmationCalloutEventTest { +class ConfirmationCalloutEventV3Test { @Test fun create_ConfirmationCalloutEvent() { - val event = ConfirmationCalloutEvent(CREATED_AT, DEFAULT_PROJECT_ID, GUID1, GUID2) + val event = ConfirmationCalloutEventV3(CREATED_AT, DEFAULT_PROJECT_ID, GUID1, GUID2) assertThat(event.id).isNotNull() - assertThat(event.type).isEqualTo(CALLOUT_CONFIRMATION) + assertThat(event.type).isEqualTo(CALLOUT_CONFIRMATION_V3) with(event.payload) { assertThat(createdAt).isEqualTo(CREATED_AT) assertThat(eventVersion).isEqualTo(EVENT_VERSION) - assertThat(type).isEqualTo(CALLOUT_CONFIRMATION) + assertThat(type).isEqualTo(CALLOUT_CONFIRMATION_V3) assertThat(projectId).isEqualTo(DEFAULT_PROJECT_ID) assertThat(selectedGuid).isEqualTo(GUID1) assertThat(sessionId).isEqualTo(GUID2) diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventTest.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV3Test.kt similarity index 85% rename from infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventTest.kt rename to infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV3Test.kt index d44a2f4cd6..947306ab32 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventTest.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV3Test.kt @@ -2,8 +2,8 @@ package com.simprints.infra.events.event.domain.models.callout import androidx.annotation.Keep import com.google.common.truth.Truth.assertThat -import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_ENROLMENT -import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEvent.Companion.EVENT_VERSION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_ENROLMENT_V3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3.Companion.EVENT_VERSION import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_BIOMETRIC_DATA_SOURCE import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA @@ -13,10 +13,10 @@ import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_USER_ID import org.junit.Test @Keep -class EnrolmentCalloutEventTest { +class EnrolmentCalloutEventV3Test { @Test fun create_EnrolmentCalloutEvent() { - val event = EnrolmentCalloutEvent( + val event = EnrolmentCalloutEventV3( createdAt = CREATED_AT, projectId = DEFAULT_PROJECT_ID, userId = DEFAULT_USER_ID, @@ -26,11 +26,11 @@ class EnrolmentCalloutEventTest { ) assertThat(event.id).isNotNull() - assertThat(event.type).isEqualTo(CALLOUT_ENROLMENT) + assertThat(event.type).isEqualTo(CALLOUT_ENROLMENT_V3) with(event.payload) { assertThat(createdAt).isEqualTo(CREATED_AT) assertThat(eventVersion).isEqualTo(EVENT_VERSION) - assertThat(type).isEqualTo(CALLOUT_ENROLMENT) + assertThat(type).isEqualTo(CALLOUT_ENROLMENT_V3) assertThat(projectId).isEqualTo(DEFAULT_PROJECT_ID) assertThat(userId).isEqualTo(DEFAULT_USER_ID) assertThat(moduleId).isEqualTo(DEFAULT_MODULE_ID) diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventTest.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV3Test.kt similarity index 85% rename from infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventTest.kt rename to infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV3Test.kt index 49bd9571a1..1ccce15dfb 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventTest.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV3Test.kt @@ -2,8 +2,8 @@ package com.simprints.infra.events.event.domain.models.callout import androidx.annotation.Keep import com.google.common.truth.Truth.assertThat -import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_LAST_BIOMETRICS -import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEvent.Companion.EVENT_VERSION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_LAST_BIOMETRICS_V3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3.Companion.EVENT_VERSION import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_MODULE_ID @@ -13,10 +13,10 @@ import com.simprints.infra.events.sampledata.SampleDefaults.GUID1 import org.junit.Test @Keep -class EnrolmentLastBiometricsCalloutEventTest { +class EnrolmentLastBiometricsCalloutEventV3Test { @Test fun create_EnrolmentLastBiometricsCalloutEvent() { - val event = EnrolmentLastBiometricsCalloutEvent( + val event = EnrolmentLastBiometricsCalloutEventV3( createdAt = CREATED_AT, projectId = DEFAULT_PROJECT_ID, userId = DEFAULT_USER_ID, @@ -26,11 +26,11 @@ class EnrolmentLastBiometricsCalloutEventTest { ) assertThat(event.id).isNotNull() - assertThat(event.type).isEqualTo(CALLOUT_LAST_BIOMETRICS) + assertThat(event.type).isEqualTo(CALLOUT_LAST_BIOMETRICS_V3) with(event.payload) { assertThat(createdAt).isEqualTo(CREATED_AT) assertThat(eventVersion).isEqualTo(EVENT_VERSION) - assertThat(type).isEqualTo(CALLOUT_LAST_BIOMETRICS) + assertThat(type).isEqualTo(CALLOUT_LAST_BIOMETRICS_V3) assertThat(projectId).isEqualTo(DEFAULT_PROJECT_ID) assertThat(userId).isEqualTo(DEFAULT_USER_ID) assertThat(moduleId).isEqualTo(DEFAULT_MODULE_ID) diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventTest.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV3Test.kt similarity index 84% rename from infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventTest.kt rename to infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV3Test.kt index 8178bcf1c7..a483dbaed3 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventTest.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV3Test.kt @@ -2,8 +2,8 @@ package com.simprints.infra.events.event.domain.models.callout import androidx.annotation.Keep import com.google.common.truth.Truth.assertThat -import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_IDENTIFICATION -import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEvent.Companion.EVENT_VERSION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_IDENTIFICATION_V3 +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3.Companion.EVENT_VERSION import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_BIOMETRIC_DATA_SOURCE import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA @@ -13,10 +13,10 @@ import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_USER_ID import org.junit.Test @Keep -class IdentificationCalloutEventTest { +class IdentificationCalloutEventV3Test { @Test fun create_IdentificationCalloutEvent() { - val event = IdentificationCalloutEvent( + val event = IdentificationCalloutEventV3( createdAt = CREATED_AT, projectId = DEFAULT_PROJECT_ID, userId = DEFAULT_USER_ID, @@ -26,11 +26,11 @@ class IdentificationCalloutEventTest { ) assertThat(event.id).isNotNull() - assertThat(event.type).isEqualTo(CALLOUT_IDENTIFICATION) + assertThat(event.type).isEqualTo(CALLOUT_IDENTIFICATION_V3) with(event.payload) { assertThat(createdAt).isEqualTo(CREATED_AT) assertThat(eventVersion).isEqualTo(EVENT_VERSION) - assertThat(type).isEqualTo(CALLOUT_IDENTIFICATION) + assertThat(type).isEqualTo(CALLOUT_IDENTIFICATION_V3) assertThat(projectId).isEqualTo(DEFAULT_PROJECT_ID) assertThat(userId).isEqualTo(DEFAULT_USER_ID) assertThat(moduleId).isEqualTo(DEFAULT_MODULE_ID) diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventTest.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV3Test.kt similarity index 86% rename from infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventTest.kt rename to infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV3Test.kt index 86d0565e5a..94d74eaf86 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventTest.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV3Test.kt @@ -2,8 +2,8 @@ package com.simprints.infra.events.event.domain.models.callout import androidx.annotation.Keep import com.google.common.truth.Truth.assertThat -import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_VERIFICATION -import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEvent.Companion.EVENT_VERSION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_VERIFICATION_V3 +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3.Companion.EVENT_VERSION import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_BIOMETRIC_DATA_SOURCE import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA @@ -14,10 +14,10 @@ import com.simprints.infra.events.sampledata.SampleDefaults.GUID1 import org.junit.Test @Keep -class VerificationCalloutEventTest { +class VerificationCalloutEventV3Test { @Test fun create_VerificationCalloutEvent() { - val event = VerificationCalloutEvent( + val event = VerificationCalloutEventV3( createdAt = CREATED_AT, projectId = DEFAULT_PROJECT_ID, userId = DEFAULT_USER_ID, @@ -28,11 +28,11 @@ class VerificationCalloutEventTest { ) assertThat(event.id).isNotNull() - assertThat(event.type).isEqualTo(CALLOUT_VERIFICATION) + assertThat(event.type).isEqualTo(CALLOUT_VERIFICATION_V3) with(event.payload) { assertThat(createdAt).isEqualTo(CREATED_AT) assertThat(eventVersion).isEqualTo(EVENT_VERSION) - assertThat(type).isEqualTo(CALLOUT_VERIFICATION) + assertThat(type).isEqualTo(CALLOUT_VERIFICATION_V3) assertThat(projectId).isEqualTo(DEFAULT_PROJECT_ID) assertThat(userId).isEqualTo(DEFAULT_USER_ID) assertThat(moduleId).isEqualTo(DEFAULT_MODULE_ID) diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/local/migrations/EventMigrationTest.kt b/infra/events/src/test/java/com/simprints/infra/events/event/local/migrations/EventMigrationTest.kt index b7d3a9f7a9..8410831378 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/local/migrations/EventMigrationTest.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/local/migrations/EventMigrationTest.kt @@ -34,7 +34,7 @@ class EventMigrationTest { EventRoomDatabase::class.java, ) - private val allEventTypes = EventType.values() + private val allEventTypes = EventType.entries @Test fun `validate all the migrations are successful`() { diff --git a/infra/events/src/test/resources/all-events/callout_confirmation_v3.json b/infra/events/src/test/resources/all-events/callout_confirmation_v3.json new file mode 100644 index 0000000000..823d531987 --- /dev/null +++ b/infra/events/src/test/resources/all-events/callout_confirmation_v3.json @@ -0,0 +1,19 @@ +{ + "id": "a1e2c3d4-5678-4f9a-bcde-1234567890ab", + "type": "CALLOUT_CONFIRMATION_V3", + "labels": { + "projectId": "TEST6Oai41ps1pBNrzBL", + "sessionId": "e35c39f9-b81e-48f2-97e7-46ecc8399bb4", + "deviceId": "f2fd8393c0a0be67" + }, + "payload": { + "type": "CALLOUT_CONFIRMATION_V3", + "eventVersion": 1, + "createdAt": 95145678901, + "endedAt": 0, + "projectId": "TEST6Oai41ps1pBNrzBL", + "sessionId": "e35c39f9-b81e-48f2-97e7-46ecc8399bb4", + "selectedGuid": "7c815bb6-b536-4090-b625-c831d544074b", + "biometricDataSource": "SIMPRINTS" + } +} diff --git a/infra/events/src/test/resources/all-events/callout_enrolment_last_biometrics_v3.json b/infra/events/src/test/resources/all-events/callout_enrolment_last_biometrics_v3.json new file mode 100644 index 0000000000..55597de5e7 --- /dev/null +++ b/infra/events/src/test/resources/all-events/callout_enrolment_last_biometrics_v3.json @@ -0,0 +1,27 @@ +{ + "id": "c3e4f5d6-789a-4bcd-ef01-3456789021cd", + "type": "CALLOUT_LAST_BIOMETRICS_V3", + "labels": { + "projectId": "TEST6Oai41ps1pBNrzBL", + "sessionId": "e35c39f9-b81e-48f2-97e7-46ecc8399bb4", + "deviceId": "f2fd8393c0a0be67" + }, + "payload": { + "type": "CALLOUT_LAST_BIOMETRICS_V3", + "eventVersion": 1, + "createdAt": 43145678901, + "endedAt": 0, + "projectId": "TEST6Oai41ps1pBNrzBL", + "userId": { + "className": "TokenizableString.Raw", + "value": "user1" + }, + "moduleId": { + "className": "TokenizableString.Raw", + "value": "module1" + }, + "sessionId": "e35c39f9-b81e-48f2-97e7-46ecc8399bb4", + "metadata": "test", + "biometricDataSource": "SIMPRINTS" + } +} diff --git a/infra/events/src/test/resources/all-events/callout_enrolment_v3.json b/infra/events/src/test/resources/all-events/callout_enrolment_v3.json new file mode 100644 index 0000000000..f8b8843199 --- /dev/null +++ b/infra/events/src/test/resources/all-events/callout_enrolment_v3.json @@ -0,0 +1,26 @@ +{ + "id": "b2f3e4c5-6789-4fab-cdef-2345678901bc", + "type": "CALLOUT_ENROLMENT_V3", + "labels": { + "projectId": "TEST6Oai41ps1pBNrzBL", + "sessionId": "e35c39f9-b81e-48f2-97e7-46ecc8399bb4", + "deviceId": "f2fd8393c0a0be67" + }, + "payload": { + "type": "CALLOUT_ENROLMENT_V3", + "eventVersion": 1, + "createdAt": 65145678901, + "endedAt": 0, + "projectId": "TEST6Oai41ps1pBNrzBL", + "userId": { + "className": "TokenizableString.Raw", + "value": "user1" + }, + "moduleId": { + "className": "TokenizableString.Raw", + "value": "module1" + }, + "metadata": "test", + "biometricDataSource": "SIMPRINTS" + } +} diff --git a/infra/events/src/test/resources/all-events/callout_identification_v3.json b/infra/events/src/test/resources/all-events/callout_identification_v3.json new file mode 100644 index 0000000000..d4e379ca8c --- /dev/null +++ b/infra/events/src/test/resources/all-events/callout_identification_v3.json @@ -0,0 +1,26 @@ +{ + "id": "d4f5e6a7-89ab-4cde-f012-4567890132de", + "type": "CALLOUT_IDENTIFICATION_V3", + "labels": { + "projectId": "TEST6Oai41ps1pBNrzBL", + "sessionId": "e35c39f9-b81e-48f2-97e7-46ecc8399bb4", + "deviceId": "f2fd8393c0a0be67" + }, + "payload": { + "type": "CALLOUT_IDENTIFICATION_V3", + "eventVersion": 1, + "createdAt": 65142378901, + "endedAt": 0, + "projectId": "TEST6Oai41ps1pBNrzBL", + "userId": { + "className": "TokenizableString.Raw", + "value": "user1" + }, + "moduleId": { + "className": "TokenizableString.Raw", + "value": "module1" + }, + "metadata": "test", + "biometricDataSource": "SIMPRINTS" + } +} diff --git a/infra/events/src/test/resources/all-events/callout_verification_v3.json b/infra/events/src/test/resources/all-events/callout_verification_v3.json new file mode 100644 index 0000000000..36b7288fd4 --- /dev/null +++ b/infra/events/src/test/resources/all-events/callout_verification_v3.json @@ -0,0 +1,27 @@ +{ + "id": "e5a6b7c8-90bc-4def-1234-5678901432ef", + "type": "CALLOUT_VERIFICATION_V3", + "labels": { + "projectId": "TEST6Oai41ps1pBNrzBL", + "sessionId": "e35c39f9-b81e-48f2-97e7-46ecc8399bb4", + "deviceId": "f2fd8393c0a0be67" + }, + "payload": { + "type": "CALLOUT_VERIFICATION_V3", + "eventVersion": 1, + "createdAt": 65145678901, + "endedAt": 0, + "projectId": "TEST6Oai41ps1pBNrzBL", + "userId": { + "className": "TokenizableString.Raw", + "value": "user1" + }, + "moduleId": { + "className": "TokenizableString.Raw", + "value": "module1" + }, + "verifyGuid": "7a424bbc-0c40-459d-a4b8-e61dcc42979e", + "metadata": "test", + "biometricDataSource": "SIMPRINTS" + } +} From b6ccd85e1c5094024e8e6365109f56c8c51721a2 Mon Sep 17 00:00:00 2001 From: Marinov Date: Wed, 4 Jun 2025 20:18:35 +0300 Subject: [PATCH 3/5] [MS-932] Add V2 callout events --- .../event/domain/models/EventPayload.kt | 30 +++++--- .../events/event/domain/models/EventType.kt | 20 +++++ .../callout/ConfirmationCalloutEventV2.kt | 53 ++++++++++++++ .../models/callout/EnrolmentCalloutEventV2.kt | 71 ++++++++++++++++++ .../EnrolmentLastBiometricsCalloutEventV2.kt | 73 +++++++++++++++++++ .../callout/IdentificationCalloutEventV2.kt | 70 ++++++++++++++++++ .../callout/VerificationCalloutEventV2.kt | 73 +++++++++++++++++++ .../callout/ConfirmationCalloutEventV2Test.kt | 37 ++++++++++ .../callout/ConfirmationCalloutEventV3Test.kt | 7 ++ .../callout/EnrolmentCalloutEventV2Test.kt | 55 ++++++++++++++ .../callout/EnrolmentCalloutEventV3Test.kt | 18 +++++ ...rolmentLastBiometricsCalloutEventV2Test.kt | 58 +++++++++++++++ ...rolmentLastBiometricsCalloutEventV3Test.kt | 18 +++++ .../IdentificationCalloutEventV2Test.kt | 55 ++++++++++++++ .../IdentificationCalloutEventV3Test.kt | 18 +++++ .../callout/VerificationCalloutEventV2Test.kt | 59 +++++++++++++++ .../callout/VerificationCalloutEventV3Test.kt | 19 +++++ 17 files changed, 724 insertions(+), 10 deletions(-) create mode 100644 infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV2.kt create mode 100644 infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV2.kt create mode 100644 infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV2.kt create mode 100644 infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV2.kt create mode 100644 infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV2.kt create mode 100644 infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV2Test.kt create mode 100644 infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV2Test.kt create mode 100644 infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV2Test.kt create mode 100644 infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV2Test.kt create mode 100644 infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV2Test.kt diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/EventPayload.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/EventPayload.kt index 28fcc90092..12c1fd5f1d 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/EventPayload.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/EventPayload.kt @@ -31,11 +31,16 @@ import com.simprints.infra.events.event.domain.models.callback.ErrorCallbackEven import com.simprints.infra.events.event.domain.models.callback.IdentificationCallbackEvent.IdentificationCallbackPayload import com.simprints.infra.events.event.domain.models.callback.RefusalCallbackEvent.RefusalCallbackPayload import com.simprints.infra.events.event.domain.models.callback.VerificationCallbackEvent.VerificationCallbackPayload -import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3.ConfirmationCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3.EnrolmentCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3.EnrolmentLastBiometricsCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3.IdentificationCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3.VerificationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3 import com.simprints.infra.events.event.domain.models.downsync.EventDownSyncRequestEvent.EventDownSyncRequestPayload import com.simprints.infra.events.event.domain.models.face.FaceCaptureBiometricsEvent.FaceCaptureBiometricsPayload import com.simprints.infra.events.event.domain.models.face.FaceCaptureConfirmationEvent.FaceCaptureConfirmationPayload @@ -54,11 +59,16 @@ import com.simprints.infra.events.event.domain.models.upsync.EventUpSyncRequestE JsonSubTypes.Type(value = IdentificationCallbackPayload::class, name = EventType.CALLBACK_IDENTIFICATION_KEY), JsonSubTypes.Type(value = RefusalCallbackPayload::class, name = EventType.CALLBACK_REFUSAL_KEY), JsonSubTypes.Type(value = VerificationCallbackPayload::class, name = EventType.CALLBACK_VERIFICATION_KEY), - JsonSubTypes.Type(value = ConfirmationCalloutPayload::class, name = EventType.CALLOUT_CONFIRMATION_KEY), - JsonSubTypes.Type(value = EnrolmentCalloutPayload::class, name = EventType.CALLOUT_ENROLMENT_KEY), - JsonSubTypes.Type(value = EnrolmentLastBiometricsCalloutPayload::class, name = EventType.CALLOUT_LAST_BIOMETRICS_KEY), - JsonSubTypes.Type(value = IdentificationCalloutPayload::class, name = EventType.CALLOUT_IDENTIFICATION_KEY), - JsonSubTypes.Type(value = VerificationCalloutPayload::class, name = EventType.CALLOUT_VERIFICATION_KEY), + JsonSubTypes.Type(value = ConfirmationCalloutEventV2.ConfirmationCalloutPayload::class, name = EventType.CALLOUT_CONFIRMATION_KEY), + JsonSubTypes.Type(value = ConfirmationCalloutEventV3.ConfirmationCalloutPayload::class, name = EventType.CALLOUT_CONFIRMATION_V3_KEY), + JsonSubTypes.Type(value = EnrolmentCalloutEventV2.EnrolmentCalloutPayload::class, name = EventType.CALLOUT_ENROLMENT_KEY), + JsonSubTypes.Type(value = EnrolmentCalloutEventV3.EnrolmentCalloutPayload::class, name = EventType.CALLOUT_ENROLMENT_V3_KEY), + JsonSubTypes.Type(value = EnrolmentLastBiometricsCalloutEventV2.EnrolmentLastBiometricsCalloutPayload::class, name = EventType.CALLOUT_LAST_BIOMETRICS_KEY), + JsonSubTypes.Type(value = EnrolmentLastBiometricsCalloutEventV3.EnrolmentLastBiometricsCalloutPayload::class, name = EventType.CALLOUT_LAST_BIOMETRICS_V3_KEY), + JsonSubTypes.Type(value = IdentificationCalloutEventV2.IdentificationCalloutPayload::class, name = EventType.CALLOUT_IDENTIFICATION_KEY), + JsonSubTypes.Type(value = IdentificationCalloutEventV3.IdentificationCalloutPayload::class, name = EventType.CALLOUT_IDENTIFICATION_V3_KEY), + JsonSubTypes.Type(value = VerificationCalloutEventV2.VerificationCalloutPayload::class, name = EventType.CALLOUT_VERIFICATION_KEY), + JsonSubTypes.Type(value = VerificationCalloutEventV3.VerificationCalloutPayload::class, name = EventType.CALLOUT_VERIFICATION_V3_KEY), JsonSubTypes.Type(value = FaceCaptureConfirmationPayload::class, name = EventType.FACE_CAPTURE_CONFIRMATION_KEY), JsonSubTypes.Type(value = FaceCapturePayload::class, name = EventType.FACE_CAPTURE_KEY), JsonSubTypes.Type(value = FaceCaptureBiometricsPayload::class, name = EventType.FACE_CAPTURE_BIOMETRICS_KEY), diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/EventType.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/EventType.kt index c67dd9f77d..aa7bf0ff56 100644 --- a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/EventType.kt +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/EventType.kt @@ -65,18 +65,33 @@ enum class EventType { // key added: CALLOUT_CONFIRMATION_KEY CALLOUT_CONFIRMATION, + // key added: CALLOUT_CONFIRMATION_V3_KEY + CALLOUT_CONFIRMATION_V3, + // key added: CALLOUT_IDENTIFICATION_KEY CALLOUT_IDENTIFICATION, + // key added: CALLOUT_IDENTIFICATION_V3_KEY + CALLOUT_IDENTIFICATION_V3, + // key added: CALLOUT_ENROLMENT_KEY CALLOUT_ENROLMENT, + // key added: CALLOUT_ENROLMENT_V3_KEY + CALLOUT_ENROLMENT_V3, + // key added: CALLOUT_VERIFICATION_KEY CALLOUT_VERIFICATION, + // key added: CALLOUT_VERIFICATION_V3_KEY + CALLOUT_VERIFICATION_V3, + // key added: CALLOUT_LAST_BIOMETRICS_KEY CALLOUT_LAST_BIOMETRICS, + // key added: CALLOUT_LAST_BIOMETRICS_V3_KEY + CALLOUT_LAST_BIOMETRICS_V3, + // key added: CALLBACK_IDENTIFICATION_KEY CALLBACK_IDENTIFICATION, @@ -145,10 +160,15 @@ enum class EventType { const val CALLBACK_ERROR_KEY = "CALLBACK_ERROR" const val CALLBACK_CONFIRMATION_KEY = "CALLBACK_CONFIRMATION" const val CALLOUT_CONFIRMATION_KEY = "CALLOUT_CONFIRMATION" + const val CALLOUT_CONFIRMATION_V3_KEY = "CALLOUT_CONFIRMATION_V3" const val CALLOUT_IDENTIFICATION_KEY = "CALLOUT_IDENTIFICATION" + const val CALLOUT_IDENTIFICATION_V3_KEY = "CALLOUT_IDENTIFICATION_V3" const val CALLOUT_ENROLMENT_KEY = "CALLOUT_ENROLMENT" + const val CALLOUT_ENROLMENT_V3_KEY = "CALLOUT_ENROLMENT_V3" const val CALLOUT_VERIFICATION_KEY = "CALLOUT_VERIFICATION" + const val CALLOUT_VERIFICATION_V3_KEY = "CALLOUT_VERIFICATION_V3" const val CALLOUT_LAST_BIOMETRICS_KEY = "CALLOUT_LAST_BIOMETRICS" + const val CALLOUT_LAST_BIOMETRICS_V3_KEY = "CALLOUT_LAST_BIOMETRICS_V3" const val CALLBACK_IDENTIFICATION_KEY = "CALLBACK_IDENTIFICATION" const val FACE_ONBOARDING_COMPLETE_KEY = "FACE_ONBOARDING_COMPLETE" const val FACE_FALLBACK_CAPTURE_KEY = "FACE_FALLBACK_CAPTURE" diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV2.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV2.kt new file mode 100644 index 0000000000..51630b8c2a --- /dev/null +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV2.kt @@ -0,0 +1,53 @@ +package com.simprints.infra.events.event.domain.models.callout + +import androidx.annotation.Keep +import com.simprints.core.domain.tokenization.TokenizableString +import com.simprints.core.tools.time.Timestamp +import com.simprints.infra.config.store.models.TokenKeyType +import com.simprints.infra.events.event.domain.models.Event +import com.simprints.infra.events.event.domain.models.EventPayload +import com.simprints.infra.events.event.domain.models.EventType +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_CONFIRMATION +import java.util.UUID + +@Keep +@Deprecated("Replaced by v3 in 2025.2.0") +data class ConfirmationCalloutEventV2( + override val id: String = UUID.randomUUID().toString(), + override val payload: ConfirmationCalloutPayload, + override val type: EventType, + override var scopeId: String? = null, + override var projectId: String? = null, +) : Event() { + constructor( + createdAt: Timestamp, + projectId: String, + selectedGuid: String, + sessionId: String, + ) : this( + UUID.randomUUID().toString(), + ConfirmationCalloutPayload(createdAt, EVENT_VERSION, projectId, selectedGuid, sessionId), + CALLOUT_CONFIRMATION, + ) + + override fun getTokenizableFields(): Map = emptyMap() + + override fun setTokenizedFields(map: Map) = this // No tokenized fields + + @Keep + data class ConfirmationCalloutPayload( + override val createdAt: Timestamp, + override val eventVersion: Int, + val projectId: String, + val selectedGuid: String, + val sessionId: String, + override val endedAt: Timestamp? = null, + override val type: EventType = CALLOUT_CONFIRMATION, + ) : EventPayload() { + override fun toSafeString(): String = "guid: $selectedGuid, session ID: $sessionId" + } + + companion object { + const val EVENT_VERSION = 2 + } +} diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV2.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV2.kt new file mode 100644 index 0000000000..be2f5fb8d3 --- /dev/null +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV2.kt @@ -0,0 +1,71 @@ +package com.simprints.infra.events.event.domain.models.callout + +import androidx.annotation.Keep +import com.simprints.core.domain.tokenization.TokenizableString +import com.simprints.core.tools.time.Timestamp +import com.simprints.infra.config.store.models.TokenKeyType +import com.simprints.infra.events.event.domain.models.Event +import com.simprints.infra.events.event.domain.models.EventPayload +import com.simprints.infra.events.event.domain.models.EventType +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_ENROLMENT +import java.util.UUID + +@Keep +@Deprecated("Replaced by v3 in 2025.2.0") +data class EnrolmentCalloutEventV2( + override val id: String = UUID.randomUUID().toString(), + override val payload: EnrolmentCalloutPayload, + override val type: EventType, + override var scopeId: String? = null, + override var projectId: String? = null, +) : Event() { + constructor( + createdAt: Timestamp, + projectId: String, + userId: TokenizableString, + moduleId: TokenizableString, + metadata: String?, + id: String = UUID.randomUUID().toString(), + ) : this( + id, + EnrolmentCalloutPayload( + createdAt = createdAt, + eventVersion = EVENT_VERSION, + projectId = projectId, + userId = userId, + moduleId = moduleId, + metadata = metadata, + ), + CALLOUT_ENROLMENT, + ) + + override fun getTokenizableFields(): Map = mapOf( + TokenKeyType.AttendantId to payload.userId, + TokenKeyType.ModuleId to payload.moduleId, + ) + + override fun setTokenizedFields(map: Map) = this.copy( + payload = payload.copy( + userId = map[TokenKeyType.AttendantId] ?: payload.userId, + moduleId = map[TokenKeyType.ModuleId] ?: payload.moduleId, + ), + ) + + @Keep + data class EnrolmentCalloutPayload( + override val createdAt: Timestamp, + override val eventVersion: Int, + val projectId: String, + val userId: TokenizableString, + val moduleId: TokenizableString, + val metadata: String?, + override val endedAt: Timestamp? = null, + override val type: EventType = CALLOUT_ENROLMENT, + ) : EventPayload() { + override fun toSafeString(): String = "module: $moduleId, metadata: $metadata" + } + + companion object { + const val EVENT_VERSION = 2 + } +} diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV2.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV2.kt new file mode 100644 index 0000000000..283c7d5e6d --- /dev/null +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV2.kt @@ -0,0 +1,73 @@ +package com.simprints.infra.events.event.domain.models.callout + +import androidx.annotation.Keep +import com.simprints.core.domain.tokenization.TokenizableString +import com.simprints.core.tools.time.Timestamp +import com.simprints.infra.config.store.models.TokenKeyType +import com.simprints.infra.events.event.domain.models.Event +import com.simprints.infra.events.event.domain.models.EventPayload +import com.simprints.infra.events.event.domain.models.EventType +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_LAST_BIOMETRICS +import java.util.UUID + +@Keep +@Deprecated("Replaced by v3 in 2025.2.0") +data class EnrolmentLastBiometricsCalloutEventV2( + override val id: String = UUID.randomUUID().toString(), + override val payload: EnrolmentLastBiometricsCalloutPayload, + override val type: EventType, + override var scopeId: String? = null, + override var projectId: String? = null, +) : Event() { + constructor( + createdAt: Timestamp, + projectId: String, + userId: TokenizableString, + moduleId: TokenizableString, + metadata: String?, + sessionId: String, + ) : this( + UUID.randomUUID().toString(), + EnrolmentLastBiometricsCalloutPayload( + createdAt = createdAt, + eventVersion = EVENT_VERSION, + projectId = projectId, + userId = userId, + moduleId = moduleId, + metadata = metadata, + sessionId = sessionId, + ), + CALLOUT_LAST_BIOMETRICS, + ) + + override fun getTokenizableFields(): Map = mapOf( + TokenKeyType.AttendantId to payload.userId, + TokenKeyType.ModuleId to payload.moduleId, + ) + + override fun setTokenizedFields(map: Map) = this.copy( + payload = payload.copy( + userId = map[TokenKeyType.AttendantId] ?: payload.userId, + moduleId = map[TokenKeyType.ModuleId] ?: payload.moduleId, + ), + ) + + @Keep + data class EnrolmentLastBiometricsCalloutPayload( + override val createdAt: Timestamp, + override val eventVersion: Int, + val projectId: String, + val userId: TokenizableString, + val moduleId: TokenizableString, + val metadata: String?, + val sessionId: String, + override val endedAt: Timestamp? = null, + override val type: EventType = CALLOUT_LAST_BIOMETRICS, + ) : EventPayload() { + override fun toSafeString(): String = "metadata: $metadata, session ID: $sessionId" + } + + companion object { + const val EVENT_VERSION = 2 + } +} diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV2.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV2.kt new file mode 100644 index 0000000000..87113448d0 --- /dev/null +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV2.kt @@ -0,0 +1,70 @@ +package com.simprints.infra.events.event.domain.models.callout + +import androidx.annotation.Keep +import com.simprints.core.domain.tokenization.TokenizableString +import com.simprints.core.tools.time.Timestamp +import com.simprints.infra.config.store.models.TokenKeyType +import com.simprints.infra.events.event.domain.models.Event +import com.simprints.infra.events.event.domain.models.EventPayload +import com.simprints.infra.events.event.domain.models.EventType +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_IDENTIFICATION +import java.util.UUID + +@Keep +@Deprecated("Replaced by v3 in 2025.2.0") +data class IdentificationCalloutEventV2( + override val id: String = UUID.randomUUID().toString(), + override val payload: IdentificationCalloutPayload, + override val type: EventType, + override var scopeId: String? = null, + override var projectId: String? = null, +) : Event() { + constructor( + createdAt: Timestamp, + projectId: String, + userId: TokenizableString, + moduleId: TokenizableString, + metadata: String?, + ) : this( + UUID.randomUUID().toString(), + IdentificationCalloutPayload( + createdAt = createdAt, + eventVersion = EVENT_VERSION, + projectId = projectId, + userId = userId, + moduleId = moduleId, + metadata = metadata, + ), + CALLOUT_IDENTIFICATION, + ) + + override fun getTokenizableFields(): Map = mapOf( + TokenKeyType.AttendantId to payload.userId, + TokenKeyType.ModuleId to payload.moduleId, + ) + + override fun setTokenizedFields(map: Map) = this.copy( + payload = payload.copy( + userId = map[TokenKeyType.AttendantId] ?: payload.userId, + moduleId = map[TokenKeyType.ModuleId] ?: payload.moduleId, + ), + ) + + @Keep + data class IdentificationCalloutPayload( + override val createdAt: Timestamp, + override val eventVersion: Int, + val projectId: String, + val userId: TokenizableString, + val moduleId: TokenizableString, + val metadata: String?, + override val endedAt: Timestamp? = null, + override val type: EventType = CALLOUT_IDENTIFICATION, + ) : EventPayload() { + override fun toSafeString(): String = "module ID: $moduleId, metadata: $metadata" + } + + companion object { + const val EVENT_VERSION = 2 + } +} diff --git a/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV2.kt b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV2.kt new file mode 100644 index 0000000000..b4edb7abf6 --- /dev/null +++ b/infra/events/src/main/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV2.kt @@ -0,0 +1,73 @@ +package com.simprints.infra.events.event.domain.models.callout + +import androidx.annotation.Keep +import com.simprints.core.domain.tokenization.TokenizableString +import com.simprints.core.tools.time.Timestamp +import com.simprints.infra.config.store.models.TokenKeyType +import com.simprints.infra.events.event.domain.models.Event +import com.simprints.infra.events.event.domain.models.EventPayload +import com.simprints.infra.events.event.domain.models.EventType +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_VERIFICATION +import java.util.UUID + +@Keep +@Deprecated("Replaced by v3 in 2025.2.0") +data class VerificationCalloutEventV2( + override val id: String = UUID.randomUUID().toString(), + override val payload: VerificationCalloutPayload, + override val type: EventType, + override var scopeId: String? = null, + override var projectId: String? = null, +) : Event() { + constructor( + createdAt: Timestamp, + projectId: String, + userId: TokenizableString, + moduleId: TokenizableString, + verifyGuid: String, + metadata: String, + ) : this( + UUID.randomUUID().toString(), + VerificationCalloutPayload( + createdAt = createdAt, + eventVersion = EVENT_VERSION, + projectId = projectId, + userId = userId, + moduleId = moduleId, + verifyGuid = verifyGuid, + metadata = metadata, + ), + CALLOUT_VERIFICATION, + ) + + override fun getTokenizableFields(): Map = mapOf( + TokenKeyType.AttendantId to payload.userId, + TokenKeyType.ModuleId to payload.moduleId, + ) + + override fun setTokenizedFields(map: Map) = this.copy( + payload = payload.copy( + userId = map[TokenKeyType.AttendantId] ?: payload.userId, + moduleId = map[TokenKeyType.ModuleId] ?: payload.moduleId, + ), + ) + + @Keep + data class VerificationCalloutPayload( + override val createdAt: Timestamp, + override val eventVersion: Int, + val projectId: String, + val userId: TokenizableString, + val moduleId: TokenizableString, + val verifyGuid: String, + val metadata: String, + override val endedAt: Timestamp? = null, + override val type: EventType = CALLOUT_VERIFICATION, + ) : EventPayload() { + override fun toSafeString(): String = "module ID: $moduleId, guid: $verifyGuid, metadata: $metadata" + } + + companion object { + const val EVENT_VERSION = 2 + } +} diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV2Test.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV2Test.kt new file mode 100644 index 0000000000..270fea4498 --- /dev/null +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV2Test.kt @@ -0,0 +1,37 @@ +package com.simprints.infra.events.event.domain.models.callout + +import androidx.annotation.Keep +import com.google.common.truth.Truth.assertThat +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_CONFIRMATION +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV2.Companion.EVENT_VERSION +import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_PROJECT_ID +import com.simprints.infra.events.sampledata.SampleDefaults.GUID1 +import com.simprints.infra.events.sampledata.SampleDefaults.GUID2 +import org.junit.Test + +@Keep +class ConfirmationCalloutEventV2Test { + @Test + fun create_ConfirmationCalloutEvent() { + val event = ConfirmationCalloutEventV2(CREATED_AT, DEFAULT_PROJECT_ID, GUID1, GUID2) + + assertThat(event.id).isNotNull() + assertThat(event.type).isEqualTo(CALLOUT_CONFIRMATION) + with(event.payload) { + assertThat(createdAt).isEqualTo(CREATED_AT) + assertThat(eventVersion).isEqualTo(EVENT_VERSION) + assertThat(type).isEqualTo(CALLOUT_CONFIRMATION) + assertThat(projectId).isEqualTo(DEFAULT_PROJECT_ID) + assertThat(selectedGuid).isEqualTo(GUID1) + assertThat(sessionId).isEqualTo(GUID2) + } + } + + @Test + fun getTokenizableFields_returnsEmptyMap() { + val event = ConfirmationCalloutEventV2(CREATED_AT, DEFAULT_PROJECT_ID, GUID1, GUID2) + + assertThat(event.getTokenizableFields()).isEmpty() + } +} diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV3Test.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV3Test.kt index 2d2d2b4c4e..b7c863b6df 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV3Test.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/ConfirmationCalloutEventV3Test.kt @@ -27,4 +27,11 @@ class ConfirmationCalloutEventV3Test { assertThat(sessionId).isEqualTo(GUID2) } } + + @Test + fun getTokenizableFields_returnsEmptyMap() { + val event = ConfirmationCalloutEventV3(CREATED_AT, DEFAULT_PROJECT_ID, GUID1, GUID2) + + assertThat(event.getTokenizableFields()).isEmpty() + } } diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV2Test.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV2Test.kt new file mode 100644 index 0000000000..33af3b1b9f --- /dev/null +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV2Test.kt @@ -0,0 +1,55 @@ +package com.simprints.infra.events.event.domain.models.callout + +import androidx.annotation.Keep +import com.google.common.truth.Truth.assertThat +import com.simprints.infra.config.store.models.TokenKeyType +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_ENROLMENT +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV2.Companion.EVENT_VERSION +import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_MODULE_ID +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_PROJECT_ID +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_USER_ID +import org.junit.Test + +@Keep +class EnrolmentCalloutEventV2Test { + @Test + fun create_EnrolmentCalloutEvent() { + val event = EnrolmentCalloutEventV2( + createdAt = CREATED_AT, + projectId = DEFAULT_PROJECT_ID, + userId = DEFAULT_USER_ID, + moduleId = DEFAULT_MODULE_ID, + metadata = DEFAULT_METADATA, + ) + + assertThat(event.id).isNotNull() + assertThat(event.type).isEqualTo(CALLOUT_ENROLMENT) + with(event.payload) { + assertThat(createdAt).isEqualTo(CREATED_AT) + assertThat(eventVersion).isEqualTo(EVENT_VERSION) + assertThat(type).isEqualTo(CALLOUT_ENROLMENT) + assertThat(projectId).isEqualTo(DEFAULT_PROJECT_ID) + assertThat(userId).isEqualTo(DEFAULT_USER_ID) + assertThat(moduleId).isEqualTo(DEFAULT_MODULE_ID) + assertThat(metadata).isEqualTo(DEFAULT_METADATA) + } + } + + @Test + fun getTokenizableFields_returnsMapWithAttendantAndModuleId() { + val event = EnrolmentCalloutEventV2( + createdAt = CREATED_AT, + projectId = DEFAULT_PROJECT_ID, + userId = DEFAULT_USER_ID, + moduleId = DEFAULT_MODULE_ID, + metadata = DEFAULT_METADATA, + ) + val tokenizableFields = event.getTokenizableFields() + + assertThat(tokenizableFields).hasSize(2) + assertThat(tokenizableFields[TokenKeyType.AttendantId]).isEqualTo(DEFAULT_USER_ID) + assertThat(tokenizableFields[TokenKeyType.ModuleId]).isEqualTo(DEFAULT_MODULE_ID) + } +} diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV3Test.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV3Test.kt index 947306ab32..a9f7a6e1ee 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV3Test.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentCalloutEventV3Test.kt @@ -2,6 +2,7 @@ package com.simprints.infra.events.event.domain.models.callout import androidx.annotation.Keep import com.google.common.truth.Truth.assertThat +import com.simprints.infra.config.store.models.TokenKeyType import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_ENROLMENT_V3 import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3.Companion.EVENT_VERSION import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT @@ -38,4 +39,21 @@ class EnrolmentCalloutEventV3Test { assertThat(biometricDataSource).isEqualTo(DEFAULT_BIOMETRIC_DATA_SOURCE) } } + + @Test + fun getTokenizableFields_returnsMapWithAttendantAndModuleId() { + val event = EnrolmentCalloutEventV3( + createdAt = CREATED_AT, + projectId = DEFAULT_PROJECT_ID, + userId = DEFAULT_USER_ID, + moduleId = DEFAULT_MODULE_ID, + metadata = DEFAULT_METADATA, + biometricDataSource = DEFAULT_BIOMETRIC_DATA_SOURCE, + ) + val tokenizableFields = event.getTokenizableFields() + + assertThat(tokenizableFields).hasSize(2) + assertThat(tokenizableFields[TokenKeyType.AttendantId]).isEqualTo(DEFAULT_USER_ID) + assertThat(tokenizableFields[TokenKeyType.ModuleId]).isEqualTo(DEFAULT_MODULE_ID) + } } diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV2Test.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV2Test.kt new file mode 100644 index 0000000000..882043b9d9 --- /dev/null +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV2Test.kt @@ -0,0 +1,58 @@ +package com.simprints.infra.events.event.domain.models.callout + +import androidx.annotation.Keep +import com.google.common.truth.Truth.assertThat +import com.simprints.infra.config.store.models.TokenKeyType +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_LAST_BIOMETRICS +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV2.Companion.EVENT_VERSION +import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_MODULE_ID +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_PROJECT_ID +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_USER_ID +import com.simprints.infra.events.sampledata.SampleDefaults.GUID1 +import org.junit.Test + +@Keep +class EnrolmentLastBiometricsCalloutEventV2Test { + @Test + fun create_EnrolmentLastBiometricsCalloutEvent() { + val event = EnrolmentLastBiometricsCalloutEventV2( + createdAt = CREATED_AT, + projectId = DEFAULT_PROJECT_ID, + userId = DEFAULT_USER_ID, + moduleId = DEFAULT_MODULE_ID, + metadata = DEFAULT_METADATA, + sessionId = GUID1, + ) + + assertThat(event.id).isNotNull() + assertThat(event.type).isEqualTo(CALLOUT_LAST_BIOMETRICS) + with(event.payload) { + assertThat(createdAt).isEqualTo(CREATED_AT) + assertThat(eventVersion).isEqualTo(EVENT_VERSION) + assertThat(type).isEqualTo(CALLOUT_LAST_BIOMETRICS) + assertThat(projectId).isEqualTo(DEFAULT_PROJECT_ID) + assertThat(userId).isEqualTo(DEFAULT_USER_ID) + assertThat(moduleId).isEqualTo(DEFAULT_MODULE_ID) + assertThat(metadata).isEqualTo(DEFAULT_METADATA) + } + } + + @Test + fun getTokenizableFields_returnsMapWithAttendantAndModuleId() { + val event = EnrolmentLastBiometricsCalloutEventV2( + createdAt = CREATED_AT, + projectId = DEFAULT_PROJECT_ID, + userId = DEFAULT_USER_ID, + moduleId = DEFAULT_MODULE_ID, + metadata = DEFAULT_METADATA, + sessionId = GUID1, + ) + val tokenizableFields = event.getTokenizableFields() + + assertThat(tokenizableFields).hasSize(2) + assertThat(tokenizableFields[TokenKeyType.AttendantId]).isEqualTo(DEFAULT_USER_ID) + assertThat(tokenizableFields[TokenKeyType.ModuleId]).isEqualTo(DEFAULT_MODULE_ID) + } +} diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV3Test.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV3Test.kt index 1ccce15dfb..dd3d30fd87 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV3Test.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/EnrolmentLastBiometricsCalloutEventV3Test.kt @@ -2,6 +2,7 @@ package com.simprints.infra.events.event.domain.models.callout import androidx.annotation.Keep import com.google.common.truth.Truth.assertThat +import com.simprints.infra.config.store.models.TokenKeyType import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_LAST_BIOMETRICS_V3 import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3.Companion.EVENT_VERSION import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT @@ -37,4 +38,21 @@ class EnrolmentLastBiometricsCalloutEventV3Test { assertThat(metadata).isEqualTo(DEFAULT_METADATA) } } + + @Test + fun getTokenizableFields_returnsMapWithAttendantAndModuleId() { + val event = EnrolmentLastBiometricsCalloutEventV3( + createdAt = CREATED_AT, + projectId = DEFAULT_PROJECT_ID, + userId = DEFAULT_USER_ID, + moduleId = DEFAULT_MODULE_ID, + metadata = DEFAULT_METADATA, + sessionId = GUID1, + ) + val tokenizableFields = event.getTokenizableFields() + + assertThat(tokenizableFields).hasSize(2) + assertThat(tokenizableFields[TokenKeyType.AttendantId]).isEqualTo(DEFAULT_USER_ID) + assertThat(tokenizableFields[TokenKeyType.ModuleId]).isEqualTo(DEFAULT_MODULE_ID) + } } diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV2Test.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV2Test.kt new file mode 100644 index 0000000000..9e2ed788bd --- /dev/null +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV2Test.kt @@ -0,0 +1,55 @@ +package com.simprints.infra.events.event.domain.models.callout + +import androidx.annotation.Keep +import com.google.common.truth.Truth.assertThat +import com.simprints.infra.config.store.models.TokenKeyType +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_IDENTIFICATION +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV2.Companion.EVENT_VERSION +import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_MODULE_ID +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_PROJECT_ID +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_USER_ID +import org.junit.Test + +@Keep +class IdentificationCalloutEventV2Test { + @Test + fun create_IdentificationCalloutEvent() { + val event = IdentificationCalloutEventV2( + createdAt = CREATED_AT, + projectId = DEFAULT_PROJECT_ID, + userId = DEFAULT_USER_ID, + moduleId = DEFAULT_MODULE_ID, + metadata = DEFAULT_METADATA, + ) + + assertThat(event.id).isNotNull() + assertThat(event.type).isEqualTo(CALLOUT_IDENTIFICATION) + with(event.payload) { + assertThat(createdAt).isEqualTo(CREATED_AT) + assertThat(eventVersion).isEqualTo(EVENT_VERSION) + assertThat(type).isEqualTo(CALLOUT_IDENTIFICATION) + assertThat(projectId).isEqualTo(DEFAULT_PROJECT_ID) + assertThat(userId).isEqualTo(DEFAULT_USER_ID) + assertThat(moduleId).isEqualTo(DEFAULT_MODULE_ID) + assertThat(metadata).isEqualTo(DEFAULT_METADATA) + } + } + + @Test + fun getTokenizableFields_returnsMapWithAttendantAndModuleId() { + val event = IdentificationCalloutEventV2( + createdAt = CREATED_AT, + projectId = DEFAULT_PROJECT_ID, + userId = DEFAULT_USER_ID, + moduleId = DEFAULT_MODULE_ID, + metadata = DEFAULT_METADATA, + ) + val tokenizableFields = event.getTokenizableFields() + + assertThat(tokenizableFields).hasSize(2) + assertThat(tokenizableFields[TokenKeyType.AttendantId]).isEqualTo(DEFAULT_USER_ID) + assertThat(tokenizableFields[TokenKeyType.ModuleId]).isEqualTo(DEFAULT_MODULE_ID) + } +} diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV3Test.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV3Test.kt index a483dbaed3..a8f75828c1 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV3Test.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/IdentificationCalloutEventV3Test.kt @@ -2,6 +2,7 @@ package com.simprints.infra.events.event.domain.models.callout import androidx.annotation.Keep import com.google.common.truth.Truth.assertThat +import com.simprints.infra.config.store.models.TokenKeyType import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_IDENTIFICATION_V3 import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3.Companion.EVENT_VERSION import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT @@ -38,4 +39,21 @@ class IdentificationCalloutEventV3Test { assertThat(biometricDataSource).isEqualTo(DEFAULT_BIOMETRIC_DATA_SOURCE) } } + + @Test + fun getTokenizableFields_returnsMapWithAttendantAndModuleId() { + val event = IdentificationCalloutEventV3( + createdAt = CREATED_AT, + projectId = DEFAULT_PROJECT_ID, + userId = DEFAULT_USER_ID, + moduleId = DEFAULT_MODULE_ID, + metadata = DEFAULT_METADATA, + biometricDataSource = DEFAULT_BIOMETRIC_DATA_SOURCE, + ) + val tokenizableFields = event.getTokenizableFields() + + assertThat(tokenizableFields).hasSize(2) + assertThat(tokenizableFields[TokenKeyType.AttendantId]).isEqualTo(DEFAULT_USER_ID) + assertThat(tokenizableFields[TokenKeyType.ModuleId]).isEqualTo(DEFAULT_MODULE_ID) + } } diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV2Test.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV2Test.kt new file mode 100644 index 0000000000..abf4ceb591 --- /dev/null +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV2Test.kt @@ -0,0 +1,59 @@ +package com.simprints.infra.events.event.domain.models.callout + +import androidx.annotation.Keep +import com.google.common.truth.Truth.assertThat +import com.simprints.infra.config.store.models.TokenKeyType +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_VERIFICATION +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV2.Companion.EVENT_VERSION +import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_METADATA +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_MODULE_ID +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_PROJECT_ID +import com.simprints.infra.events.sampledata.SampleDefaults.DEFAULT_USER_ID +import com.simprints.infra.events.sampledata.SampleDefaults.GUID1 +import org.junit.Test + +@Keep +class VerificationCalloutEventV2Test { + @Test + fun create_VerificationCalloutEvent() { + val event = VerificationCalloutEventV2( + createdAt = CREATED_AT, + projectId = DEFAULT_PROJECT_ID, + userId = DEFAULT_USER_ID, + moduleId = DEFAULT_MODULE_ID, + verifyGuid = GUID1, + metadata = DEFAULT_METADATA, + ) + + assertThat(event.id).isNotNull() + assertThat(event.type).isEqualTo(CALLOUT_VERIFICATION) + with(event.payload) { + assertThat(createdAt).isEqualTo(CREATED_AT) + assertThat(eventVersion).isEqualTo(EVENT_VERSION) + assertThat(type).isEqualTo(CALLOUT_VERIFICATION) + assertThat(projectId).isEqualTo(DEFAULT_PROJECT_ID) + assertThat(userId).isEqualTo(DEFAULT_USER_ID) + assertThat(moduleId).isEqualTo(DEFAULT_MODULE_ID) + assertThat(verifyGuid).isEqualTo(GUID1) + assertThat(metadata).isEqualTo(DEFAULT_METADATA) + } + } + + @Test + fun getTokenizableFields_returnsMapWithAttendantAndModuleId() { + val event = VerificationCalloutEventV2( + createdAt = CREATED_AT, + projectId = DEFAULT_PROJECT_ID, + userId = DEFAULT_USER_ID, + moduleId = DEFAULT_MODULE_ID, + verifyGuid = GUID1, + metadata = DEFAULT_METADATA, + ) + val tokenizableFields = event.getTokenizableFields() + + assertThat(tokenizableFields).hasSize(2) + assertThat(tokenizableFields[TokenKeyType.AttendantId]).isEqualTo(DEFAULT_USER_ID) + assertThat(tokenizableFields[TokenKeyType.ModuleId]).isEqualTo(DEFAULT_MODULE_ID) + } +} diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV3Test.kt b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV3Test.kt index 94d74eaf86..f164359703 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV3Test.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/domain/models/callout/VerificationCalloutEventV3Test.kt @@ -2,6 +2,7 @@ package com.simprints.infra.events.event.domain.models.callout import androidx.annotation.Keep import com.google.common.truth.Truth.assertThat +import com.simprints.infra.config.store.models.TokenKeyType import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_VERIFICATION_V3 import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3.Companion.EVENT_VERSION import com.simprints.infra.events.sampledata.SampleDefaults.CREATED_AT @@ -41,4 +42,22 @@ class VerificationCalloutEventV3Test { assertThat(biometricDataSource).isEqualTo(DEFAULT_BIOMETRIC_DATA_SOURCE) } } + + @Test + fun getTokenizableFields_returnsMapWithAttendantAndModuleId() { + val event = VerificationCalloutEventV3( + createdAt = CREATED_AT, + projectId = DEFAULT_PROJECT_ID, + userId = DEFAULT_USER_ID, + moduleId = DEFAULT_MODULE_ID, + verifyGuid = GUID1, + metadata = DEFAULT_METADATA, + biometricDataSource = DEFAULT_BIOMETRIC_DATA_SOURCE, + ) + val tokenizableFields = event.getTokenizableFields() + + assertThat(tokenizableFields).hasSize(2) + assertThat(tokenizableFields[TokenKeyType.AttendantId]).isEqualTo(DEFAULT_USER_ID) + assertThat(tokenizableFields[TokenKeyType.ModuleId]).isEqualTo(DEFAULT_MODULE_ID) + } } From bd9e98005a831dcf86948c682d492dd4bb667289 Mon Sep 17 00:00:00 2001 From: Marinov Date: Thu, 5 Jun 2025 19:36:22 +0300 Subject: [PATCH 4/5] [MS-932] Add V2 api callout events --- .../event/remote/models/ApiEventPayload.kt | 36 +++++-- .../remote/models/ApiEventPayloadType.kt | 10 ++ .../models/callout/ApiCalloutPayloadV2.kt | 77 +++++++++++++++ .../callout/ApiConfirmationCalloutV2.kt | 9 ++ .../models/callout/ApiEnrolmentCalloutV2.kt | 11 +++ .../ApiEnrolmentLastBiometricsCalloutV2.kt | 15 +++ .../callout/ApiIdentificationCalloutV2.kt | 11 +++ .../callout/ApiVerificationCalloutV2.kt | 12 +++ .../eventsync/event/EventValidationUtils.kt | 86 ++++++++++++++--- .../MapDomainEventToApiUseCaseTest.kt | 93 ++++++++++++++----- .../events/sampledata/EventFactoryUtils.kt | 57 +++++++++++- .../events/event/local/models/DbEventTest.kt | 10 +- 12 files changed, 373 insertions(+), 54 deletions(-) create mode 100644 infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayloadV2.kt create mode 100644 infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiConfirmationCalloutV2.kt create mode 100644 infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCalloutV2.kt create mode 100644 infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentLastBiometricsCalloutV2.kt create mode 100644 infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCalloutV2.kt create mode 100644 infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCalloutV2.kt diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/ApiEventPayload.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/ApiEventPayload.kt index 74d0a76ccb..f5c37dd2c5 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/ApiEventPayload.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/ApiEventPayload.kt @@ -26,10 +26,15 @@ import com.simprints.infra.events.event.domain.models.EventType.CALLBACK_IDENTIF import com.simprints.infra.events.event.domain.models.EventType.CALLBACK_REFUSAL import com.simprints.infra.events.event.domain.models.EventType.CALLBACK_VERIFICATION import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_CONFIRMATION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_CONFIRMATION_V3 import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_ENROLMENT +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_ENROLMENT_V3 import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_IDENTIFICATION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_IDENTIFICATION_V3 import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_LAST_BIOMETRICS +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_LAST_BIOMETRICS_V3 import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_VERIFICATION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_VERIFICATION_V3 import com.simprints.infra.events.event.domain.models.EventType.CANDIDATE_READ import com.simprints.infra.events.event.domain.models.EventType.COMPLETION_CHECK import com.simprints.infra.events.event.domain.models.EventType.CONNECTIVITY_SNAPSHOT @@ -75,11 +80,16 @@ import com.simprints.infra.events.event.domain.models.callback.ErrorCallbackEven import com.simprints.infra.events.event.domain.models.callback.IdentificationCallbackEvent.IdentificationCallbackPayload import com.simprints.infra.events.event.domain.models.callback.RefusalCallbackEvent.RefusalCallbackPayload import com.simprints.infra.events.event.domain.models.callback.VerificationCallbackEvent.VerificationCallbackPayload -import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3.ConfirmationCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3.EnrolmentCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3.EnrolmentLastBiometricsCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3.IdentificationCalloutPayload -import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3.VerificationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV2 +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3 import com.simprints.infra.events.event.domain.models.downsync.EventDownSyncRequestEvent import com.simprints.infra.events.event.domain.models.face.FaceCaptureBiometricsEvent import com.simprints.infra.events.event.domain.models.face.FaceCaptureConfirmationEvent.FaceCaptureConfirmationPayload @@ -90,6 +100,7 @@ import com.simprints.infra.events.event.domain.models.fingerprint.FingerprintCap import com.simprints.infra.events.event.domain.models.fingerprint.FingerprintCaptureEvent import com.simprints.infra.events.event.domain.models.upsync.EventUpSyncRequestEvent import com.simprints.infra.eventsync.event.remote.models.callback.ApiCallbackPayload +import com.simprints.infra.eventsync.event.remote.models.callout.ApiCalloutPayloadV2 import com.simprints.infra.eventsync.event.remote.models.callout.ApiCalloutPayloadV3 import com.simprints.infra.eventsync.event.remote.models.downsync.ApiEventDownSyncRequestPayload import com.simprints.infra.eventsync.event.remote.models.face.ApiFaceCaptureBiometricsPayload @@ -132,11 +143,16 @@ internal fun EventPayload.fromDomainToApi(): ApiEventPayload = when (this.type) FACE_CAPTURE -> ApiFaceCapturePayload(this as FaceCaptureEvent.FaceCapturePayload) FACE_CAPTURE_CONFIRMATION -> ApiFaceCaptureConfirmationPayload(this as FaceCaptureConfirmationPayload) SCANNER_FIRMWARE_UPDATE -> ApiScannerFirmwareUpdatePayload(this as ScannerFirmwareUpdatePayload) - CALLOUT_CONFIRMATION -> ApiCalloutPayloadV3(this as ConfirmationCalloutPayload) - CALLOUT_IDENTIFICATION -> ApiCalloutPayloadV3(this as IdentificationCalloutPayload) - CALLOUT_ENROLMENT -> ApiCalloutPayloadV3(this as EnrolmentCalloutPayload) - CALLOUT_VERIFICATION -> ApiCalloutPayloadV3(this as VerificationCalloutPayload) - CALLOUT_LAST_BIOMETRICS -> ApiCalloutPayloadV3(this as EnrolmentLastBiometricsCalloutPayload) + CALLOUT_CONFIRMATION -> ApiCalloutPayloadV2(this as ConfirmationCalloutEventV2.ConfirmationCalloutPayload) + CALLOUT_CONFIRMATION_V3 -> ApiCalloutPayloadV3(this as ConfirmationCalloutEventV3.ConfirmationCalloutPayload) + CALLOUT_IDENTIFICATION -> ApiCalloutPayloadV2(this as IdentificationCalloutEventV2.IdentificationCalloutPayload) + CALLOUT_IDENTIFICATION_V3 -> ApiCalloutPayloadV3(this as IdentificationCalloutEventV3.IdentificationCalloutPayload) + CALLOUT_ENROLMENT -> ApiCalloutPayloadV2(this as EnrolmentCalloutEventV2.EnrolmentCalloutPayload) + CALLOUT_ENROLMENT_V3 -> ApiCalloutPayloadV3(this as EnrolmentCalloutEventV3.EnrolmentCalloutPayload) + CALLOUT_VERIFICATION -> ApiCalloutPayloadV2(this as VerificationCalloutEventV2.VerificationCalloutPayload) + CALLOUT_VERIFICATION_V3 -> ApiCalloutPayloadV3(this as VerificationCalloutEventV3.VerificationCalloutPayload) + CALLOUT_LAST_BIOMETRICS -> ApiCalloutPayloadV2(this as EnrolmentLastBiometricsCalloutEventV2.EnrolmentLastBiometricsCalloutPayload) + CALLOUT_LAST_BIOMETRICS_V3 -> ApiCalloutPayloadV3(this as EnrolmentLastBiometricsCalloutEventV3.EnrolmentLastBiometricsCalloutPayload) CALLBACK_IDENTIFICATION -> ApiCallbackPayload(this as IdentificationCallbackPayload) CALLBACK_ENROLMENT -> ApiCallbackPayload(this as EnrolmentCallbackPayload) CALLBACK_REFUSAL -> ApiCallbackPayload(this as RefusalCallbackPayload) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/ApiEventPayloadType.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/ApiEventPayloadType.kt index 40ebd9f5b2..b52998bb12 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/ApiEventPayloadType.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/ApiEventPayloadType.kt @@ -14,10 +14,15 @@ import com.simprints.infra.events.event.domain.models.EventType.CALLBACK_IDENTIF import com.simprints.infra.events.event.domain.models.EventType.CALLBACK_REFUSAL import com.simprints.infra.events.event.domain.models.EventType.CALLBACK_VERIFICATION import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_CONFIRMATION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_CONFIRMATION_V3 import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_ENROLMENT +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_ENROLMENT_V3 import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_IDENTIFICATION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_IDENTIFICATION_V3 import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_LAST_BIOMETRICS +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_LAST_BIOMETRICS_V3 import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_VERIFICATION +import com.simprints.infra.events.event.domain.models.EventType.CALLOUT_VERIFICATION_V3 import com.simprints.infra.events.event.domain.models.EventType.CANDIDATE_READ import com.simprints.infra.events.event.domain.models.EventType.COMPLETION_CHECK import com.simprints.infra.events.event.domain.models.EventType.CONNECTIVITY_SNAPSHOT @@ -103,10 +108,15 @@ internal fun EventType.fromDomainToApi(): ApiEventPayloadType = when (this) { SCANNER_FIRMWARE_UPDATE -> ApiEventPayloadType.ScannerFirmwareUpdate INVALID_INTENT -> ApiEventPayloadType.InvalidIntent CALLOUT_CONFIRMATION, + CALLOUT_CONFIRMATION_V3, CALLOUT_IDENTIFICATION, + CALLOUT_IDENTIFICATION_V3, CALLOUT_ENROLMENT, + CALLOUT_ENROLMENT_V3, CALLOUT_VERIFICATION, + CALLOUT_VERIFICATION_V3, CALLOUT_LAST_BIOMETRICS, + CALLOUT_LAST_BIOMETRICS_V3, -> ApiEventPayloadType.Callout CALLBACK_IDENTIFICATION, diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayloadV2.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayloadV2.kt new file mode 100644 index 0000000000..b034ed0ac3 --- /dev/null +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiCalloutPayloadV2.kt @@ -0,0 +1,77 @@ +package com.simprints.infra.eventsync.event.remote.models.callout + +import androidx.annotation.Keep +import com.fasterxml.jackson.annotation.JsonInclude +import com.fasterxml.jackson.annotation.JsonInclude.Include +import com.simprints.infra.config.store.models.TokenKeyType +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV2.ConfirmationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV2.EnrolmentCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV2.EnrolmentLastBiometricsCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV2.IdentificationCalloutPayload +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV2.VerificationCalloutPayload +import com.simprints.infra.eventsync.event.remote.models.ApiEventPayload +import com.simprints.infra.eventsync.event.remote.models.ApiTimestamp +import com.simprints.infra.eventsync.event.remote.models.fromDomainToApi + +@Keep +@JsonInclude(Include.NON_NULL) +internal data class ApiCalloutPayloadV2( + override val startTime: ApiTimestamp, + val callout: ApiCallout, +) : ApiEventPayload(startTime) { + constructor(domainPayload: EnrolmentCalloutPayload) : this( + domainPayload.createdAt.fromDomainToApi(), + ApiEnrolmentCalloutV2( + domainPayload.projectId, + domainPayload.userId.value, + domainPayload.moduleId.value, + domainPayload.metadata + ), + ) + + constructor(domainPayload: IdentificationCalloutPayload) : this( + domainPayload.createdAt.fromDomainToApi(), + ApiIdentificationCalloutV2( + domainPayload.projectId, + domainPayload.userId.value, + domainPayload.moduleId.value, + domainPayload.metadata + ), + ) + + constructor(domainPayload: VerificationCalloutPayload) : this( + domainPayload.createdAt.fromDomainToApi(), + ApiVerificationCalloutV2( + domainPayload.projectId, + domainPayload.userId.value, + domainPayload.moduleId.value, + domainPayload.metadata, + domainPayload.verifyGuid + ), + ) + + constructor(domainPayload: ConfirmationCalloutPayload) : this( + domainPayload.createdAt.fromDomainToApi(), + ApiConfirmationCalloutV2( + domainPayload.selectedGuid, + domainPayload.sessionId, + ), + ) + + constructor(domainPayload: EnrolmentLastBiometricsCalloutPayload) : this( + domainPayload.createdAt.fromDomainToApi(), + ApiEnrolmentLastBiometricsCalloutV2( + domainPayload.projectId, + domainPayload.userId.value, + domainPayload.moduleId.value, + domainPayload.metadata, + domainPayload.sessionId, + ), + ) + + override fun getTokenizedFieldJsonPath(tokenKeyType: TokenKeyType): String? = when (tokenKeyType) { + TokenKeyType.AttendantId -> "callout.userId" + TokenKeyType.ModuleId -> "callout.moduleId" + TokenKeyType.Unknown -> null + } +} diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiConfirmationCalloutV2.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiConfirmationCalloutV2.kt new file mode 100644 index 0000000000..3e30f2e5fd --- /dev/null +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiConfirmationCalloutV2.kt @@ -0,0 +1,9 @@ +package com.simprints.infra.eventsync.event.remote.models.callout + +import androidx.annotation.Keep + +@Keep +internal data class ApiConfirmationCalloutV2( + val selectedGuid: String, + val sessionId: String, +) : ApiCallout(ApiCalloutType.Confirmation) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCalloutV2.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCalloutV2.kt new file mode 100644 index 0000000000..7d594a8950 --- /dev/null +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentCalloutV2.kt @@ -0,0 +1,11 @@ +package com.simprints.infra.eventsync.event.remote.models.callout + +import androidx.annotation.Keep + +@Keep +internal data class ApiEnrolmentCalloutV2( + val projectId: String, + val userId: String, + val moduleId: String, + val metadata: String?, +) : ApiCallout(ApiCalloutType.Enrolment) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentLastBiometricsCalloutV2.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentLastBiometricsCalloutV2.kt new file mode 100644 index 0000000000..85b689531a --- /dev/null +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiEnrolmentLastBiometricsCalloutV2.kt @@ -0,0 +1,15 @@ +package com.simprints.infra.eventsync.event.remote.models.callout + +import androidx.annotation.Keep +import com.fasterxml.jackson.annotation.JsonInclude +import com.fasterxml.jackson.annotation.JsonInclude.Include + +@Keep +@JsonInclude(Include.NON_NULL) +internal data class ApiEnrolmentLastBiometricsCalloutV2( + val projectId: String, + val userId: String, + val moduleId: String, + val metadata: String?, + val sessionId: String, +) : ApiCallout(ApiCalloutType.EnrolmentLastBiometrics) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCalloutV2.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCalloutV2.kt new file mode 100644 index 0000000000..42b97457ce --- /dev/null +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiIdentificationCalloutV2.kt @@ -0,0 +1,11 @@ +package com.simprints.infra.eventsync.event.remote.models.callout + +import androidx.annotation.Keep + +@Keep +internal data class ApiIdentificationCalloutV2( + val projectId: String, + val userId: String, + val moduleId: String, + val metadata: String?, +) : ApiCallout(ApiCalloutType.Identification) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCalloutV2.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCalloutV2.kt new file mode 100644 index 0000000000..1d26f650c5 --- /dev/null +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/event/remote/models/callout/ApiVerificationCalloutV2.kt @@ -0,0 +1,12 @@ +package com.simprints.infra.eventsync.event.remote.models.callout + +import androidx.annotation.Keep + +@Keep +internal data class ApiVerificationCalloutV2( + val projectId: String, + val userId: String, + val moduleId: String, + val metadata: String, + val verifyGuid: String, +) : ApiCallout(ApiCalloutType.Verification) diff --git a/infra/event-sync/src/test/java/com/simprints/infra/eventsync/event/EventValidationUtils.kt b/infra/event-sync/src/test/java/com/simprints/infra/eventsync/event/EventValidationUtils.kt index a8bde5969b..69e6298a4e 100644 --- a/infra/event-sync/src/test/java/com/simprints/infra/eventsync/event/EventValidationUtils.kt +++ b/infra/event-sync/src/test/java/com/simprints/infra/eventsync/event/EventValidationUtils.kt @@ -142,26 +142,41 @@ fun verifyCallbackErrorApiModel(json: JSONObject) { assertThat(json.length()).isEqualTo(2) } -fun validateCalloutEventApiModel(json: JSONObject) { +fun validateCalloutEventApiModelV2(json: JSONObject) { + validateCommonParams(json, "Callout", 2) + with(json.getJSONObject("payload")) { + validateTimestamp(getJSONObject("startTime")) + with(getJSONObject("callout")) { + when (ApiCalloutType.valueOf(getString("type"))) { + ApiCalloutType.Confirmation -> verifyCalloutConfirmationApiModelV2(this) + ApiCalloutType.Enrolment -> verifyCalloutEnrolmentApiModelV2(this) + ApiCalloutType.Identification -> verifyCalloutIdentificationApiModelV2(this) + ApiCalloutType.Verification -> verifyCalloutVerificationApiModelV2(this) + ApiCalloutType.EnrolmentLastBiometrics -> verifyCalloutLastEnrolmentBiometricsApiModelV2(this) + } + } + assertThat(length()).isEqualTo(2) + } +} + +fun validateCalloutEventApiModelV3(json: JSONObject) { validateCommonParams(json, "Callout", 3) with(json.getJSONObject("payload")) { validateTimestamp(getJSONObject("startTime")) with(getJSONObject("callout")) { when (ApiCalloutType.valueOf(getString("type"))) { - ApiCalloutType.Confirmation -> verifyCalloutConfirmationApiModel(this) - ApiCalloutType.Enrolment -> verifyCalloutEnrolmentApiModel(this) - ApiCalloutType.Identification -> verifyCalloutIdentificationApiModel(this) - ApiCalloutType.Verification -> verifyCalloutVerificationApiModel(this) - ApiCalloutType.EnrolmentLastBiometrics -> verifyCalloutLastEnrolmentBiometricsApiModel( - this, - ) + ApiCalloutType.Confirmation -> verifyCalloutConfirmationApiModelV3(this) + ApiCalloutType.Enrolment -> verifyCalloutEnrolmentApiModelV3(this) + ApiCalloutType.Identification -> verifyCalloutIdentificationApiModelV3(this) + ApiCalloutType.Verification -> verifyCalloutVerificationApiModelV3(this) + ApiCalloutType.EnrolmentLastBiometrics -> verifyCalloutLastEnrolmentBiometricsApiModelV3(this) } } assertThat(length()).isEqualTo(2) } } -fun verifyCalloutLastEnrolmentBiometricsApiModel(json: JSONObject) { +fun verifyCalloutLastEnrolmentBiometricsApiModelV2(json: JSONObject) { assertThat(json.getString("type")).isEqualTo("EnrolmentLastBiometrics") assertThat(json.getString("projectId")).isNotNull() assertThat(json.getString("userId")).isNotNull() @@ -171,7 +186,27 @@ fun verifyCalloutLastEnrolmentBiometricsApiModel(json: JSONObject) { assertThat(json.length()).isEqualTo(6) } -fun verifyCalloutVerificationApiModel(json: JSONObject) { +fun verifyCalloutLastEnrolmentBiometricsApiModelV3(json: JSONObject) { + assertThat(json.getString("type")).isEqualTo("EnrolmentLastBiometrics") + assertThat(json.getString("projectId")).isNotNull() + assertThat(json.getString("userId")).isNotNull() + assertThat(json.getString("moduleId")).isNotNull() + assertThat(json.getString("metadata")).isNotNull() + assertThat(json.getString("sessionId")).isNotNull() + assertThat(json.length()).isEqualTo(6) +} + +fun verifyCalloutVerificationApiModelV2(json: JSONObject) { + assertThat(json.getString("type")).isEqualTo("Verification") + assertThat(json.getString("projectId")).isNotNull() + assertThat(json.getString("userId")).isNotNull() + assertThat(json.getString("moduleId")).isNotNull() + assertThat(json.getString("verifyGuid")).isNotNull() + assertThat(json.getString("metadata")).isNotNull() + assertThat(json.length()).isEqualTo(6) +} + +fun verifyCalloutVerificationApiModelV3(json: JSONObject) { assertThat(json.getString("type")).isEqualTo("Verification") assertThat(json.getString("projectId")).isNotNull() assertThat(json.getString("userId")).isNotNull() @@ -182,7 +217,16 @@ fun verifyCalloutVerificationApiModel(json: JSONObject) { assertThat(json.length()).isEqualTo(7) } -fun verifyCalloutIdentificationApiModel(json: JSONObject) { +fun verifyCalloutIdentificationApiModelV2(json: JSONObject) { + assertThat(json.getString("type")).isEqualTo("Identification") + assertThat(json.getString("projectId")).isNotNull() + assertThat(json.getString("userId")).isNotNull() + assertThat(json.getString("moduleId")).isNotNull() + assertThat(json.getString("metadata")).isNotNull() + assertThat(json.length()).isEqualTo(5) +} + +fun verifyCalloutIdentificationApiModelV3(json: JSONObject) { assertThat(json.getString("type")).isEqualTo("Identification") assertThat(json.getString("projectId")).isNotNull() assertThat(json.getString("userId")).isNotNull() @@ -192,7 +236,16 @@ fun verifyCalloutIdentificationApiModel(json: JSONObject) { assertThat(json.length()).isEqualTo(6) } -fun verifyCalloutEnrolmentApiModel(json: JSONObject) { +fun verifyCalloutEnrolmentApiModelV2(json: JSONObject) { + assertThat(json.getString("type")).isEqualTo("Enrolment") + assertThat(json.getString("projectId")).isNotNull() + assertThat(json.getString("userId")).isNotNull() + assertThat(json.getString("moduleId")).isNotNull() + assertThat(json.getString("metadata")).isNotNull() + assertThat(json.length()).isEqualTo(5) +} + +fun verifyCalloutEnrolmentApiModelV3(json: JSONObject) { assertThat(json.getString("type")).isEqualTo("Enrolment") assertThat(json.getString("projectId")).isNotNull() assertThat(json.getString("userId")).isNotNull() @@ -202,7 +255,14 @@ fun verifyCalloutEnrolmentApiModel(json: JSONObject) { assertThat(json.length()).isEqualTo(6) } -fun verifyCalloutConfirmationApiModel(json: JSONObject) { +fun verifyCalloutConfirmationApiModelV2(json: JSONObject) { + assertThat(json.getString("type")).isEqualTo("Confirmation") + assertThat(json.getString("selectedGuid")).isNotNull() + assertThat(json.getString("sessionId")).isNotNull() + assertThat(json.length()).isEqualTo(3) +} + +fun verifyCalloutConfirmationApiModelV3(json: JSONObject) { assertThat(json.getString("type")).isEqualTo("Confirmation") assertThat(json.getString("selectedGuid")).isNotNull() assertThat(json.getString("sessionId")).isNotNull() diff --git a/infra/event-sync/src/test/java/com/simprints/infra/eventsync/event/usecases/MapDomainEventToApiUseCaseTest.kt b/infra/event-sync/src/test/java/com/simprints/infra/eventsync/event/usecases/MapDomainEventToApiUseCaseTest.kt index c35cbcdf72..76692fa06d 100644 --- a/infra/event-sync/src/test/java/com/simprints/infra/eventsync/event/usecases/MapDomainEventToApiUseCaseTest.kt +++ b/infra/event-sync/src/test/java/com/simprints/infra/eventsync/event/usecases/MapDomainEventToApiUseCaseTest.kt @@ -19,11 +19,13 @@ import com.simprints.infra.events.sampledata.createBiometricReferenceCreationEve import com.simprints.infra.events.sampledata.createCandidateReadEvent import com.simprints.infra.events.sampledata.createCompletionCheckEvent import com.simprints.infra.events.sampledata.createConfirmationCallbackEvent -import com.simprints.infra.events.sampledata.createConfirmationCalloutEvent +import com.simprints.infra.events.sampledata.createConfirmationCalloutEventV2 +import com.simprints.infra.events.sampledata.createConfirmationCalloutEventV3 import com.simprints.infra.events.sampledata.createConnectivitySnapshotEvent import com.simprints.infra.events.sampledata.createConsentEvent import com.simprints.infra.events.sampledata.createEnrolmentCallbackEvent -import com.simprints.infra.events.sampledata.createEnrolmentCalloutEvent +import com.simprints.infra.events.sampledata.createEnrolmentCalloutEventV2 +import com.simprints.infra.events.sampledata.createEnrolmentCalloutEventV3 import com.simprints.infra.events.sampledata.createEnrolmentEventV2 import com.simprints.infra.events.sampledata.createEnrolmentEventV4 import com.simprints.infra.events.sampledata.createEventDownSyncRequestEvent @@ -37,10 +39,12 @@ import com.simprints.infra.events.sampledata.createFingerprintCaptureBiometricsE import com.simprints.infra.events.sampledata.createFingerprintCaptureEvent import com.simprints.infra.events.sampledata.createGuidSelectionEvent import com.simprints.infra.events.sampledata.createIdentificationCallbackEvent -import com.simprints.infra.events.sampledata.createIdentificationCalloutEvent +import com.simprints.infra.events.sampledata.createIdentificationCalloutEventV2 +import com.simprints.infra.events.sampledata.createIdentificationCalloutEventV3 import com.simprints.infra.events.sampledata.createIntentParsingEvent import com.simprints.infra.events.sampledata.createInvalidIntentEvent -import com.simprints.infra.events.sampledata.createLastBiometricsEnrolmentCalloutEvent +import com.simprints.infra.events.sampledata.createLastBiometricsEnrolmentCalloutEventV2 +import com.simprints.infra.events.sampledata.createLastBiometricsEnrolmentCalloutEventV3 import com.simprints.infra.events.sampledata.createLicenseCheckEvent import com.simprints.infra.events.sampledata.createOneToManyMatchEvent import com.simprints.infra.events.sampledata.createOneToOneMatchEvent @@ -52,7 +56,8 @@ import com.simprints.infra.events.sampledata.createScannerFirmwareUpdateEvent import com.simprints.infra.events.sampledata.createSuspiciousIntentEvent import com.simprints.infra.events.sampledata.createVerificationCallbackEventV1 import com.simprints.infra.events.sampledata.createVerificationCallbackEventV2 -import com.simprints.infra.events.sampledata.createVerificationCalloutEvent +import com.simprints.infra.events.sampledata.createVerificationCalloutEventV2 +import com.simprints.infra.events.sampledata.createVerificationCalloutEventV3 import com.simprints.infra.events.sampledata.createVero2InfoSnapshotEvent import com.simprints.infra.eventsync.event.remote.models.ApiEventPayloadType import com.simprints.infra.eventsync.event.remote.models.ApiEventPayloadType.AgeGroupSelection @@ -95,7 +100,8 @@ import com.simprints.infra.eventsync.event.validateAuthorizationEventApiModel import com.simprints.infra.eventsync.event.validateBiometricReferenceCreationEventApiModel import com.simprints.infra.eventsync.event.validateCallbackV1EventApiModel import com.simprints.infra.eventsync.event.validateCallbackV2EventApiModel -import com.simprints.infra.eventsync.event.validateCalloutEventApiModel +import com.simprints.infra.eventsync.event.validateCalloutEventApiModelV2 +import com.simprints.infra.eventsync.event.validateCalloutEventApiModelV3 import com.simprints.infra.eventsync.event.validateCandidateReadEventApiModel import com.simprints.infra.eventsync.event.validateCommonParams import com.simprints.infra.eventsync.event.validateCompletionCheckEventApiModel @@ -183,48 +189,93 @@ internal class MapDomainEventToApiUseCaseTest { } @Test - fun validate_calloutEventForVerificationApiModel() { - val event = createVerificationCalloutEvent() + fun validate_calloutEventForVerificationApiModelV2() { + val event = createVerificationCalloutEventV2() val apiEvent = useCase(event, project) val json = JSONObject(jackson.writeValueAsString(apiEvent)) - validateCalloutEventApiModel(json) + validateCalloutEventApiModelV2(json) } @Test - fun validate_calloutEventForIdentificationApiModel() { - val event = createIdentificationCalloutEvent() + fun validate_calloutEventForVerificationApiModelV3() { + val event = createVerificationCalloutEventV3() val apiEvent = useCase(event, project) val json = JSONObject(jackson.writeValueAsString(apiEvent)) - validateCalloutEventApiModel(json) + validateCalloutEventApiModelV3(json) } @Test - fun validate_calloutEventForEnrolLastBiometricsModel() { - val event = createLastBiometricsEnrolmentCalloutEvent() + fun validate_calloutEventForIdentificationApiModelV2() { + val event = createIdentificationCalloutEventV2() val apiEvent = useCase(event, project) val json = JSONObject(jackson.writeValueAsString(apiEvent)) - validateCalloutEventApiModel(json) + validateCalloutEventApiModelV2(json) } @Test - fun validate_calloutEventForConfirmationApiModel() { - val event = createConfirmationCalloutEvent() + fun validate_calloutEventForIdentificationApiModelV3() { + val event = createIdentificationCalloutEventV3() val apiEvent = useCase(event, project) val json = JSONObject(jackson.writeValueAsString(apiEvent)) - validateCalloutEventApiModel(json) + validateCalloutEventApiModelV3(json) } @Test - fun validate_calloutEventForEnrolmentApiModel() { - val event = createEnrolmentCalloutEvent() + fun validate_calloutEventForEnrolLastBiometricsModelV2() { + val event = createLastBiometricsEnrolmentCalloutEventV2() val apiEvent = useCase(event, project) val json = JSONObject(jackson.writeValueAsString(apiEvent)) - validateCalloutEventApiModel(json) + validateCalloutEventApiModelV2(json) + } + + @Test + fun validate_calloutEventForEnrolLastBiometricsModelV3() { + val event = createLastBiometricsEnrolmentCalloutEventV3() + val apiEvent = useCase(event, project) + val json = JSONObject(jackson.writeValueAsString(apiEvent)) + + validateCalloutEventApiModelV3(json) + } + + @Test + fun validate_calloutEventForConfirmationApiModelV2() { + val event = createConfirmationCalloutEventV2() + val apiEvent = useCase(event, project) + val json = JSONObject(jackson.writeValueAsString(apiEvent)) + + validateCalloutEventApiModelV2(json) + } + + @Test + fun validate_calloutEventForConfirmationApiModelV3() { + val event = createConfirmationCalloutEventV3() + val apiEvent = useCase(event, project) + val json = JSONObject(jackson.writeValueAsString(apiEvent)) + + validateCalloutEventApiModelV3(json) + } + + @Test + fun validate_calloutEventForEnrolmentApiModelV2() { + val event = createEnrolmentCalloutEventV2() + val apiEvent = useCase(event, project) + val json = JSONObject(jackson.writeValueAsString(apiEvent)) + + validateCalloutEventApiModelV2(json) + } + + @Test + fun validate_calloutEventForEnrolmentApiModelV3() { + val event = createEnrolmentCalloutEventV3() + val apiEvent = useCase(event, project) + val json = JSONObject(jackson.writeValueAsString(apiEvent)) + + validateCalloutEventApiModelV3(json) } @Test diff --git a/infra/events/src/debug/java/com/simprints/infra/events/sampledata/EventFactoryUtils.kt b/infra/events/src/debug/java/com/simprints/infra/events/sampledata/EventFactoryUtils.kt index f508f98a68..7bf3c3694c 100644 --- a/infra/events/src/debug/java/com/simprints/infra/events/sampledata/EventFactoryUtils.kt +++ b/infra/events/src/debug/java/com/simprints/infra/events/sampledata/EventFactoryUtils.kt @@ -59,10 +59,15 @@ import com.simprints.infra.events.event.domain.models.callback.ErrorCallbackEven import com.simprints.infra.events.event.domain.models.callback.IdentificationCallbackEvent import com.simprints.infra.events.event.domain.models.callback.RefusalCallbackEvent import com.simprints.infra.events.event.domain.models.callback.VerificationCallbackEvent +import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV2 import com.simprints.infra.events.event.domain.models.callout.ConfirmationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV2 import com.simprints.infra.events.event.domain.models.callout.EnrolmentCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV2 import com.simprints.infra.events.event.domain.models.callout.EnrolmentLastBiometricsCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV2 import com.simprints.infra.events.event.domain.models.callout.IdentificationCalloutEventV3 +import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV2 import com.simprints.infra.events.event.domain.models.callout.VerificationCalloutEventV3 import com.simprints.infra.events.event.domain.models.downsync.EventDownSyncRequestEvent import com.simprints.infra.events.event.domain.models.face.FaceCaptureBiometricsEvent @@ -181,14 +186,30 @@ fun createVerificationCallbackEventV2() = VerificationCallbackEvent( CallbackComparisonScore(GUID1, 1, MEDIUM), ) -fun createConfirmationCalloutEvent() = ConfirmationCalloutEventV3( +fun createConfirmationCalloutEventV2() = ConfirmationCalloutEventV2( CREATED_AT, DEFAULT_PROJECT_ID, GUID1, GUID2, ) -fun createEnrolmentCalloutEvent(projectId: String = DEFAULT_PROJECT_ID) = EnrolmentCalloutEventV3( +fun createConfirmationCalloutEventV3() = ConfirmationCalloutEventV3( + CREATED_AT, + DEFAULT_PROJECT_ID, + GUID1, + GUID2, +) + +fun createEnrolmentCalloutEventV2(projectId: String = DEFAULT_PROJECT_ID) = EnrolmentCalloutEventV2( + CREATED_AT, + projectId, + DEFAULT_USER_ID, + DEFAULT_MODULE_ID, + DEFAULT_METADATA, + projectId, +) + +fun createEnrolmentCalloutEventV3(projectId: String = DEFAULT_PROJECT_ID) = EnrolmentCalloutEventV3( CREATED_AT, projectId, DEFAULT_USER_ID, @@ -198,7 +219,15 @@ fun createEnrolmentCalloutEvent(projectId: String = DEFAULT_PROJECT_ID) = Enrolm projectId, ) -fun createIdentificationCalloutEvent() = IdentificationCalloutEventV3( +fun createIdentificationCalloutEventV2() = IdentificationCalloutEventV2( + CREATED_AT, + DEFAULT_PROJECT_ID, + DEFAULT_USER_ID, + DEFAULT_MODULE_ID, + DEFAULT_METADATA, +) + +fun createIdentificationCalloutEventV3() = IdentificationCalloutEventV3( CREATED_AT, DEFAULT_PROJECT_ID, DEFAULT_USER_ID, @@ -207,7 +236,16 @@ fun createIdentificationCalloutEvent() = IdentificationCalloutEventV3( DEFAULT_BIOMETRIC_DATA_SOURCE, ) -fun createLastBiometricsEnrolmentCalloutEvent() = EnrolmentLastBiometricsCalloutEventV3( +fun createLastBiometricsEnrolmentCalloutEventV2() = EnrolmentLastBiometricsCalloutEventV2( + CREATED_AT, + DEFAULT_PROJECT_ID, + DEFAULT_USER_ID, + DEFAULT_MODULE_ID, + DEFAULT_METADATA, + GUID2, +) + +fun createLastBiometricsEnrolmentCalloutEventV3() = EnrolmentLastBiometricsCalloutEventV3( CREATED_AT, DEFAULT_PROJECT_ID, DEFAULT_USER_ID, @@ -216,7 +254,16 @@ fun createLastBiometricsEnrolmentCalloutEvent() = EnrolmentLastBiometricsCallout GUID2, ) -fun createVerificationCalloutEvent() = VerificationCalloutEventV3( +fun createVerificationCalloutEventV2() = VerificationCalloutEventV2( + CREATED_AT, + DEFAULT_PROJECT_ID, + DEFAULT_USER_ID, + DEFAULT_MODULE_ID, + GUID2, + DEFAULT_METADATA, +) + +fun createVerificationCalloutEventV3() = VerificationCalloutEventV3( CREATED_AT, DEFAULT_PROJECT_ID, DEFAULT_USER_ID, diff --git a/infra/events/src/test/java/com/simprints/infra/events/event/local/models/DbEventTest.kt b/infra/events/src/test/java/com/simprints/infra/events/event/local/models/DbEventTest.kt index 6ac2d637d4..2679cb3a94 100644 --- a/infra/events/src/test/java/com/simprints/infra/events/event/local/models/DbEventTest.kt +++ b/infra/events/src/test/java/com/simprints/infra/events/event/local/models/DbEventTest.kt @@ -58,7 +58,7 @@ class DbEventTest { @Test fun convert_ConfirmationCalloutEvent() { - val original = createConfirmationCalloutEvent() + val original = createConfirmationCalloutEventV3() val transformed = original.fromDomainToDb().fromDbToDomain() assertThat(original).isEqualTo(transformed) @@ -66,7 +66,7 @@ class DbEventTest { @Test fun convert_EnrolmentCalloutEvent() { - val original = createEnrolmentCalloutEvent() + val original = createEnrolmentCalloutEventV3() val transformed = original.fromDomainToDb().fromDbToDomain() assertThat(original).isEqualTo(transformed) @@ -74,7 +74,7 @@ class DbEventTest { @Test fun convert_EnrolmentLastBiometricsCalloutEvent() { - val original = createLastBiometricsEnrolmentCalloutEvent() + val original = createLastBiometricsEnrolmentCalloutEventV3() val transformed = original.fromDomainToDb().fromDbToDomain() assertThat(original).isEqualTo(transformed) @@ -82,7 +82,7 @@ class DbEventTest { @Test fun convert_IdentificationCalloutEvent() { - val original = createIdentificationCalloutEvent() + val original = createIdentificationCalloutEventV3() val transformed = original.fromDomainToDb().fromDbToDomain() assertThat(original).isEqualTo(transformed) @@ -90,7 +90,7 @@ class DbEventTest { @Test fun convert_VerificationCalloutEvent() { - val original = createVerificationCalloutEvent() + val original = createVerificationCalloutEventV3() val transformed = original.fromDomainToDb().fromDbToDomain() assertThat(original).isEqualTo(transformed) From bda8d8acbe5cde7810c36ed4cb9cbca8079164a0 Mon Sep 17 00:00:00 2001 From: Marinov Date: Mon, 16 Jun 2025 14:49:35 +0300 Subject: [PATCH 5/5] [MS-932] Add explicit assertions on argument type in the unit test --- .../ReportActionRequestEventsUseCaseTest.kt | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCaseTest.kt b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCaseTest.kt index 1ecd316929..e2e6ddd869 100644 --- a/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCaseTest.kt +++ b/feature/login-check/src/test/java/com/simprints/feature/logincheck/usecases/ReportActionRequestEventsUseCaseTest.kt @@ -67,8 +67,8 @@ internal class ReportActionRequestEventsUseCaseTest { // When useCase.invoke(ActionFactory.getIdentifyRequest(extras = mapOf("key" to "value"))) // Then - coVerify { - sessionEventRepository.addOrUpdateEvent(withArg { it is SuspiciousIntentEvent }) + coVerify(exactly = 1) { + sessionEventRepository.addOrUpdateEvent(withArg { assert(it is SuspiciousIntentEvent) }) } } @@ -77,38 +77,35 @@ internal class ReportActionRequestEventsUseCaseTest { // When useCase.invoke(ActionFactory.getIdentifyRequest(extras = emptyMap())) // Then - coVerify { sessionEventRepository.addOrUpdateEvent(withArg { it !is SuspiciousIntentEvent }) } + coVerify(exactly = 0) { + sessionEventRepository.addOrUpdateEvent(withArg { assert(it is SuspiciousIntentEvent) }) + } } @Test fun `Adds all required events for enrol action`() = runTest { useCase(ActionFactory.getEnrolRequest()) - coVerify { - sessionEventRepository.addOrUpdateEvent(withArg { it is ConnectivitySnapshotEvent }) - sessionEventRepository.addOrUpdateEvent(withArg { it is EnrolmentCalloutEventV3 }) - recentUserActivityManager.updateRecentUserActivity(any()) - } + coVerify(exactly = 1) { sessionEventRepository.addOrUpdateEvent(withArg { assert(it is ConnectivitySnapshotEvent) }) } + coVerify(exactly = 1) { sessionEventRepository.addOrUpdateEvent(withArg { assert(it is EnrolmentCalloutEventV3) }) } + coVerify(exactly = 1) { recentUserActivityManager.updateRecentUserActivity(any()) } } @Test fun `Adds all required events for confirmation action`() = runTest { useCase(ActionFactory.getConfirmationRequest()) - coVerify { - sessionEventRepository.addOrUpdateEvent(withArg { it is EnrolmentCalloutEventV3 }) - sessionEventRepository.addOrUpdateEvent(withArg { it is ConfirmationCalloutEventV3 }) - recentUserActivityManager.updateRecentUserActivity(any()) - sessionEventRepository.addOrUpdateEvent(withArg { it !is ConnectivitySnapshotEvent }) - } + coVerify(exactly = 0) { sessionEventRepository.addOrUpdateEvent(withArg { assert(it is ConnectivitySnapshotEvent) }) } + coVerify(exactly = 1) { sessionEventRepository.addOrUpdateEvent(withArg { assert(it is ConfirmationCalloutEventV3) }) } + coVerify(exactly = 1) { recentUserActivityManager.updateRecentUserActivity(any()) } } @Test fun `Adds callout for identify action`() = runTest { useCase(ActionFactory.getIdentifyRequest()) - coVerify { - sessionEventRepository.addOrUpdateEvent(withArg { it is IdentificationCalloutEventV3 }) + coVerify(exactly = 1) { + sessionEventRepository.addOrUpdateEvent(withArg { assert(it is IdentificationCalloutEventV3) }) } } @@ -116,8 +113,8 @@ internal class ReportActionRequestEventsUseCaseTest { fun `Adds callout for verify action`() = runTest { useCase(ActionFactory.getVerifyRequest()) - coVerify { - sessionEventRepository.addOrUpdateEvent(withArg { it is VerificationCalloutEventV3 }) + coVerify(exactly = 1) { + sessionEventRepository.addOrUpdateEvent(withArg { assert(it is VerificationCalloutEventV3) }) } } @@ -125,8 +122,8 @@ internal class ReportActionRequestEventsUseCaseTest { fun `Adds callout for enrol last action`() = runTest { useCase(ActionFactory.getEnrolLastRequest()) - coVerify { - sessionEventRepository.addOrUpdateEvent(withArg { it is EnrolmentLastBiometricsCalloutEventV3 }) + coVerify(exactly = 1) { + sessionEventRepository.addOrUpdateEvent(withArg { assert(it is EnrolmentLastBiometricsCalloutEventV3) }) } }