Add tests.

This commit is contained in:
Benoit Marty 2023-06-08 22:56:36 +02:00
parent 319d74b12b
commit 563f8d3403
7 changed files with 180 additions and 77 deletions

View file

@ -49,10 +49,11 @@ class DefaultHomeserverResolver @Inject constructor(
emit(Async.Uninitialized)
// Debounce
delay(300)
val clean = userInput.trim()
if (clean.length < 4) return@flow
val trimmedUserInput = userInput.trim()
if (trimmedUserInput.length < 4) return@flow
emit(Async.Loading())
val list = getUrlCandidate(clean.ensureProtocol().removeSuffix("/"))
val candidateBase = trimmedUserInput.ensureProtocol().removeSuffix("/")
val list = getUrlCandidates(candidateBase)
val currentList = Collections.synchronizedList(mutableListOf<HomeserverData>())
// Run all the requests in parallel
withContext(dispatchers.io) {
@ -77,14 +78,14 @@ class DefaultHomeserverResolver @Inject constructor(
}
}.awaitAll()
}
// If list is empty, and the user as entered an URL, do not block the user.
// If list is empty, and the user has entered an URL, do not block the user.
if (currentList.isEmpty()) {
if (userInput.isValidUrl()) {
if (trimmedUserInput.isValidUrl()) {
emit(
Async.Success(
listOf(
HomeserverData(
homeserverUrl = userInput,
homeserverUrl = trimmedUserInput,
isWellknownValid = false,
supportSlidingSync = false,
)
@ -97,7 +98,7 @@ class DefaultHomeserverResolver @Inject constructor(
}
}
private fun getUrlCandidate(data: String): List<String> {
private fun getUrlCandidates(data: String): List<String> {
return buildList {
if (data.contains(".")) {
// TLD detected?

View file

@ -0,0 +1,36 @@
/*
* 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.features.login.impl.changeaccountprovider.form.network
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.network.RetrofitFactory
import javax.inject.Inject
@ContributesBinding(AppScope::class)
class DefaultWellknownRequest @Inject constructor(
private val retrofitFactory: RetrofitFactory,
) : WellknownRequest {
/**
* Return the WellKnown data, if found.
* @param baseUrl for instance https://matrix.org
*/
override suspend fun execute(baseUrl: String): WellKnown {
val wellknownApi = retrofitFactory.create(baseUrl)
.create(WellknownAPI::class.java)
return wellknownApi.getWellKnown()
}
}

View file

@ -15,19 +15,10 @@
*/
package io.element.android.features.login.impl.changeaccountprovider.form.network
import io.element.android.libraries.network.RetrofitFactory
import javax.inject.Inject
class WellknownRequest @Inject constructor(
private val retrofitFactory: RetrofitFactory,
) {
interface WellknownRequest {
/**
* Return the WellKnown data, if found.
* Return the WellKnown data, or throw an error if not found.
* @param baseUrl for instance https://matrix.org
*/
suspend fun execute(baseUrl: String): WellKnown {
val wellknownApi = retrofitFactory.create(baseUrl)
.create(WellknownAPI::class.java)
return wellknownApi.getWellKnown()
}
suspend fun execute(baseUrl: String): WellKnown
}