[PM-19831] Migrate ConfigService to network module (#4971)

This commit is contained in:
Patrick Honkonen
2025-04-03 14:15:51 -04:00
committed by GitHub
parent 5d4df86bc9
commit 321a764f20
15 changed files with 17 additions and 105 deletions

View File

@@ -1,5 +1,7 @@
package com.x8bit.bitwarden.data.platform.datasource.network.di package com.x8bit.bitwarden.data.platform.datasource.network.di
import com.bitwarden.network.service.ConfigService
import com.bitwarden.network.service.ConfigServiceImpl
import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource
import com.x8bit.bitwarden.data.platform.datasource.network.authenticator.RefreshAuthenticator import com.x8bit.bitwarden.data.platform.datasource.network.authenticator.RefreshAuthenticator
import com.x8bit.bitwarden.data.platform.datasource.network.interceptor.AuthTokenInterceptor import com.x8bit.bitwarden.data.platform.datasource.network.interceptor.AuthTokenInterceptor
@@ -7,8 +9,6 @@ import com.x8bit.bitwarden.data.platform.datasource.network.interceptor.BaseUrlI
import com.x8bit.bitwarden.data.platform.datasource.network.interceptor.HeadersInterceptor import com.x8bit.bitwarden.data.platform.datasource.network.interceptor.HeadersInterceptor
import com.x8bit.bitwarden.data.platform.datasource.network.retrofit.Retrofits import com.x8bit.bitwarden.data.platform.datasource.network.retrofit.Retrofits
import com.x8bit.bitwarden.data.platform.datasource.network.retrofit.RetrofitsImpl import com.x8bit.bitwarden.data.platform.datasource.network.retrofit.RetrofitsImpl
import com.x8bit.bitwarden.data.platform.datasource.network.service.ConfigService
import com.x8bit.bitwarden.data.platform.datasource.network.service.ConfigServiceImpl
import com.x8bit.bitwarden.data.platform.datasource.network.service.EventService import com.x8bit.bitwarden.data.platform.datasource.network.service.EventService
import com.x8bit.bitwarden.data.platform.datasource.network.service.EventServiceImpl import com.x8bit.bitwarden.data.platform.datasource.network.service.EventServiceImpl
import com.x8bit.bitwarden.data.platform.datasource.network.service.PushService import com.x8bit.bitwarden.data.platform.datasource.network.service.PushService

View File

@@ -1,9 +0,0 @@
package com.x8bit.bitwarden.data.platform.datasource.network.service
import com.bitwarden.network.api.ConfigApi
import com.bitwarden.network.model.ConfigResponseJson
import com.bitwarden.network.util.toResult
class ConfigServiceImpl(private val configApi: ConfigApi) : ConfigService {
override suspend fun getConfig(): Result<ConfigResponseJson> = configApi.getConfig().toResult()
}

View File

@@ -1,8 +1,8 @@
package com.x8bit.bitwarden.data.platform.repository package com.x8bit.bitwarden.data.platform.repository
import com.bitwarden.network.service.ConfigService
import com.x8bit.bitwarden.data.platform.datasource.disk.ConfigDiskSource import com.x8bit.bitwarden.data.platform.datasource.disk.ConfigDiskSource
import com.x8bit.bitwarden.data.platform.datasource.disk.model.ServerConfig import com.x8bit.bitwarden.data.platform.datasource.disk.model.ServerConfig
import com.x8bit.bitwarden.data.platform.datasource.network.service.ConfigService
import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.SharingStarted

View File

@@ -1,6 +1,7 @@
package com.x8bit.bitwarden.data.platform.repository.di package com.x8bit.bitwarden.data.platform.repository.di
import android.view.autofill.AutofillManager import android.view.autofill.AutofillManager
import com.bitwarden.network.service.ConfigService
import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource
import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilityEnabledManager import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilityEnabledManager
@@ -9,7 +10,6 @@ import com.x8bit.bitwarden.data.platform.datasource.disk.ConfigDiskSource
import com.x8bit.bitwarden.data.platform.datasource.disk.EnvironmentDiskSource import com.x8bit.bitwarden.data.platform.datasource.disk.EnvironmentDiskSource
import com.x8bit.bitwarden.data.platform.datasource.disk.FeatureFlagOverrideDiskSource import com.x8bit.bitwarden.data.platform.datasource.disk.FeatureFlagOverrideDiskSource
import com.x8bit.bitwarden.data.platform.datasource.disk.SettingsDiskSource import com.x8bit.bitwarden.data.platform.datasource.disk.SettingsDiskSource
import com.x8bit.bitwarden.data.platform.datasource.network.service.ConfigService
import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.PolicyManager
import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager
import com.x8bit.bitwarden.data.platform.repository.AuthenticatorBridgeRepository import com.x8bit.bitwarden.data.platform.repository.AuthenticatorBridgeRepository

View File

@@ -5,10 +5,10 @@ import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.network.model.ConfigResponseJson import com.bitwarden.network.model.ConfigResponseJson
import com.bitwarden.network.model.ConfigResponseJson.EnvironmentJson import com.bitwarden.network.model.ConfigResponseJson.EnvironmentJson
import com.bitwarden.network.model.ConfigResponseJson.ServerJson import com.bitwarden.network.model.ConfigResponseJson.ServerJson
import com.bitwarden.network.service.ConfigService
import com.x8bit.bitwarden.data.platform.base.FakeDispatcherManager import com.x8bit.bitwarden.data.platform.base.FakeDispatcherManager
import com.x8bit.bitwarden.data.platform.datasource.disk.model.ServerConfig import com.x8bit.bitwarden.data.platform.datasource.disk.model.ServerConfig
import com.x8bit.bitwarden.data.platform.datasource.disk.util.FakeConfigDiskSource import com.x8bit.bitwarden.data.platform.datasource.disk.util.FakeConfigDiskSource
import com.x8bit.bitwarden.data.platform.datasource.network.service.ConfigService
import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager
import io.mockk.coEvery import io.mockk.coEvery
import io.mockk.mockk import io.mockk.mockk

View File

@@ -4,8 +4,8 @@ import com.bitwarden.authenticator.data.platform.datasource.network.interceptor.
import com.bitwarden.authenticator.data.platform.datasource.network.interceptor.HeadersInterceptor import com.bitwarden.authenticator.data.platform.datasource.network.interceptor.HeadersInterceptor
import com.bitwarden.authenticator.data.platform.datasource.network.retrofit.Retrofits import com.bitwarden.authenticator.data.platform.datasource.network.retrofit.Retrofits
import com.bitwarden.authenticator.data.platform.datasource.network.retrofit.RetrofitsImpl import com.bitwarden.authenticator.data.platform.datasource.network.retrofit.RetrofitsImpl
import com.bitwarden.authenticator.data.platform.datasource.network.service.ConfigService import com.bitwarden.network.service.ConfigService
import com.bitwarden.authenticator.data.platform.datasource.network.service.ConfigServiceImpl import com.bitwarden.network.service.ConfigServiceImpl
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import dagger.hilt.InstallIn import dagger.hilt.InstallIn

View File

@@ -1,14 +0,0 @@
package com.bitwarden.authenticator.data.platform.datasource.network.service
import com.bitwarden.network.model.ConfigResponseJson
/**
* Provides an API for querying for app configurations.
*/
interface ConfigService {
/**
* Fetch app configuration.
*/
suspend fun getConfig(): Result<ConfigResponseJson>
}

View File

@@ -2,8 +2,8 @@ package com.bitwarden.authenticator.data.platform.repository
import com.bitwarden.authenticator.data.platform.datasource.disk.ConfigDiskSource import com.bitwarden.authenticator.data.platform.datasource.disk.ConfigDiskSource
import com.bitwarden.authenticator.data.platform.datasource.disk.model.ServerConfig import com.bitwarden.authenticator.data.platform.datasource.disk.model.ServerConfig
import com.bitwarden.authenticator.data.platform.datasource.network.service.ConfigService
import com.bitwarden.authenticator.data.platform.manager.DispatcherManager import com.bitwarden.authenticator.data.platform.manager.DispatcherManager
import com.bitwarden.network.service.ConfigService
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow

View File

@@ -6,7 +6,6 @@ import com.bitwarden.authenticator.data.platform.datasource.disk.ConfigDiskSourc
import com.bitwarden.authenticator.data.platform.datasource.disk.FeatureFlagDiskSource import com.bitwarden.authenticator.data.platform.datasource.disk.FeatureFlagDiskSource
import com.bitwarden.authenticator.data.platform.datasource.disk.FeatureFlagOverrideDiskSource import com.bitwarden.authenticator.data.platform.datasource.disk.FeatureFlagOverrideDiskSource
import com.bitwarden.authenticator.data.platform.datasource.disk.SettingsDiskSource import com.bitwarden.authenticator.data.platform.datasource.disk.SettingsDiskSource
import com.bitwarden.authenticator.data.platform.datasource.network.service.ConfigService
import com.bitwarden.authenticator.data.platform.manager.BiometricsEncryptionManager import com.bitwarden.authenticator.data.platform.manager.BiometricsEncryptionManager
import com.bitwarden.authenticator.data.platform.manager.DispatcherManager import com.bitwarden.authenticator.data.platform.manager.DispatcherManager
import com.bitwarden.authenticator.data.platform.repository.DebugMenuRepository import com.bitwarden.authenticator.data.platform.repository.DebugMenuRepository
@@ -17,6 +16,7 @@ import com.bitwarden.authenticator.data.platform.repository.ServerConfigReposito
import com.bitwarden.authenticator.data.platform.repository.ServerConfigRepositoryImpl import com.bitwarden.authenticator.data.platform.repository.ServerConfigRepositoryImpl
import com.bitwarden.authenticator.data.platform.repository.SettingsRepository import com.bitwarden.authenticator.data.platform.repository.SettingsRepository
import com.bitwarden.authenticator.data.platform.repository.SettingsRepositoryImpl import com.bitwarden.authenticator.data.platform.repository.SettingsRepositoryImpl
import com.bitwarden.network.service.ConfigService
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import dagger.hilt.InstallIn import dagger.hilt.InstallIn

View File

@@ -1,67 +0,0 @@
package com.bitwarden.authenticator.data.platform.datasource.network.service
import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.network.api.ConfigApi
import com.bitwarden.network.base.BaseServiceTest
import com.bitwarden.network.model.ConfigResponseJson
import kotlinx.coroutines.test.runTest
import kotlinx.serialization.json.JsonPrimitive
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(CONFIG_RESPONSE.asSuccess(), 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 JsonPrimitive(false),
),
)

View File

@@ -4,12 +4,12 @@ import app.cash.turbine.test
import com.bitwarden.authenticator.data.platform.base.FakeDispatcherManager import com.bitwarden.authenticator.data.platform.base.FakeDispatcherManager
import com.bitwarden.authenticator.data.platform.datasource.disk.model.ServerConfig import com.bitwarden.authenticator.data.platform.datasource.disk.model.ServerConfig
import com.bitwarden.authenticator.data.platform.datasource.disk.util.FakeConfigDiskSource import com.bitwarden.authenticator.data.platform.datasource.disk.util.FakeConfigDiskSource
import com.bitwarden.authenticator.data.platform.datasource.network.service.ConfigService
import com.bitwarden.authenticator.data.platform.manager.DispatcherManager import com.bitwarden.authenticator.data.platform.manager.DispatcherManager
import com.bitwarden.core.data.util.asSuccess import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.network.model.ConfigResponseJson import com.bitwarden.network.model.ConfigResponseJson
import com.bitwarden.network.model.ConfigResponseJson.EnvironmentJson import com.bitwarden.network.model.ConfigResponseJson.EnvironmentJson
import com.bitwarden.network.model.ConfigResponseJson.ServerJson import com.bitwarden.network.model.ConfigResponseJson.ServerJson
import com.bitwarden.network.service.ConfigService
import io.mockk.coEvery import io.mockk.coEvery
import io.mockk.mockk import io.mockk.mockk
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest

View File

@@ -58,6 +58,7 @@ dependencies {
testRuntimeOnly(libs.junit.platform.launcher) testRuntimeOnly(libs.junit.platform.launcher)
testImplementation(libs.junit.junit5) testImplementation(libs.junit.junit5)
testImplementation(libs.junit.vintage) testImplementation(libs.junit.vintage)
testImplementation(libs.kotlinx.coroutines.test)
testImplementation(libs.mockk.mockk) testImplementation(libs.mockk.mockk)
testImplementation(libs.square.okhttp.mockwebserver) testImplementation(libs.square.okhttp.mockwebserver)
testImplementation(libs.square.turbine) testImplementation(libs.square.turbine)

View File

@@ -1,4 +1,4 @@
package com.x8bit.bitwarden.data.platform.datasource.network.service package com.bitwarden.network.service
import com.bitwarden.network.model.ConfigResponseJson import com.bitwarden.network.model.ConfigResponseJson

View File

@@ -1,12 +1,13 @@
package com.bitwarden.authenticator.data.platform.datasource.network.service package com.bitwarden.network.service
import com.bitwarden.network.api.ConfigApi import com.bitwarden.network.api.ConfigApi
import com.bitwarden.network.model.ConfigResponseJson import com.bitwarden.network.model.ConfigResponseJson
import com.bitwarden.network.util.toResult import com.bitwarden.network.util.toResult
/** /**
* Default implementation of [ConfigService] for querying for app configurations. * Default implementation of [ConfigService] for querying app configurations.
*/ */
// TODO [PM-19846] Make internal when dependents are migrated.
class ConfigServiceImpl(private val configApi: ConfigApi) : ConfigService { class ConfigServiceImpl(private val configApi: ConfigApi) : ConfigService {
override suspend fun getConfig(): Result<ConfigResponseJson> = configApi.getConfig().toResult() override suspend fun getConfig(): Result<ConfigResponseJson> = configApi.getConfig().toResult()
} }

View File

@@ -1,8 +1,8 @@
package com.x8bit.bitwarden.data.platform.datasource.network.service package com.bitwarden.network.service
import com.bitwarden.core.data.util.asSuccess import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.network.base.BaseServiceTest
import com.bitwarden.network.api.ConfigApi import com.bitwarden.network.api.ConfigApi
import com.bitwarden.network.base.BaseServiceTest
import com.bitwarden.network.model.ConfigResponseJson import com.bitwarden.network.model.ConfigResponseJson
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.JsonPrimitive