BIT-587 Add ConfigService layer to wrap ConfigApi (#80)

This commit is contained in:
Andrew Haisting 2023-10-02 13:20:32 -05:00 committed by Álison Fernandes
parent ea8806d20d
commit 11b8ab4105
4 changed files with 91 additions and 3 deletions

View file

@ -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()

View file

@ -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>
}

View file

@ -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()
}

View file

@ -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,
),
)