From 7ce9d4cc5d44bef260fddba152630b728c209dac Mon Sep 17 00:00:00 2001 From: Sergejs Luhmirins Date: Mon, 19 Jan 2026 14:20:18 +0200 Subject: [PATCH] Preserve incoming intent extras as-is for orcherstrator --- .../feature/clientapi/ClientApiViewModel.kt | 4 ++-- .../clientapi/ClientApiViewModelTest.kt | 21 +++++++++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/feature/client-api/src/main/java/com/simprints/feature/clientapi/ClientApiViewModel.kt b/feature/client-api/src/main/java/com/simprints/feature/clientapi/ClientApiViewModel.kt index b5a10576ec..324cd631d4 100644 --- a/feature/client-api/src/main/java/com/simprints/feature/clientapi/ClientApiViewModel.kt +++ b/feature/client-api/src/main/java/com/simprints/feature/clientapi/ClientApiViewModel.kt @@ -77,7 +77,7 @@ class ClientApiViewModel @Inject internal constructor( action: String, extras: Bundle, ): ActionRequest? { - val extrasMap: Map = extras.toMap().mapValues { it.value.toString() } + val extrasMap = extras.toMap() return try { // Session must be created to be able to report invalid intents if mapping fails if (createSessionIfRequiredUseCase(action)) { @@ -86,7 +86,7 @@ class ClientApiViewModel @Inject internal constructor( intentMapper(action = action, extras = extrasMap, project = getProject()) } catch (validationException: InvalidRequestException) { Simber.e("Cannot parse intent data", validationException, tag = ORCHESTRATION) - simpleEventReporter.addInvalidIntentEvent(action, extrasMap) + simpleEventReporter.addInvalidIntentEvent(action, extrasMap.mapValues { it.value.toString() }) _showAlert.send(validationException.error) null } diff --git a/feature/client-api/src/test/java/com/simprints/feature/clientapi/ClientApiViewModelTest.kt b/feature/client-api/src/test/java/com/simprints/feature/clientapi/ClientApiViewModelTest.kt index c968b5d567..9eb4ead9c0 100644 --- a/feature/client-api/src/test/java/com/simprints/feature/clientapi/ClientApiViewModelTest.kt +++ b/feature/client-api/src/test/java/com/simprints/feature/clientapi/ClientApiViewModelTest.kt @@ -2,6 +2,7 @@ package com.simprints.feature.clientapi import android.os.Bundle import androidx.arch.core.executor.testing.InstantTaskExecutorRule +import androidx.core.os.bundleOf import androidx.test.ext.junit.runners.* import com.jraska.livedata.test import com.simprints.core.domain.externalcredential.ExternalCredential @@ -128,6 +129,22 @@ internal class ClientApiViewModelTest { viewModel.newSessionCreated.test().assertHasValue() } + @Test + fun `handleIntent ensures that contract version is preserved`() = runTest { + coEvery { createSessionIfRequiredUseCase.invoke(any()) } returns true + coEvery { + intentMapper.invoke( + action = any(), + extras = any(), + project = any(), + ) + } returns mockk() + + viewModel.handleIntent("action", bundleOf("contractVersion" to 42)) + + coVerify { intentMapper.invoke(any(), match { it["contractVersion"] == 42 }, any()) } + } + @Test fun `handleIntent handles invalid intent`() = runTest { coEvery { createSessionIfRequiredUseCase.invoke(any()) } returns false @@ -139,9 +156,9 @@ internal class ClientApiViewModelTest { ) } throws InvalidRequestException("Invalid intent") - viewModel.handleIntent("action", Bundle()) + viewModel.handleIntent("action", bundleOf("contractVersion" to 42)) - verify { simpleEventReporter.addInvalidIntentEvent("action", any()) } + verify { simpleEventReporter.addInvalidIntentEvent("action", any>()) } viewModel.showAlert.test().assertHasValue() }