From b549da229c994c6767932cc8c00b9e74262f0a7e Mon Sep 17 00:00:00 2001 From: sozinov Date: Thu, 5 Feb 2026 16:16:09 +0300 Subject: [PATCH] MOBILEWEBVIEW-31: change default logic --- .../FeatureTogglesDtoBlankDeserializer.kt | 16 +++++--- .../data/managers/FeatureToggleManagerImpl.kt | 2 +- .../managers/FeatureToggleManagerImplTest.kt | 38 +++++++++---------- 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/dto/deserializers/FeatureTogglesDtoBlankDeserializer.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/dto/deserializers/FeatureTogglesDtoBlankDeserializer.kt index 6b904cad..7da4678a 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/dto/deserializers/FeatureTogglesDtoBlankDeserializer.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/dto/deserializers/FeatureTogglesDtoBlankDeserializer.kt @@ -1,5 +1,6 @@ package cloud.mindbox.mobile_sdk.inapp.data.dto.deserializers +import cloud.mindbox.mobile_sdk.logger.mindboxLogW import cloud.mindbox.mobile_sdk.models.operation.response.SettingsDtoBlank import com.google.gson.JsonDeserializationContext import com.google.gson.JsonDeserializer @@ -16,13 +17,18 @@ internal class FeatureTogglesDtoBlankDeserializer : JsonDeserializer() - jsonObject.entrySet().forEach { (key, value) -> - result[key] = value?.takeIf { it.isJsonPrimitive && it.asJsonPrimitive.isBoolean } - ?.asJsonPrimitive - ?.asBoolean - } + val booleanValue = when { + value?.isJsonPrimitive == true && value.asJsonPrimitive.isBoolean -> + value.asJsonPrimitive.asBoolean + else -> { + mindboxLogW("Feature toggle value is not boolean. key=$key, value=$value") + null + } + } + result[key] = booleanValue + } return FeatureTogglesDtoBlank(toggles = result) } } diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/managers/FeatureToggleManagerImpl.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/managers/FeatureToggleManagerImpl.kt index efe64102..a7e82b69 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/managers/FeatureToggleManagerImpl.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/managers/FeatureToggleManagerImpl.kt @@ -20,6 +20,6 @@ internal class FeatureToggleManagerImpl : FeatureToggleManager { } override fun isEnabled(key: String): Boolean { - return toggles[key] ?: false + return toggles[key] ?: true } } diff --git a/sdk/src/test/java/cloud/mindbox/mobile_sdk/inapp/data/managers/FeatureToggleManagerImplTest.kt b/sdk/src/test/java/cloud/mindbox/mobile_sdk/inapp/data/managers/FeatureToggleManagerImplTest.kt index 0a3dde00..e817746e 100644 --- a/sdk/src/test/java/cloud/mindbox/mobile_sdk/inapp/data/managers/FeatureToggleManagerImplTest.kt +++ b/sdk/src/test/java/cloud/mindbox/mobile_sdk/inapp/data/managers/FeatureToggleManagerImplTest.kt @@ -80,7 +80,7 @@ class FeatureToggleManagerImplTest { } @Test - fun `applyToggles ignores null values in featureToggles map`() { + fun `applyToggles return true when null values in featureToggles map`() { val config = InAppConfigResponse( inApps = null, monitoring = null, @@ -100,11 +100,11 @@ class FeatureToggleManagerImplTest { featureToggleManager.applyToggles(config) assertEquals(true, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) - assertEquals(false, featureToggleManager.isEnabled("invalidToggle")) + assertEquals(true, featureToggleManager.isEnabled("invalidToggle")) } @Test - fun `applyToggles returns false when featureToggles is null`() { + fun `applyToggles returns true when featureToggles is null`() { val config = InAppConfigResponse( inApps = null, monitoring = null, @@ -120,11 +120,11 @@ class FeatureToggleManagerImplTest { featureToggleManager.applyToggles(config) - assertEquals(false, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) + assertEquals(true, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) } @Test - fun `applyToggles returns false when settings is null`() { + fun `applyToggles returns true when settings is null`() { val config = InAppConfigResponse( inApps = null, monitoring = null, @@ -134,19 +134,19 @@ class FeatureToggleManagerImplTest { featureToggleManager.applyToggles(config) - assertEquals(false, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) + assertEquals(true, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) } @Test - fun `applyToggles returns false when config is null`() { + fun `applyToggles returns true when config is null`() { featureToggleManager.applyToggles(null) - assertEquals(false, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) + assertEquals(true, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) } @Test - fun `isEnabled returns false by default`() { - assertEquals(false, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) + fun `isEnabled returns true by default`() { + assertEquals(true, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) } @Test @@ -225,15 +225,15 @@ class FeatureToggleManagerImplTest { ttl = null, slidingExpiration = null, inapp = null, - featureToggles = mapOf("shouldSendInAppShowError" to true) + featureToggles = mapOf("shouldSendInAppShowError" to false) ), abtests = null ) featureToggleManager.applyToggles(configTrue) - assertEquals(true, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) + assertEquals(false, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) featureToggleManager.applyToggles(null) - assertEquals(false, featureToggleManager.isEnabled("shouldSendInAppShowError")) + assertEquals(true, featureToggleManager.isEnabled("shouldSendInAppShowError")) } @Test @@ -247,14 +247,14 @@ class FeatureToggleManagerImplTest { slidingExpiration = null, inapp = null, featureToggles = mapOf( - "shouldSendInAppShowError" to true, + "shouldSendInAppShowError" to false, "toggle1" to true ) ), abtests = null ) featureToggleManager.applyToggles(config1) - assertEquals(true, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) + assertEquals(false, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) assertEquals(true, featureToggleManager.isEnabled("toggle1")) val config2 = InAppConfigResponse( @@ -265,13 +265,13 @@ class FeatureToggleManagerImplTest { ttl = null, slidingExpiration = null, inapp = null, - featureToggles = mapOf("toggle2" to true) + featureToggles = mapOf("toggle2" to false) ), abtests = null ) featureToggleManager.applyToggles(config2) - assertEquals(false, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) - assertEquals(false, featureToggleManager.isEnabled("toggle1")) - assertEquals(true, featureToggleManager.isEnabled("toggle2")) + assertEquals(true, featureToggleManager.isEnabled(SEND_INAPP_SHOW_ERROR_FEATURE)) + assertEquals(true, featureToggleManager.isEnabled("toggle1")) + assertEquals(false, featureToggleManager.isEnabled("toggle2")) } }