From 0740330b395c8c720fa32d236ce9e5ec95a5191f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 12 Jul 2023 09:59:52 +0200 Subject: [PATCH] Rework DeeplinkParser to fix a test (and fix a bug in release mode). The test was failing in release mode because there is not check on `RoomId` format, so INVITE_LIST value ("invites") is seen as a valid RoomId. First check for known paths, then try to parse as RoomId. The tryOrNull will return null only in debug mode, so I think we can remove it. Error was: value of: getFromIntent(...) expected: InviteList(sessionId=@alice:server.org) but was : Room(sessionId=@alice:server.org, roomId=invites, threadId=null) at io.element.android.libraries.deeplink.DeeplinkParserTest.nominal cases(DeeplinkParserTest.kt:54) --- .../libraries/deeplink/DeeplinkParser.kt | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkParser.kt b/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkParser.kt index 7d2c8af135..7a5f9d5772 100644 --- a/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkParser.kt +++ b/libraries/deeplink/src/main/kotlin/io/element/android/libraries/deeplink/DeeplinkParser.kt @@ -18,7 +18,6 @@ package io.element.android.libraries.deeplink import android.content.Intent import android.net.Uri -import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.ThreadId @@ -37,21 +36,15 @@ class DeeplinkParser @Inject constructor() { if (host != HOST) return null val pathBits = path.orEmpty().split("/").drop(1) val sessionId = pathBits.elementAtOrNull(0)?.let(::SessionId) ?: return null - val screenPathComponent = pathBits.elementAtOrNull(1) - val roomId = tryOrNull { screenPathComponent?.let(::RoomId) } - return when { - roomId != null -> { + return when (val screenPathComponent = pathBits.elementAtOrNull(1)) { + null -> DeeplinkData.Root(sessionId) + DeepLinkPaths.INVITE_LIST -> DeeplinkData.InviteList(sessionId) + else -> { + val roomId = screenPathComponent.let(::RoomId) val threadId = pathBits.elementAtOrNull(2)?.let(::ThreadId) DeeplinkData.Room(sessionId, roomId, threadId) } - screenPathComponent == DeepLinkPaths.INVITE_LIST -> { - DeeplinkData.InviteList(sessionId) - } - screenPathComponent == null -> { - DeeplinkData.Root(sessionId) - } - else -> null } } }