Skip to content

Commit

Permalink
WMSDK-410: change slidingExpiration contract
Browse files Browse the repository at this point in the history
  • Loading branch information
sergeysozinov authored Feb 14, 2025
1 parent 11c8e75 commit 0643a44
Show file tree
Hide file tree
Showing 14 changed files with 174 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -179,15 +179,15 @@ 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)
}?.let { slidingExpirationDtoBlank ->
inAppMapper.mapToSlidingExpiration(slidingExpirationDtoBlank)
}
} catch (e: Exception) {
mindboxLogE("Error parse inappsSession time", e)
mindboxLogE("Error parse config session time", e)
null
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ import cloud.mindbox.mobile_sdk.utils.loggingRunCatching
internal class SlidingExpirationParametersValidator : Validator<SettingsDtoBlank.SlidingExpirationDtoBlank> {
override fun isValid(item: SettingsDtoBlank.SlidingExpirationDtoBlank): Boolean =
loggingRunCatching(false) {
item.inappSession.parseTimeSpanToMillis() > 0
item.config.parseTimeSpanToMillis() > 0
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ internal data class SettingsDtoBlank(
)

internal data class SlidingExpirationDtoBlank(
@SerializedName("inappSession")
val inappSession: String
@SerializedName("config")
val config: String
)
}

Expand All @@ -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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -114,6 +116,9 @@ class SettingsMobileConfigSerializationManagerTest {

assertNotNull(config.ttl)
assertNotNull(config.ttl?.inApps)

assertNotNull(config.slidingExpiration)
assertNotNull(config.slidingExpiration?.config)
}

// MARK: - Operations
Expand Down Expand Up @@ -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,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ internal class SettingsStub {
operations = emptyMap(),
ttl = null,
slidingExpiration = SlidingExpirationDto(
inappSession = timeSpan
config = timeSpan
)
),
abtests = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@
"inapps": "1.00:00:00"
},
"slidingExpiration": {
"inappSession": "1.00:00:00"
"config": "1.00:00:00"
}
},
"abtests": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,9 @@
},
"ttl": {
"inapps": "1.00:00:00"
},
"slidingExpiration": {
"config": "0.00:30:00"
}
},
"abtests": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,8 @@
},
"ttl": {
"inapps": "1.00:00:00"
},
"slidingExpiration": {
"config": "0.00:30:00"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"operations": {
"viewProduct": {
"systemName": "ViewProduct"
},
"viewCategory": {
"systemName": "ViewCategory"
},
"setCart": {
"systemName": "SetCart"
}
},
"ttl": {
"inapps": "1.00:00:00"
},
"slidingExpiration": {
"config": 1
}
}
Original file line number Diff line number Diff line change
@@ -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"
}
}
Original file line number Diff line number Diff line change
@@ -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"
}
}
Original file line number Diff line number Diff line change
@@ -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"
}

0 comments on commit 0643a44

Please sign in to comment.