From 1eced037a40964004d1f8b4f688b0802830fcdd5 Mon Sep 17 00:00:00 2001 From: Patrick Honkonen Date: Thu, 27 Mar 2025 17:37:45 -0400 Subject: [PATCH] [PM-19627] Move Json extension functions to core module Move JsonExtensions and related tests to `core` module. - Moved `decodeFromStringOrNull` and related testing from `app` and `authenticator` modules to `core` module. - Updated all usages of `decodeFromStringOrNull` in `app` and `authenticator` to the new location in `core`. - Deleted unused `JsonExtensionsTest` and `JsonExtensions.kt` in `app` and `authenticator`. - Updated dependencies for core. --- .../datasource/disk/AuthDiskSourceImpl.kt | 2 +- .../util/SyncResponseJsonExtensions.kt | 2 +- .../manager/Fido2CredentialManagerImpl.kt | 2 +- .../datasource/disk/ConfigDiskSourceImpl.kt | 2 +- .../disk/EnvironmentDiskSourceImpl.kt | 2 +- .../datasource/disk/SettingsDiskSourceImpl.kt | 2 +- .../network/util/ExceptionExtensions.kt | 2 +- .../data/platform/manager/PushManagerImpl.kt | 2 +- .../disk/GeneratorDiskSourceImpl.kt | 2 +- .../datasource/disk/VaultDiskSourceImpl.kt | 2 +- .../manager/Fido2CredentialManagerTest.kt | 2 +- .../datasource/disk/SettingsDiskSourceTest.kt | 2 +- .../disk/util/FakeSettingsDiskSource.kt | 2 +- .../datasource/disk/ConfigDiskSourceImpl.kt | 2 +- .../disk/FeatureFlagDiskSourceImpl.kt | 2 +- .../data/platform/util/JsonExtensions.kt | 19 ------- .../data/platform/util/JsonExtensionsTest.kt | 55 ------------------- core/build.gradle.kts | 2 + .../core/data}/util/JsonExtensions.kt | 2 +- .../core/data}/util/JsonExtensionsTest.kt | 2 +- 20 files changed, 19 insertions(+), 91 deletions(-) delete mode 100644 authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/util/JsonExtensions.kt delete mode 100644 authenticator/src/test/java/com/bitwarden/authenticator/data/platform/util/JsonExtensionsTest.kt rename {app/src/main/java/com/x8bit/bitwarden/data/platform => core/src/main/kotlin/com/bitwarden/core/data}/util/JsonExtensions.kt (95%) rename {app/src/test/java/com/x8bit/bitwarden/data/platform => core/src/test/kotlin/com/bitwarden/core/data}/util/JsonExtensionsTest.kt (96%) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceImpl.kt index f9319d2d54..30d9348ace 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceImpl.kt @@ -2,6 +2,7 @@ package com.x8bit.bitwarden.data.auth.datasource.disk import android.content.SharedPreferences import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow +import com.bitwarden.core.data.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountTokensJson import com.x8bit.bitwarden.data.auth.datasource.disk.model.NewDeviceNoticeDisplayStatus import com.x8bit.bitwarden.data.auth.datasource.disk.model.NewDeviceNoticeState @@ -10,7 +11,6 @@ import com.x8bit.bitwarden.data.auth.datasource.disk.model.PendingAuthRequestJso import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson import com.x8bit.bitwarden.data.platform.datasource.disk.BaseEncryptedDiskSource import com.x8bit.bitwarden.data.platform.datasource.disk.legacy.LegacySecureStorageMigrator -import com.x8bit.bitwarden.data.platform.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow diff --git a/app/src/main/java/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensions.kt index c124a13638..dcb4c5f83d 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensions.kt @@ -1,8 +1,8 @@ package com.x8bit.bitwarden.data.auth.repository.util +import com.bitwarden.core.data.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.auth.repository.model.Organization import com.x8bit.bitwarden.data.auth.repository.model.PolicyInformation -import com.x8bit.bitwarden.data.platform.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.vault.datasource.network.model.PolicyTypeJson import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson import kotlinx.serialization.json.Json diff --git a/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerImpl.kt index e41eac9caa..e059f94de9 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerImpl.kt @@ -1,6 +1,7 @@ package com.x8bit.bitwarden.data.autofill.fido2.manager import androidx.credentials.provider.CallingAppInfo +import com.bitwarden.core.data.util.decodeFromStringOrNull import com.bitwarden.fido.ClientData import com.bitwarden.fido.Origin import com.bitwarden.fido.UnverifiedAssetLink @@ -14,7 +15,6 @@ import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2RegisterCredentialResu import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2ValidateOriginResult import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAssertionOptions import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAttestationOptions -import com.x8bit.bitwarden.data.platform.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.platform.util.getAppOrigin import com.x8bit.bitwarden.data.platform.util.getAppSigningSignatureFingerprint import com.x8bit.bitwarden.data.platform.util.getSignatureFingerprintAsHexString diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/disk/ConfigDiskSourceImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/disk/ConfigDiskSourceImpl.kt index e04e31b90e..8a58b1c570 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/disk/ConfigDiskSourceImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/disk/ConfigDiskSourceImpl.kt @@ -2,8 +2,8 @@ package com.x8bit.bitwarden.data.platform.datasource.disk import android.content.SharedPreferences import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow +import com.bitwarden.core.data.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.platform.datasource.disk.model.ServerConfig -import com.x8bit.bitwarden.data.platform.util.decodeFromStringOrNull import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.onSubscription import kotlinx.serialization.json.Json diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/disk/EnvironmentDiskSourceImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/disk/EnvironmentDiskSourceImpl.kt index 11d0bf7897..52a7e2d391 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/disk/EnvironmentDiskSourceImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/disk/EnvironmentDiskSourceImpl.kt @@ -2,8 +2,8 @@ package com.x8bit.bitwarden.data.platform.datasource.disk import android.content.SharedPreferences import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow +import com.bitwarden.core.data.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.auth.datasource.disk.model.EnvironmentUrlDataJson -import com.x8bit.bitwarden.data.platform.util.decodeFromStringOrNull import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.onSubscription import kotlinx.serialization.json.Json diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/disk/SettingsDiskSourceImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/disk/SettingsDiskSourceImpl.kt index a1a89bae80..24bc079cad 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/disk/SettingsDiskSourceImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/disk/SettingsDiskSourceImpl.kt @@ -2,10 +2,10 @@ package com.x8bit.bitwarden.data.platform.datasource.disk import android.content.SharedPreferences import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow +import com.bitwarden.core.data.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.platform.manager.model.AppResumeScreenData import com.x8bit.bitwarden.data.platform.repository.model.UriMatchType import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeoutAction -import com.x8bit.bitwarden.data.platform.util.decodeFromStringOrNull import com.x8bit.bitwarden.ui.platform.feature.settings.appearance.model.AppLanguage import com.x8bit.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme import kotlinx.coroutines.flow.Flow diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/util/ExceptionExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/util/ExceptionExtensions.kt index e0fa602946..5ac149ec8d 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/util/ExceptionExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/util/ExceptionExtensions.kt @@ -1,7 +1,7 @@ package com.x8bit.bitwarden.data.platform.datasource.network.util +import com.bitwarden.core.data.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.platform.datasource.network.model.BitwardenError -import com.x8bit.bitwarden.data.platform.util.decodeFromStringOrNull import kotlinx.serialization.json.Json import retrofit2.HttpException diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/PushManagerImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/PushManagerImpl.kt index ab2e19a557..820a243603 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/PushManagerImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/PushManagerImpl.kt @@ -1,6 +1,7 @@ package com.x8bit.bitwarden.data.platform.manager import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow +import com.bitwarden.core.data.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource import com.x8bit.bitwarden.data.auth.repository.util.activeUserIdChangesFlow import com.x8bit.bitwarden.data.platform.datasource.disk.PushDiskSource @@ -18,7 +19,6 @@ import com.x8bit.bitwarden.data.platform.manager.model.SyncFolderDeleteData import com.x8bit.bitwarden.data.platform.manager.model.SyncFolderUpsertData import com.x8bit.bitwarden.data.platform.manager.model.SyncSendDeleteData import com.x8bit.bitwarden.data.platform.manager.model.SyncSendUpsertData -import com.x8bit.bitwarden.data.platform.util.decodeFromStringOrNull import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.asSharedFlow diff --git a/app/src/main/java/com/x8bit/bitwarden/data/tools/generator/datasource/disk/GeneratorDiskSourceImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/tools/generator/datasource/disk/GeneratorDiskSourceImpl.kt index 714293d8d0..982a20fe75 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/tools/generator/datasource/disk/GeneratorDiskSourceImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/tools/generator/datasource/disk/GeneratorDiskSourceImpl.kt @@ -1,8 +1,8 @@ package com.x8bit.bitwarden.data.tools.generator.datasource.disk import android.content.SharedPreferences +import com.bitwarden.core.data.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.platform.datasource.disk.BaseDiskSource -import com.x8bit.bitwarden.data.platform.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.tools.generator.repository.model.PasscodeGenerationOptions import com.x8bit.bitwarden.data.tools.generator.repository.model.UsernameGenerationOptions import kotlinx.serialization.json.Json diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt index be1ee352a5..6e66710256 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt @@ -1,8 +1,8 @@ package com.x8bit.bitwarden.data.vault.datasource.disk import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow +import com.bitwarden.core.data.util.decodeFromStringWithErrorCallback import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager -import com.x8bit.bitwarden.data.platform.util.decodeFromStringWithErrorCallback import com.x8bit.bitwarden.data.vault.datasource.disk.dao.CiphersDao import com.x8bit.bitwarden.data.vault.datasource.disk.dao.CollectionsDao import com.x8bit.bitwarden.data.vault.datasource.disk.dao.DomainsDao diff --git a/app/src/test/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerTest.kt index cfdbbce923..3bf9c4bbfe 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/autofill/fido2/manager/Fido2CredentialManagerTest.kt @@ -4,6 +4,7 @@ import android.content.pm.Signature import android.content.pm.SigningInfo import android.util.Base64 import com.bitwarden.core.data.util.asSuccess +import com.bitwarden.core.data.util.decodeFromStringOrNull import com.bitwarden.fido.ClientData import com.bitwarden.fido.Origin import com.bitwarden.fido.PublicKeyCredentialAuthenticatorAssertionResponse @@ -19,7 +20,6 @@ import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2ValidateOriginResult import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAssertionOptions import com.x8bit.bitwarden.data.autofill.fido2.model.PasskeyAttestationOptions import com.x8bit.bitwarden.data.autofill.fido2.model.createMockFido2CreateCredentialRequest -import com.x8bit.bitwarden.data.platform.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource import com.x8bit.bitwarden.data.vault.datasource.sdk.model.AuthenticateFido2CredentialRequest import com.x8bit.bitwarden.data.vault.datasource.sdk.model.RegisterFido2CredentialRequest diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/disk/SettingsDiskSourceTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/disk/SettingsDiskSourceTest.kt index 65c8373cb0..6e539b8398 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/disk/SettingsDiskSourceTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/disk/SettingsDiskSourceTest.kt @@ -2,13 +2,13 @@ package com.x8bit.bitwarden.data.platform.datasource.disk import androidx.core.content.edit import app.cash.turbine.test +import com.bitwarden.core.data.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.platform.base.FakeSharedPreferences import com.x8bit.bitwarden.data.platform.datasource.network.di.PlatformNetworkModule import com.x8bit.bitwarden.data.platform.manager.model.AppResumeScreenData import com.x8bit.bitwarden.data.platform.repository.model.ClearClipboardFrequency import com.x8bit.bitwarden.data.platform.repository.model.UriMatchType import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeoutAction -import com.x8bit.bitwarden.data.platform.util.decodeFromStringOrNull import com.x8bit.bitwarden.ui.platform.feature.settings.appearance.model.AppLanguage import com.x8bit.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme import kotlinx.coroutines.test.runTest diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/disk/util/FakeSettingsDiskSource.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/disk/util/FakeSettingsDiskSource.kt index db227867f5..35ee580764 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/disk/util/FakeSettingsDiskSource.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/disk/util/FakeSettingsDiskSource.kt @@ -1,11 +1,11 @@ package com.x8bit.bitwarden.data.platform.datasource.disk.util import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow +import com.bitwarden.core.data.util.decodeFromStringOrNull import com.x8bit.bitwarden.data.platform.datasource.disk.SettingsDiskSource import com.x8bit.bitwarden.data.platform.manager.model.AppResumeScreenData import com.x8bit.bitwarden.data.platform.repository.model.UriMatchType import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeoutAction -import com.x8bit.bitwarden.data.platform.util.decodeFromStringOrNull import com.x8bit.bitwarden.ui.platform.feature.settings.appearance.model.AppLanguage import com.x8bit.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme import kotlinx.coroutines.flow.Flow diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/datasource/disk/ConfigDiskSourceImpl.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/datasource/disk/ConfigDiskSourceImpl.kt index 4fda6359eb..6303ebcb79 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/datasource/disk/ConfigDiskSourceImpl.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/datasource/disk/ConfigDiskSourceImpl.kt @@ -3,8 +3,8 @@ package com.bitwarden.authenticator.data.platform.datasource.disk import android.content.SharedPreferences import com.bitwarden.authenticator.data.platform.datasource.disk.BaseDiskSource.Companion.BASE_KEY import com.bitwarden.authenticator.data.platform.datasource.disk.model.ServerConfig -import com.bitwarden.authenticator.data.platform.util.decodeFromStringOrNull import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow +import com.bitwarden.core.data.util.decodeFromStringOrNull import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.onSubscription import kotlinx.serialization.json.Json diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/datasource/disk/FeatureFlagDiskSourceImpl.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/datasource/disk/FeatureFlagDiskSourceImpl.kt index a240fd51b9..143b60f397 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/datasource/disk/FeatureFlagDiskSourceImpl.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/datasource/disk/FeatureFlagDiskSourceImpl.kt @@ -3,8 +3,8 @@ package com.bitwarden.authenticator.data.platform.datasource.disk import android.content.SharedPreferences import com.bitwarden.authenticator.data.platform.datasource.disk.BaseDiskSource.Companion.BASE_KEY import com.bitwarden.authenticator.data.platform.datasource.disk.model.FeatureFlagsConfiguration -import com.bitwarden.authenticator.data.platform.util.decodeFromStringOrNull import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow +import com.bitwarden.core.data.util.decodeFromStringOrNull import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.onSubscription import kotlinx.serialization.json.Json diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/util/JsonExtensions.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/util/JsonExtensions.kt deleted file mode 100644 index bb658485c6..0000000000 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/util/JsonExtensions.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.bitwarden.authenticator.data.platform.util - -import kotlinx.serialization.SerializationException -import kotlinx.serialization.json.Json - -/** - * Attempts to decode the given JSON [string] into the given type [T]. If there is an error in - * processing the JSON or deserializing it to an instance of [T], `null` will be returned. - */ -inline fun Json.decodeFromStringOrNull( - string: String, -): T? = - try { - decodeFromString(string = string) - } catch (e: SerializationException) { - null - } catch (e: IllegalArgumentException) { - null - } diff --git a/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/util/JsonExtensionsTest.kt b/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/util/JsonExtensionsTest.kt deleted file mode 100644 index dd580bd70d..0000000000 --- a/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/util/JsonExtensionsTest.kt +++ /dev/null @@ -1,55 +0,0 @@ -package com.bitwarden.authenticator.data.platform.util - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable -import kotlinx.serialization.json.Json -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Assertions.assertNull -import org.junit.jupiter.api.Test - -class JsonExtensionsTest { - private val json = Json - - @Test - fun `decodeFromStringOrNull for invalid JSON should return null`() { - assertNull( - json.decodeFromStringOrNull( - """ - {] - """, - ), - ) - } - - @Test - fun `decodeFromStringOrNull for valid JSON but an incorrect model should return null`() { - assertNull( - json.decodeFromStringOrNull( - """ - {} - """, - ), - ) - } - - @Test - fun `decodeFromStringOrNull for valid JSON and a correct model should parse correctly`() { - assertEquals( - TestData( - data = "test", - ), - json.decodeFromStringOrNull( - """ - { - "data": "test" - } - """, - ), - ) - } -} - -@Serializable -private data class TestData( - @SerialName("data") val data: String, -) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 7f6b81dde4..2a0e6a7873 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -1,6 +1,7 @@ plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) } android { @@ -36,6 +37,7 @@ android { dependencies { implementation(libs.kotlinx.coroutines.android) + implementation(libs.kotlinx.serialization) testImplementation(platform(libs.junit.bom)) testRuntimeOnly(libs.junit.platform.launcher) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/util/JsonExtensions.kt b/core/src/main/kotlin/com/bitwarden/core/data/util/JsonExtensions.kt similarity index 95% rename from app/src/main/java/com/x8bit/bitwarden/data/platform/util/JsonExtensions.kt rename to core/src/main/kotlin/com/bitwarden/core/data/util/JsonExtensions.kt index 2a63f27dc3..26045618a2 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/util/JsonExtensions.kt +++ b/core/src/main/kotlin/com/bitwarden/core/data/util/JsonExtensions.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.data.platform.util +package com.bitwarden.core.data.util import kotlinx.serialization.SerializationException import kotlinx.serialization.json.Json diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/util/JsonExtensionsTest.kt b/core/src/test/kotlin/com/bitwarden/core/data/util/JsonExtensionsTest.kt similarity index 96% rename from app/src/test/java/com/x8bit/bitwarden/data/platform/util/JsonExtensionsTest.kt rename to core/src/test/kotlin/com/bitwarden/core/data/util/JsonExtensionsTest.kt index d8cca88c55..9ebde4f9de 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/util/JsonExtensionsTest.kt +++ b/core/src/test/kotlin/com/bitwarden/core/data/util/JsonExtensionsTest.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.data.platform.util +package com.bitwarden.core.data.util import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable