Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -16,13 +17,18 @@ internal class FeatureTogglesDtoBlankDeserializer : JsonDeserializer<FeatureTogg
): FeatureTogglesDtoBlank {
val jsonObject = json.asJsonObject
val result = mutableMapOf<String, Boolean?>()

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)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ internal class FeatureToggleManagerImpl : FeatureToggleManager {
}

override fun isEnabled(key: String): Boolean {
return toggles[key] ?: false
return toggles[key] ?: true
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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(
Expand All @@ -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"))
}
}