mirror of
https://github.com/bitwarden/android.git
synced 2024-11-24 02:15:53 +03:00
BIT-587 Add ConfigService layer to wrap ConfigApi (#80)
This commit is contained in:
parent
ea8806d20d
commit
11b8ab4105
4 changed files with 91 additions and 3 deletions
|
@ -1,9 +1,10 @@
|
|||
package com.x8bit.bitwarden.data.platform.datasource.network.di
|
||||
|
||||
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
|
||||
import com.x8bit.bitwarden.data.platform.datasource.network.api.ConfigApi
|
||||
import com.x8bit.bitwarden.data.platform.datasource.network.core.ResultCallAdapterFactory
|
||||
import com.x8bit.bitwarden.data.platform.datasource.network.interceptor.AuthTokenInterceptor
|
||||
import com.x8bit.bitwarden.data.platform.datasource.network.service.ConfigService
|
||||
import com.x8bit.bitwarden.data.platform.datasource.network.service.ConfigServiceImpl
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
|
@ -30,8 +31,8 @@ object NetworkModule {
|
|||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun providesConfigApiService(@Named(UNAUTHORIZED) retrofit: Retrofit): ConfigApi =
|
||||
retrofit.create()
|
||||
fun providesConfigService(@Named(UNAUTHORIZED) retrofit: Retrofit): ConfigService =
|
||||
ConfigServiceImpl(retrofit.create())
|
||||
|
||||
fun provideOkHttpClient(): OkHttpClient {
|
||||
return OkHttpClient.Builder()
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package com.x8bit.bitwarden.data.platform.datasource.network.service
|
||||
|
||||
import com.x8bit.bitwarden.data.platform.datasource.network.model.ConfigResponseJson
|
||||
|
||||
/**
|
||||
* Provides an API for querying config endpoints.
|
||||
*/
|
||||
interface ConfigService {
|
||||
|
||||
/**
|
||||
* Fetch app configuration.
|
||||
*/
|
||||
suspend fun getConfig(): Result<ConfigResponseJson>
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package com.x8bit.bitwarden.data.platform.datasource.network.service
|
||||
|
||||
import com.x8bit.bitwarden.data.platform.datasource.network.api.ConfigApi
|
||||
import com.x8bit.bitwarden.data.platform.datasource.network.model.ConfigResponseJson
|
||||
|
||||
class ConfigServiceImpl(private val configApi: ConfigApi) : ConfigService {
|
||||
override suspend fun getConfig(): Result<ConfigResponseJson> = configApi.getConfig()
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
package com.x8bit.bitwarden.data.platform.datasource.network.service
|
||||
|
||||
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
|
||||
import com.x8bit.bitwarden.data.platform.datasource.network.api.ConfigApi
|
||||
import com.x8bit.bitwarden.data.platform.datasource.network.model.ConfigResponseJson
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import okhttp3.mockwebserver.MockResponse
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Test
|
||||
import retrofit2.create
|
||||
|
||||
class ConfigServiceTest : BaseServiceTest() {
|
||||
|
||||
private val api: ConfigApi = retrofit.create()
|
||||
private val service = ConfigServiceImpl(api)
|
||||
|
||||
@Test
|
||||
fun `getConfig should call ConfigApi`() = runTest {
|
||||
server.enqueue(MockResponse().setBody(CONFIG_RESPONSE_JSON))
|
||||
assertEquals(Result.success(CONFIG_RESPONSE), service.getConfig())
|
||||
}
|
||||
}
|
||||
|
||||
private const val CONFIG_RESPONSE_JSON = """
|
||||
{
|
||||
"object": "config",
|
||||
"version": "1",
|
||||
"gitHash": "gitHash",
|
||||
"server": {
|
||||
"name": "default",
|
||||
"url": "url"
|
||||
},
|
||||
"environment": {
|
||||
"cloudRegion": "US",
|
||||
"vault": "vaultUrl",
|
||||
"api": "apiUrl",
|
||||
"identity": "identityUrl",
|
||||
"notifications": "notificationsUrl",
|
||||
"sso": "ssoUrl"
|
||||
},
|
||||
"featureStates": {
|
||||
"feature one": false
|
||||
}
|
||||
}
|
||||
"""
|
||||
private val CONFIG_RESPONSE = ConfigResponseJson(
|
||||
type = "config",
|
||||
version = "1",
|
||||
gitHash = "gitHash",
|
||||
server = ConfigResponseJson.ServerJson(
|
||||
name = "default",
|
||||
url = "url",
|
||||
),
|
||||
environment = ConfigResponseJson.EnvironmentJson(
|
||||
cloudRegion = "US",
|
||||
vaultUrl = "vaultUrl",
|
||||
apiUrl = "apiUrl",
|
||||
notificationsUrl = "notificationsUrl",
|
||||
identityUrl = "identityUrl",
|
||||
ssoUrl = "ssoUrl",
|
||||
),
|
||||
featureStates = mapOf(
|
||||
"feature one" to false,
|
||||
),
|
||||
)
|
Loading…
Reference in a new issue