Add test for DeepLinkCreator
This commit is contained in:
parent
0874c076d6
commit
da6a391cc6
5 changed files with 61 additions and 3 deletions
|
|
@ -37,4 +37,5 @@ dependencies {
|
||||||
|
|
||||||
testImplementation(libs.test.junit)
|
testImplementation(libs.test.junit)
|
||||||
testImplementation(libs.test.truth)
|
testImplementation(libs.test.truth)
|
||||||
|
testImplementation(projects.libraries.matrix.test)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.deeplink
|
||||||
|
|
||||||
|
internal const val SCHEME = "elementx"
|
||||||
|
internal const val HOST = "open"
|
||||||
|
|
@ -24,7 +24,7 @@ import javax.inject.Inject
|
||||||
class DeepLinkCreator @Inject constructor() {
|
class DeepLinkCreator @Inject constructor() {
|
||||||
fun create(sessionId: SessionId, roomId: RoomId?, threadId: ThreadId?): String {
|
fun create(sessionId: SessionId, roomId: RoomId?, threadId: ThreadId?): String {
|
||||||
return buildString {
|
return buildString {
|
||||||
append("elementx://open/")
|
append("$SCHEME://$HOST/")
|
||||||
append(sessionId.value)
|
append(sessionId.value)
|
||||||
if (roomId != null) {
|
if (roomId != null) {
|
||||||
append("/")
|
append("/")
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,8 @@ class DeeplinkParser @Inject constructor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Uri.toDeeplinkData(): DeeplinkData? {
|
private fun Uri.toDeeplinkData(): DeeplinkData? {
|
||||||
if (scheme != "elementx") return null
|
if (scheme != SCHEME) return null
|
||||||
if (host != "open") return null
|
if (host != HOST) return null
|
||||||
val pathBits = path.orEmpty().split("/").drop(1)
|
val pathBits = path.orEmpty().split("/").drop(1)
|
||||||
val sessionId = pathBits.elementAtOrNull(0)?.asSessionId() ?: return null
|
val sessionId = pathBits.elementAtOrNull(0)?.asSessionId() ?: return null
|
||||||
val roomId = pathBits.elementAtOrNull(1)?.asRoomId()
|
val roomId = pathBits.elementAtOrNull(1)?.asRoomId()
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.deeplink
|
||||||
|
|
||||||
|
import com.google.common.truth.Truth.assertThat
|
||||||
|
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
||||||
|
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||||
|
import io.element.android.libraries.matrix.test.A_THREAD_ID
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
class DeepLinkCreatorTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun create() {
|
||||||
|
val sut = DeepLinkCreator()
|
||||||
|
assertThat(sut.create(A_SESSION_ID, null, null))
|
||||||
|
.isEqualTo("elementx://open/@alice:server.org")
|
||||||
|
assertThat(sut.create(A_SESSION_ID, A_ROOM_ID, null))
|
||||||
|
.isEqualTo("elementx://open/@alice:server.org/!aRoomId:domain")
|
||||||
|
assertThat(sut.create(A_SESSION_ID, A_ROOM_ID, A_THREAD_ID))
|
||||||
|
.isEqualTo("elementx://open/@alice:server.org/!aRoomId:domain/\$aThreadId")
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue