diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/mapper/InAppMapper.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/mapper/InAppMapper.kt index 6c89c2de..1ee0c2c2 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/mapper/InAppMapper.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/mapper/InAppMapper.kt @@ -467,7 +467,7 @@ internal class InAppMapper { ) fun mapToSlidingExpiration(slidingExpirationDtoBlank: SettingsDtoBlank.SlidingExpirationDtoBlank) = SlidingExpirationDto( - inappSession = slidingExpirationDtoBlank.inappSession + config = slidingExpirationDtoBlank.config ) private fun getTargetingProductSegmentationsList(targeting: TreeTargeting): List { diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/repositories/MobileConfigRepositoryImpl.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/repositories/MobileConfigRepositoryImpl.kt index 759efdf9..db73e01d 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/repositories/MobileConfigRepositoryImpl.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/repositories/MobileConfigRepositoryImpl.kt @@ -160,8 +160,8 @@ internal class MobileConfigRepositoryImpl( null } - val slidingExpiration = runCatching { getInAppSession(configBlank) }.getOrNull { - mindboxLogW("Unable to get InAppSession settings $it") + val slidingExpiration = runCatching { getConfigSession(configBlank) }.getOrNull { + mindboxLogW("Unable to get slidingExpiration settings $it") } return SettingsDto(operations, ttl, slidingExpiration) @@ -179,7 +179,7 @@ internal class MobileConfigRepositoryImpl( null } - private fun getInAppSession(configBlank: InAppConfigResponseBlank?): SlidingExpirationDto? = + private fun getConfigSession(configBlank: InAppConfigResponseBlank?): SlidingExpirationDto? = try { configBlank?.settings?.slidingExpiration?.takeIf { slidingExpirationDtoBlank -> slidingExpirationValidator.isValid(slidingExpirationDtoBlank) @@ -187,7 +187,7 @@ internal class MobileConfigRepositoryImpl( inAppMapper.mapToSlidingExpiration(slidingExpirationDtoBlank) } } catch (e: Exception) { - mindboxLogE("Error parse inappsSession time", e) + mindboxLogE("Error parse config session time", e) null } diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/validators/SlidingExpirationParametersValidator.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/validators/SlidingExpirationParametersValidator.kt index 40db8edc..5995c23d 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/validators/SlidingExpirationParametersValidator.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/validators/SlidingExpirationParametersValidator.kt @@ -7,6 +7,6 @@ import cloud.mindbox.mobile_sdk.utils.loggingRunCatching internal class SlidingExpirationParametersValidator : Validator { override fun isValid(item: SettingsDtoBlank.SlidingExpirationDtoBlank): Boolean = loggingRunCatching(false) { - item.inappSession.parseTimeSpanToMillis() > 0 + item.config.parseTimeSpanToMillis() > 0 } } diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/managers/MobileConfigSettingsManagerImpl.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/managers/MobileConfigSettingsManagerImpl.kt index fa6d86c0..f1eaf4e1 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/managers/MobileConfigSettingsManagerImpl.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/managers/MobileConfigSettingsManagerImpl.kt @@ -8,7 +8,7 @@ import kotlin.time.Duration.Companion.milliseconds internal class MobileConfigSettingsManagerImpl(private val sessionStorageManager: SessionStorageManager) : MobileConfigSettingsManager { override fun saveSessionTime(config: InAppConfigResponse) { - config.settings?.slidingExpiration?.inappSession?.parseTimeSpanToMillis()?.let { sessionTime -> + config.settings?.slidingExpiration?.config?.parseTimeSpanToMillis()?.let { sessionTime -> if (sessionTime > 0) { sessionStorageManager.sessionTime = sessionTime.milliseconds mindboxLogI("Session time set to ${sessionStorageManager.sessionTime.inWholeMilliseconds} ms") diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/models/operation/response/InAppConfigResponse.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/models/operation/response/InAppConfigResponse.kt index 01c050a8..ef3bc15b 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/models/operation/response/InAppConfigResponse.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/models/operation/response/InAppConfigResponse.kt @@ -35,8 +35,8 @@ internal data class SettingsDtoBlank( ) internal data class SlidingExpirationDtoBlank( - @SerializedName("inappSession") - val inappSession: String + @SerializedName("config") + val config: String ) } @@ -60,8 +60,8 @@ internal data class TtlDto( ) internal data class SlidingExpirationDto( - @SerializedName("inappSession") - val inappSession: String + @SerializedName("config") + val config: String ) internal data class LogRequestDto( diff --git a/sdk/src/test/java/cloud/mindbox/mobile_sdk/inapp/data/managers/serialization/SettingsMobileConfigSerializationManagerTest.kt b/sdk/src/test/java/cloud/mindbox/mobile_sdk/inapp/data/managers/serialization/SettingsMobileConfigSerializationManagerTest.kt index 77fbbc61..52857c59 100644 --- a/sdk/src/test/java/cloud/mindbox/mobile_sdk/inapp/data/managers/serialization/SettingsMobileConfigSerializationManagerTest.kt +++ b/sdk/src/test/java/cloud/mindbox/mobile_sdk/inapp/data/managers/serialization/SettingsMobileConfigSerializationManagerTest.kt @@ -97,6 +97,8 @@ class SettingsMobileConfigSerializationManagerTest { assertNotNull(config.settings) assertEquals(3, config.settings!!.operations!!.size) + assertNotNull(config.settings.ttl?.inApps) + assertNotNull(config.settings.slidingExpiration?.config) assertNotNull(config.abtests) assertEquals(2, config.abtests!!.size) @@ -114,6 +116,9 @@ class SettingsMobileConfigSerializationManagerTest { assertNotNull(config.ttl) assertNotNull(config.ttl?.inApps) + + assertNotNull(config.slidingExpiration) + assertNotNull(config.slidingExpiration?.config) } // MARK: - Operations @@ -441,4 +446,80 @@ class SettingsMobileConfigSerializationManagerTest { config.ttl?.inApps, ) } + + // MARK: - SlidingExpiration + + @Test + fun settings_config_withSlidingExpirationError_shouldSetTtlToNull() { + val json = getJson("ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationError.json") + val config = manager.deserializeSettings(json)!! + + assertNotNull("Operations must be successfully parsed", config.operations) + assertNotNull(config.operations?.get("viewProduct")) + assertNotNull(config.operations?.get("viewCategory")) + assertNotNull(config.operations?.get("setCart")) + + assertNotNull("TTL must be successfully parsed", config.ttl) + assertNotNull("TTL must be successfully parsed", config.ttl?.inApps) + + assertNull("SlidingExpiration must be `null` if the key `slidingExpiration` is not found", config.slidingExpiration) + assertNull("Config session time must be `null`", config.slidingExpiration?.config) + } + + @Test + fun settings_config_withSlidingExpirationTypeError_shouldSetTtlToNull() { + val json = getJson("ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationTypeError.json") + val config = manager.deserializeSettings(json)!! + + assertNotNull("Operations must be successfully parsed", config.operations) + assertNotNull(config.operations?.get("viewProduct")) + assertNotNull(config.operations?.get("viewCategory")) + assertNotNull(config.operations?.get("setCart")) + + assertNotNull("TTL must be successfully parsed", config.ttl) + assertNotNull("TTL must be successfully parsed", config.ttl?.inApps) + + assertNull( + "SlidingExpiration must be `null` if the type of `config` is not a `slidingExpiration`", + config.slidingExpiration, + ) + assertNull("Config session time must be `null`", config.slidingExpiration?.config) + } + + @Test + fun settings_config_withSlidingExpirationConfigError_shouldSetTtlToNull() { + val json = getJson("ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationConfigsError.json") + val config = manager.deserializeSettings(json)!! + + assertNotNull("Operations must be successfully parsed", config.operations) + assertNotNull(config.operations?.get("viewProduct")) + assertNotNull(config.operations?.get("viewCategory")) + assertNotNull(config.operations?.get("setCart")) + + assertNotNull("TTL must be successfully parsed", config.ttl) + assertNotNull("TTL must be successfully parsed", config.ttl?.inApps) + + assertNull("SlidingExpiration must be `null` if the key `config` is not found", config.slidingExpiration) + assertNull("Config session time must be `null`", config.slidingExpiration?.config) + } + + @Test + fun settings_config_withSlidingExpirationConfigTypeError_shouldSetTtlToNull() { + val json = getJson("ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationConfigTypeError.json") + val config = manager.deserializeSettings(json)!! + + assertNotNull("Operations must be successfully parsed", config.operations) + assertNotNull(config.operations?.get("viewProduct")) + assertNotNull(config.operations?.get("viewCategory")) + assertNotNull(config.operations?.get("setCart")) + + assertNotNull("TTL must be successfully parsed", config.ttl) + assertNotNull("TTL must be successfully parsed", config.ttl?.inApps) + + assertNull("SlidingExpiration must be `null` if the key `config` is not a `String`", config.slidingExpiration) + assertNull( + "Config session time must be `null` if the key `config` is not a `String`", + config.slidingExpiration?.config, + ) + } } diff --git a/sdk/src/test/java/cloud/mindbox/mobile_sdk/models/SettingsStub.kt b/sdk/src/test/java/cloud/mindbox/mobile_sdk/models/SettingsStub.kt index 4814b86f..41091061 100644 --- a/sdk/src/test/java/cloud/mindbox/mobile_sdk/models/SettingsStub.kt +++ b/sdk/src/test/java/cloud/mindbox/mobile_sdk/models/SettingsStub.kt @@ -14,7 +14,7 @@ internal class SettingsStub { operations = emptyMap(), ttl = null, slidingExpiration = SlidingExpirationDto( - inappSession = timeSpan + config = timeSpan ) ), abtests = null diff --git a/sdk/src/test/resources/ConfigParsing/Config/ConfigWithSettingsABTestsMonitoringInapps.json b/sdk/src/test/resources/ConfigParsing/Config/ConfigWithSettingsABTestsMonitoringInapps.json index 1c0f20ca..66c3f5bc 100644 --- a/sdk/src/test/resources/ConfigParsing/Config/ConfigWithSettingsABTestsMonitoringInapps.json +++ b/sdk/src/test/resources/ConfigParsing/Config/ConfigWithSettingsABTestsMonitoringInapps.json @@ -324,7 +324,7 @@ "inapps": "1.00:00:00" }, "slidingExpiration": { - "inappSession": "1.00:00:00" + "config": "1.00:00:00" } }, "abtests": [ diff --git a/sdk/src/test/resources/ConfigParsing/ConfigWithSettingsABTestsMonitoringInapps.json b/sdk/src/test/resources/ConfigParsing/ConfigWithSettingsABTestsMonitoringInapps.json index d55d8152..303b2ff9 100644 --- a/sdk/src/test/resources/ConfigParsing/ConfigWithSettingsABTestsMonitoringInapps.json +++ b/sdk/src/test/resources/ConfigParsing/ConfigWithSettingsABTestsMonitoringInapps.json @@ -322,6 +322,9 @@ }, "ttl": { "inapps": "1.00:00:00" + }, + "slidingExpiration": { + "config": "0.00:30:00" } }, "abtests": [ diff --git a/sdk/src/test/resources/ConfigParsing/Settings/SettingsConfig.json b/sdk/src/test/resources/ConfigParsing/Settings/SettingsConfig.json index ea62a96c..c3c5c39c 100644 --- a/sdk/src/test/resources/ConfigParsing/Settings/SettingsConfig.json +++ b/sdk/src/test/resources/ConfigParsing/Settings/SettingsConfig.json @@ -12,5 +12,8 @@ }, "ttl": { "inapps": "1.00:00:00" + }, + "slidingExpiration": { + "config": "0.00:30:00" } } diff --git a/sdk/src/test/resources/ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationConfigTypeError.json b/sdk/src/test/resources/ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationConfigTypeError.json new file mode 100644 index 00000000..fd2780f0 --- /dev/null +++ b/sdk/src/test/resources/ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationConfigTypeError.json @@ -0,0 +1,19 @@ +{ + "operations": { + "viewProduct": { + "systemName": "ViewProduct" + }, + "viewCategory": { + "systemName": "ViewCategory" + }, + "setCart": { + "systemName": "SetCart" + } + }, + "ttl": { + "inapps": "1.00:00:00" + }, + "slidingExpiration": { + "config": 1 + } +} diff --git a/sdk/src/test/resources/ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationConfigsError.json b/sdk/src/test/resources/ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationConfigsError.json new file mode 100644 index 00000000..d54d6bc9 --- /dev/null +++ b/sdk/src/test/resources/ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationConfigsError.json @@ -0,0 +1,19 @@ +{ + "operations": { + "viewProduct": { + "systemName": "ViewProduct" + }, + "viewCategory": { + "systemName": "ViewCategory" + }, + "setCart": { + "systemName": "SetCart" + } + }, + "ttl": { + "inapps": "1.00:00:00" + }, + "slidingExpiration": { + "configTest": "0.00:30:00" + } +} diff --git a/sdk/src/test/resources/ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationError.json b/sdk/src/test/resources/ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationError.json new file mode 100644 index 00000000..1ee9fb61 --- /dev/null +++ b/sdk/src/test/resources/ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationError.json @@ -0,0 +1,19 @@ +{ + "operations": { + "viewProduct": { + "systemName": "ViewProduct" + }, + "viewCategory": { + "systemName": "ViewCategory" + }, + "setCart": { + "systemName": "SetCart" + } + }, + "ttl": { + "inapps": "1.00:00:00" + }, + "slidingExpirationTest": { + "config": "0.00:30:00" + } +} diff --git a/sdk/src/test/resources/ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationTypeError.json b/sdk/src/test/resources/ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationTypeError.json new file mode 100644 index 00000000..510febcc --- /dev/null +++ b/sdk/src/test/resources/ConfigParsing/Settings/SlidingExpirationErrors/SettingsSlidingExpirationTypeError.json @@ -0,0 +1,17 @@ +{ + "operations": { + "viewProduct": { + "systemName": "ViewProduct" + }, + "viewCategory": { + "systemName": "ViewCategory" + }, + "setCart": { + "systemName": "SetCart" + } + }, + "ttl": { + "inapps": "1.00:00:00" + }, + "slidingExpirationTest" : "1.00:00:00" +}