fix(sessions): tolerate integer and string boolean formats for pinned field (#966) (#967)

Co-authored-by: M57 <hy4ri@users.noreply.github.com>
This commit is contained in:
M57andM57 authored and GitHub committed 2026-08-25 17:05:14 +03:00
1 parent ece0288ca8
commit 9217f9f8b6
2 files changed
+98

No files matched your search

@@ -271,6 +271,47 @@ class ModelSerializationTest {
}
}
@Test
fun testSessionInfoDeserialization_pinnedToleratesIntAndBooleanAndString() {
// Backend returns integer 0 (SQLite style)
val jsonIntZero = """{"id": "s1", "pinned": 0}"""
val s1 = json.decodeFromString<SessionInfo>(jsonIntZero)
assertEquals(false, s1.pinned)
// Backend returns integer 1
val jsonIntOne = """{"id": "s2", "pinned": 1}"""
val s2 = json.decodeFromString<SessionInfo>(jsonIntOne)
assertEquals(true, s2.pinned)
// Backend returns boolean false
val jsonBoolFalse = """{"id": "s3", "pinned": false}"""
val s3 = json.decodeFromString<SessionInfo>(jsonBoolFalse)
assertEquals(false, s3.pinned)
// Backend returns boolean true
val jsonBoolTrue = """{"id": "s4", "pinned": true}"""
val s4 = json.decodeFromString<SessionInfo>(jsonBoolTrue)
assertEquals(true, s4.pinned)
// Backend returns null or omitted
val jsonNull = """{"id": "s5", "pinned": null}"""
val s5 = json.decodeFromString<SessionInfo>(jsonNull)
assertNull(s5.pinned)
val jsonOmitted = """{"id": "s6"}"""
val s6 = json.decodeFromString<SessionInfo>(jsonOmitted)
assertNull(s6.pinned)
// Backend returns string "1" / "0" / "true" / "false"
val jsonStrOne = """{"id": "s7", "pinned": "1"}"""
val s7 = json.decodeFromString<SessionInfo>(jsonStrOne)
assertEquals(true, s7.pinned)
val jsonStrFalse = """{"id": "s8", "pinned": "false"}"""
val s8 = json.decodeFromString<SessionInfo>(jsonStrFalse)
assertEquals(false, s8.pinned)
}
@Test
fun testSessionMessagesResponseDeserialization_missingMessages_causesNullOnNonNullableField() {
val jsonStr = "{}"