[PM-19813] Migrate BaseServiceTest to Network module and enable test fixtures (#4967)

This commit is contained in:
Patrick Honkonen 2025-04-02 17:12:36 -04:00 committed by GitHub
parent a6862bb791
commit e67a143474
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 52 additions and 59 deletions

View File

@ -270,6 +270,9 @@ dependencies {
standardImplementation(libs.google.firebase.crashlytics)
standardImplementation(libs.google.play.review)
// Pull in test fixtures from other modules
testImplementation(testFixtures(project(":network")))
testImplementation(libs.androidx.compose.ui.test)
testImplementation(libs.google.hilt.android.testing)
testImplementation(platform(libs.junit.bom))

View File

@ -1,6 +1,7 @@
package com.x8bit.bitwarden.data.auth.datasource.network.service
import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.auth.datasource.network.api.AuthenticatedAccountsApi
import com.x8bit.bitwarden.data.auth.datasource.network.api.AuthenticatedKeyConnectorApi
import com.x8bit.bitwarden.data.auth.datasource.network.api.UnauthenticatedAccountsApi
@ -14,7 +15,6 @@ import com.x8bit.bitwarden.data.auth.datasource.network.model.ResendEmailRequest
import com.x8bit.bitwarden.data.auth.datasource.network.model.ResendNewDeviceOtpRequestJson
import com.x8bit.bitwarden.data.auth.datasource.network.model.ResetPasswordRequestJson
import com.x8bit.bitwarden.data.auth.datasource.network.model.SetPasswordRequestJson
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import kotlinx.coroutines.test.runTest
import okhttp3.mockwebserver.MockResponse
import org.junit.jupiter.api.Assertions.assertEquals

View File

@ -1,9 +1,9 @@
package com.x8bit.bitwarden.data.auth.datasource.network.service
import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.auth.datasource.network.api.AuthenticatedAuthRequestsApi
import com.x8bit.bitwarden.data.auth.datasource.network.model.AuthRequestsResponseJson
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import kotlinx.coroutines.test.runTest
import okhttp3.mockwebserver.MockResponse
import org.junit.jupiter.api.Assertions.assertEquals

View File

@ -1,10 +1,10 @@
package com.x8bit.bitwarden.data.auth.datasource.network.service
import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.auth.datasource.network.api.AuthenticatedDevicesApi
import com.x8bit.bitwarden.data.auth.datasource.network.api.UnauthenticatedDevicesApi
import com.x8bit.bitwarden.data.auth.datasource.network.model.TrustedDeviceKeysResponseJson
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import kotlinx.coroutines.test.runTest
import okhttp3.mockwebserver.MockResponse
import org.junit.jupiter.api.Assertions.assertEquals

View File

@ -1,7 +1,7 @@
package com.x8bit.bitwarden.data.auth.datasource.network.service
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.auth.datasource.network.api.HaveIBeenPwnedApi
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import kotlinx.coroutines.test.runTest
import okhttp3.mockwebserver.MockResponse
import org.junit.jupiter.api.Assertions.assertEquals

View File

@ -1,6 +1,7 @@
package com.x8bit.bitwarden.data.auth.datasource.network.service
import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.auth.datasource.network.api.UnauthenticatedIdentityApi
import com.x8bit.bitwarden.data.auth.datasource.network.model.GetTokenResponseJson
import com.x8bit.bitwarden.data.auth.datasource.network.model.IdentityTokenAuthModel
@ -20,7 +21,6 @@ import com.x8bit.bitwarden.data.auth.datasource.network.model.TwoFactorAuthMetho
import com.x8bit.bitwarden.data.auth.datasource.network.model.UserDecryptionOptionsJson
import com.x8bit.bitwarden.data.auth.datasource.network.model.VerifyEmailTokenRequestJson
import com.x8bit.bitwarden.data.auth.datasource.network.model.VerifyEmailTokenResponseJson
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import com.x8bit.bitwarden.data.platform.util.DeviceModelProvider
import io.mockk.every
import io.mockk.mockk

View File

@ -1,11 +1,11 @@
package com.x8bit.bitwarden.data.auth.datasource.network.service
import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.auth.datasource.network.api.AuthenticatedAuthRequestsApi
import com.x8bit.bitwarden.data.auth.datasource.network.api.UnauthenticatedAuthRequestsApi
import com.x8bit.bitwarden.data.auth.datasource.network.model.AuthRequestTypeJson
import com.x8bit.bitwarden.data.auth.datasource.network.model.AuthRequestsResponseJson
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import kotlinx.coroutines.test.runTest
import okhttp3.mockwebserver.MockResponse
import org.junit.jupiter.api.Assertions.assertEquals

View File

@ -1,13 +1,13 @@
package com.x8bit.bitwarden.data.auth.datasource.network.service
import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.auth.datasource.network.api.AuthenticatedOrganizationApi
import com.x8bit.bitwarden.data.auth.datasource.network.api.UnauthenticatedOrganizationApi
import com.x8bit.bitwarden.data.auth.datasource.network.model.OrganizationAutoEnrollStatusResponseJson
import com.x8bit.bitwarden.data.auth.datasource.network.model.OrganizationDomainSsoDetailsResponseJson
import com.x8bit.bitwarden.data.auth.datasource.network.model.OrganizationKeysResponseJson
import com.x8bit.bitwarden.data.auth.datasource.network.model.VerifiedOrganizationDomainSsoDetailsResponse
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import kotlinx.coroutines.test.runTest
import okhttp3.mockwebserver.MockResponse
import org.junit.jupiter.api.Assertions.assertEquals

View File

@ -1,8 +1,8 @@
package com.x8bit.bitwarden.data.autofill.fido2.datasource.network.service
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.api.DigitalAssetLinkApi
import com.x8bit.bitwarden.data.autofill.fido2.datasource.network.model.DigitalAssetLinkResponseJson
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import kotlinx.coroutines.test.runTest
import okhttp3.mockwebserver.MockResponse
import org.junit.jupiter.api.Assertions.assertEquals

View File

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

View File

@ -1,6 +1,6 @@
package com.x8bit.bitwarden.data.platform.datasource.network.service
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.platform.datasource.network.api.EventApi
import com.x8bit.bitwarden.data.platform.datasource.network.model.OrganizationEventJson
import com.x8bit.bitwarden.data.platform.manager.model.OrganizationEventType

View File

@ -1,6 +1,6 @@
package com.x8bit.bitwarden.data.platform.datasource.network.service
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.platform.datasource.network.api.PushApi
import com.x8bit.bitwarden.data.platform.datasource.network.model.PushTokenRequest
import kotlinx.coroutines.test.runTest

View File

@ -1,7 +1,7 @@
package com.x8bit.bitwarden.data.vault.datasource.network.service
import android.net.Uri
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.vault.datasource.network.api.AzureApi
import com.x8bit.bitwarden.data.vault.datasource.network.api.CiphersApi
import com.x8bit.bitwarden.data.vault.datasource.network.model.CreateCipherInOrganizationJsonRequest

View File

@ -1,6 +1,6 @@
package com.x8bit.bitwarden.data.vault.datasource.network.service
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.vault.datasource.network.api.DownloadApi
import kotlinx.coroutines.test.runTest
import okhttp3.mockwebserver.MockResponse

View File

@ -1,6 +1,6 @@
package com.x8bit.bitwarden.data.vault.datasource.network.service
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.vault.datasource.network.api.FoldersApi
import com.x8bit.bitwarden.data.vault.datasource.network.model.FolderJsonRequest
import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson

View File

@ -1,7 +1,7 @@
package com.x8bit.bitwarden.data.vault.datasource.network.service
import android.net.Uri
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.vault.datasource.network.api.AzureApi
import com.x8bit.bitwarden.data.vault.datasource.network.api.SendsApi
import com.x8bit.bitwarden.data.vault.datasource.network.model.CreateFileSendResponse

View File

@ -1,6 +1,6 @@
package com.x8bit.bitwarden.data.vault.datasource.network.service
import com.x8bit.bitwarden.data.platform.base.BaseServiceTest
import com.bitwarden.network.base.BaseServiceTest
import com.x8bit.bitwarden.data.vault.datasource.network.api.SyncApi
import com.x8bit.bitwarden.data.vault.datasource.network.model.createMockSyncResponse
import kotlinx.coroutines.test.runTest
@ -100,7 +100,7 @@ private const val SYNC_SUCCESS_JSON = """
"familySponsorshipLastSyncDate": "2023-10-27T12:00:00.00Z",
"name": "mockName-1",
"useApi": false,
"familySponsorshipValidUntil": "2023-10-27T12:00:00.00Z",
"familySponsorshipValidUntil": "2023-10-27T12:00:00.00Z",
"status": 1
}
],
@ -175,7 +175,7 @@ private const val SYNC_SUCCESS_JSON = """
"familySponsorshipLastSyncDate": "2023-10-27T12:00:00.00Z",
"name": "mockName-1",
"useApi": false,
"familySponsorshipValidUntil": "2023-10-27T12:00:00.00Z",
"familySponsorshipValidUntil": "2023-10-27T12:00:00.00Z",
"status": 1
}
]
@ -364,5 +364,5 @@ private const val SYNC_SUCCESS_JSON = """
"expirationDate": "2023-10-27T12:00:00.00Z"
}
]
}
}
"""

View File

@ -205,6 +205,9 @@ dependencies {
debugImplementation(libs.androidx.compose.ui.test.manifest)
debugImplementation(libs.androidx.compose.ui.tooling)
// Pull in test fixtures from other modules.
testImplementation(testFixtures(project(":network")))
testImplementation(libs.androidx.compose.ui.test)
testImplementation(libs.google.hilt.android.testing)
testImplementation(platform(libs.junit.bom))

View File

@ -1,35 +0,0 @@
package com.bitwarden.authenticator.data.platform.base
import com.bitwarden.core.di.CoreModule
import com.bitwarden.network.core.NetworkResultCallAdapterFactory
import okhttp3.HttpUrl
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.mockwebserver.MockWebServer
import org.junit.jupiter.api.AfterEach
import retrofit2.Retrofit
import retrofit2.converter.kotlinx.serialization.asConverterFactory
/**
* Base class for service tests. Provides common mock web server and retrofit setup.
*/
abstract class BaseServiceTest {
protected val json = CoreModule.providesJson()
protected val server = MockWebServer().apply { start() }
protected val url: HttpUrl = server.url("/")
protected val urlPrefix: String get() = "http://${server.hostName}:${server.port}"
protected val retrofit: Retrofit = Retrofit.Builder()
.baseUrl(url.toString())
.addCallAdapterFactory(NetworkResultCallAdapterFactory())
.addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
.build()
@AfterEach
fun after() {
server.shutdown()
}
}

View File

@ -1,8 +1,8 @@
package com.bitwarden.authenticator.data.platform.datasource.network.service
import com.bitwarden.authenticator.data.platform.base.BaseServiceTest
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

View File

@ -27,7 +27,7 @@ output-reports:
comments:
active: true
excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**', '**ServiceImpl.kt' ]
excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**', '**ServiceImpl.kt', '**/testFixtures/**' ]
AbsentOrWrongFileLicense:
active: false
licenseTemplateFile: 'license.template'

View File

@ -1,3 +1,4 @@
android.experimental.enableTestFixturesKotlinSupport=true
android.nonTransitiveRClass=true
android.useAndroidX=true

View File

@ -1,3 +1,5 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
@ -28,8 +30,15 @@ android {
sourceCompatibility(libs.versions.jvmTarget.get())
targetCompatibility(libs.versions.jvmTarget.get())
}
kotlinOptions {
jvmTarget = libs.versions.jvmTarget.get()
@Suppress("UnstableApiUsage")
testFixtures {
enable = true
}
}
kotlin {
compilerOptions {
jvmTarget.set(JvmTarget.fromTarget(libs.versions.jvmTarget.get()))
}
}
@ -52,6 +61,18 @@ dependencies {
testImplementation(libs.mockk.mockk)
testImplementation(libs.square.okhttp.mockwebserver)
testImplementation(libs.square.turbine)
testFixturesImplementation(project(":core"))
testFixturesImplementation(platform(libs.junit.bom))
testFixturesRuntimeOnly(libs.junit.platform.launcher)
testFixturesImplementation(libs.junit.junit5)
testFixturesImplementation(libs.junit.vintage)
testFixturesImplementation(libs.kotlinx.serialization)
testFixturesImplementation(libs.square.okhttp)
testFixturesImplementation(platform(libs.square.retrofit.bom))
testFixturesImplementation(libs.square.retrofit)
testFixturesImplementation(libs.square.retrofit.kotlinx.serialization)
testFixturesImplementation(libs.square.okhttp.mockwebserver)
}
tasks {

View File

@ -1,4 +1,4 @@
package com.x8bit.bitwarden.data.platform.base
package com.bitwarden.network.base
import com.bitwarden.core.di.CoreModule
import com.bitwarden.network.core.NetworkResultCallAdapterFactory