Add Kotlinx Kover test coverage calculator (#199)
* Add Kotlin Kover * Add AuthKtorConfiguration tests * Ensure at least 25% code coverage * Exclude Previews from code coverage * Specify Kover report path for SonarQube * Add Kover xml report task * Extract sonar to a separate step * Add some exclusions and minimum coverage * Exclude Hilt-generated classes * Add shopping list view model tests * Reduce the coverage requirement
This commit is contained in:
@@ -1,11 +1,13 @@
|
||||
package gq.kirmanak.mealient.datasource.ktor
|
||||
|
||||
import androidx.annotation.VisibleForTesting
|
||||
import gq.kirmanak.mealient.datasource.AuthenticationProvider
|
||||
import gq.kirmanak.mealient.logging.Logger
|
||||
import io.ktor.client.HttpClientConfig
|
||||
import io.ktor.client.engine.HttpClientEngineConfig
|
||||
import io.ktor.client.plugins.auth.Auth
|
||||
import io.ktor.client.plugins.auth.providers.BearerTokens
|
||||
import io.ktor.client.plugins.auth.providers.RefreshTokensParams
|
||||
import io.ktor.client.plugins.auth.providers.bearer
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import javax.inject.Inject
|
||||
@@ -27,14 +29,7 @@ internal class AuthKtorConfiguration @Inject constructor(
|
||||
}
|
||||
|
||||
refreshTokens {
|
||||
val newTokens = getTokens()
|
||||
val sameAccessToken = newTokens?.accessToken == oldTokens?.accessToken
|
||||
if (sameAccessToken && response.status == HttpStatusCode.Unauthorized) {
|
||||
authenticationProvider.logout()
|
||||
null
|
||||
} else {
|
||||
newTokens
|
||||
}
|
||||
refreshTokens()
|
||||
}
|
||||
|
||||
sendWithoutRequest { true }
|
||||
@@ -42,7 +37,20 @@ internal class AuthKtorConfiguration @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun getTokens(): BearerTokens? {
|
||||
@VisibleForTesting
|
||||
suspend fun RefreshTokensParams.refreshTokens(): BearerTokens? {
|
||||
val newTokens = getTokens()
|
||||
val sameAccessToken = newTokens?.accessToken == oldTokens?.accessToken
|
||||
return if (sameAccessToken && response.status == HttpStatusCode.Unauthorized) {
|
||||
authenticationProvider.logout()
|
||||
null
|
||||
} else {
|
||||
newTokens
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
suspend fun getTokens(): BearerTokens? {
|
||||
val token = authenticationProvider.getAuthToken()
|
||||
logger.v { "getTokens(): token = $token" }
|
||||
return token?.let { BearerTokens(accessToken = it, refreshToken = "") }
|
||||
|
||||
Reference in New Issue
Block a user