From c6b4c490ca61d7dff184636e12d4b92ae6f33f9e Mon Sep 17 00:00:00 2001 From: David Perez Date: Fri, 20 Feb 2026 13:02:25 -0600 Subject: [PATCH] Replace ZonedDateTime with Instant (#6554) --- .../auth/datasource/disk/model/AccountJson.kt | 4 +- .../auth/manager/AuthRequestManagerImpl.kt | 2 - .../data/auth/manager/model/AuthRequest.kt | 6 +- .../datasource/disk/PushDiskSource.kt | 6 +- .../datasource/disk/PushDiskSourceImpl.kt | 14 +-- .../disk/database/PlatformDatabase.kt | 4 +- .../datasource/disk/di/PlatformDiskModule.kt | 4 +- .../disk/entity/OrganizationEventEntity.kt | 4 +- .../data/platform/manager/PushManagerImpl.kt | 7 +- .../event/OrganizationEventManagerImpl.kt | 3 +- .../manager/model/NotificationPayload.kt | 10 +- .../manager/model/SyncCipherUpsertData.kt | 4 +- .../manager/model/SyncFolderUpsertData.kt | 4 +- .../manager/model/SyncSendUpsertData.kt | 4 +- .../disk/convertor/InstantTypeConverter.kt | 27 +++++ .../convertor/ZonedDateTimeTypeConverter.kt | 31 ------ .../datasource/disk/database/VaultDatabase.kt | 4 +- .../datasource/disk/di/VaultDiskModule.kt | 4 +- .../datasource/disk/entity/FolderEntity.kt | 4 +- .../data/vault/manager/CipherManagerImpl.kt | 2 +- .../data/vault/manager/FolderManagerImpl.kt | 2 +- .../data/vault/manager/SendManagerImpl.kt | 2 +- .../util/VaultSdkCipherExtensions.kt | 36 +++---- .../util/VaultSdkFolderExtensions.kt | 2 +- .../repository/util/VaultSdkSendExtensions.kt | 12 +-- .../send/addedit/AddEditSendViewModel.kt | 15 +-- .../AddEditSendCustomDateChooser.kt | 12 +-- .../AddEditSendDeletionDateChooser.kt | 6 +- .../addedit/handlers/AddEditSendHandlers.kt | 4 +- .../util/AddEditSendStateExtensions.kt | 4 +- .../send/addedit/util/SendViewExtensions.kt | 8 +- .../datasource/disk/AuthDiskSourceTest.kt | 3 +- .../auth/manager/AuthRequestManagerTest.kt | 33 +++---- .../data/auth/manager/AuthTokenManagerTest.kt | 4 +- .../data/auth/manager/KdfManagerTest.kt | 6 +- .../auth/manager/TrustedDeviceManagerTests.kt | 10 +- .../auth/manager/UserLogoutManagerTest.kt | 6 +- .../data/auth/manager/UserStateManagerTest.kt | 6 +- .../util/TrustDeviceResponseExtensionsTest.kt | 6 +- .../auth/repository/AuthRepositoryTest.kt | 5 +- .../util/AuthDiskSourceExtensionsTest.kt | 4 +- .../util/UserStateJsonExtensionsTest.kt | 43 ++++---- .../datasource/disk/EventDiskSourceTest.kt | 17 ++-- .../datasource/disk/PushDiskSourceTest.kt | 20 ++-- .../manager/FirstTimeActionManagerTest.kt | 4 +- .../platform/manager/PolicyManagerTest.kt | 12 +-- .../data/platform/manager/PushManagerTest.kt | 59 +++++------ .../event/OrganizationEventManagerTest.kt | 7 +- .../AuthenticatorBridgeRepositoryTest.kt | 6 +- .../repository/SettingsRepositoryTest.kt | 3 +- .../repository/GeneratorRepositoryTest.kt | 3 +- .../datasource/disk/VaultDiskSourceTest.kt | 4 +- ...terTest.kt => InstantTypeConverterTest.kt} | 18 ++-- .../sdk/model/CipherListViewUtil.kt | 3 +- .../datasource/sdk/model/CipherViewUtil.kt | 3 +- .../datasource/sdk/model/FolderViewUtil.kt | 6 +- .../datasource/sdk/model/SendViewUtil.kt | 7 +- .../sdk/model/VaultSdkCipherUtil.kt | 3 +- .../model/VaultSdkEncryptionContextUtil.kt | 3 +- .../sdk/model/VaultSdkFolderUtil.kt | 6 +- .../datasource/sdk/model/VaultSdkSendUtil.kt | 8 +- .../data/vault/manager/CipherManagerTest.kt | 35 ++++--- .../data/vault/manager/FolderManagerTest.kt | 26 +++-- .../data/vault/manager/SendManagerTest.kt | 27 +++-- .../vault/manager/VaultLockManagerTest.kt | 3 +- .../manager/VaultMigrationManagerTest.kt | 3 +- .../vault/manager/VaultSyncManagerTest.kt | 3 +- .../vault/repository/VaultRepositoryTest.kt | 3 +- .../vault/repository/model/AccountJsonUtil.kt | 4 +- .../util/VaultSdkCipherExtensionsTest.kt | 7 +- .../LoginWithDeviceViewModelTest.kt | 4 +- .../LoginApprovalViewModelTest.kt | 3 +- .../PendingRequestsViewModelTest.kt | 40 ++++---- .../send/addedit/AddEditSendScreenTest.kt | 4 +- .../send/addedit/AddEditSendViewModelTest.kt | 12 +-- .../util/AddEditSendStateExtensionsTest.kt | 13 ++- .../addedit/util/SendViewExtensionsTest.kt | 20 +--- ...TimeSerializer.kt => InstantSerializer.kt} | 23 +++-- .../com/bitwarden/core/di/CoreModule.kt | 4 +- .../bitwarden/core/util/InstantExtensions.kt | 16 +++ ...{ZonedDateTimeUtils.kt => InstantUtils.kt} | 15 ++- .../core/util/ZonedDateTimeExtensions.kt | 16 --- .../data/serializer/InstantSerializerTest.kt | 70 +++++++++++++ .../serializer/ZonedDateTimeSerializerTest.kt | 98 ------------------- ...nsionsTest.kt => InstantExtensionsTest.kt} | 11 +-- .../bitwarden/core/util/InstantUtilsTest.kt | 25 +++++ .../core/util/ZonedDateTimeUtilsTest.kt | 25 ----- .../network/BitwardenServiceClientImpl.kt | 4 +- .../network/model/AuthRequestsResponseJson.kt | 6 +- .../network/model/CipherJsonRequest.kt | 6 +- .../network/model/CipherMiniResponseJson.kt | 10 +- .../network/model/CipherWithIdJsonRequest.kt | 4 +- .../network/model/OrganizationEventJson.kt | 4 +- .../network/model/SendJsonRequest.kt | 6 +- .../network/model/SyncResponseJson.kt | 32 +++--- .../model/TrustedDeviceKeysResponseJson.kt | 4 +- .../network/service/AccountsServiceImpl.kt | 2 +- .../network/service/CiphersServiceImpl.kt | 4 +- .../network/service/SendsServiceImpl.kt | 4 +- .../service/AuthRequestsServiceTest.kt | 4 +- .../network/service/DevicesServiceTest.kt | 4 +- .../network/service/EventServiceTest.kt | 3 +- .../network/service/FoldersServiceTest.kt | 4 +- .../service/NewAuthRequestServiceTest.kt | 4 +- .../network/model/CipherJsonRequestUtil.kt | 6 +- .../model/CipherMiniResponseJsonUtil.kt | 6 +- .../network/model/SendJsonRequestUtil.kt | 6 +- .../network/model/SyncResponseCipherUtil.kt | 20 ++-- .../network/model/SyncResponseFolderUtil.kt | 4 +- .../network/model/SyncResponsePolicyUtil.kt | 4 +- .../network/model/SyncResponseProfileUtil.kt | 8 +- .../network/model/SyncResponseSendUtil.kt | 8 +- 112 files changed, 566 insertions(+), 680 deletions(-) create mode 100644 app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/InstantTypeConverter.kt delete mode 100644 app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/ZonedDateTimeTypeConverter.kt rename app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/{ZonedDateTimeTypeConverterTest.kt => InstantTypeConverterTest.kt} (64%) rename core/src/main/kotlin/com/bitwarden/core/data/serializer/{ZonedDateTimeSerializer.kt => InstantSerializer.kt} (52%) create mode 100644 core/src/main/kotlin/com/bitwarden/core/util/InstantExtensions.kt rename core/src/main/kotlin/com/bitwarden/core/util/{ZonedDateTimeUtils.kt => InstantUtils.kt} (65%) delete mode 100644 core/src/main/kotlin/com/bitwarden/core/util/ZonedDateTimeExtensions.kt create mode 100644 core/src/test/kotlin/com/bitwarden/core/data/serializer/InstantSerializerTest.kt rename core/src/test/kotlin/com/bitwarden/core/util/{ZonedDateTimeExtensionsTest.kt => InstantExtensionsTest.kt} (75%) create mode 100644 core/src/test/kotlin/com/bitwarden/core/util/InstantUtilsTest.kt delete mode 100644 core/src/test/kotlin/com/bitwarden/core/util/ZonedDateTimeUtilsTest.kt diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/model/AccountJson.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/model/AccountJson.kt index 17292c9a48..acc18213aa 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/model/AccountJson.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/model/AccountJson.kt @@ -8,7 +8,7 @@ import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.json.JsonNames -import java.time.ZonedDateTime +import java.time.Instant /** * Represents the current account information for a given user. @@ -103,7 +103,7 @@ data class AccountJson( @SerialName("creationDate") @Contextual - val creationDate: ZonedDateTime?, + val creationDate: Instant?, ) /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt index 92971322c5..2a6ccd31b0 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt @@ -128,7 +128,6 @@ class AuthRequestManagerImpl( updateAuthRequest .creationDate - .toInstant() .plusMillis(PASSWORDLESS_NOTIFICATION_TIMEOUT_MILLIS) .isBefore(clock.instant()) -> { clearPendingAuthRequest() @@ -199,7 +198,6 @@ class AuthRequestManagerImpl( updateAuthRequest .creationDate - .toInstant() .plusMillis(PASSWORDLESS_NOTIFICATION_TIMEOUT_MILLIS) .isBefore(clock.instant()) -> { isComplete = true diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/model/AuthRequest.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/model/AuthRequest.kt index 47be395bb3..f0ef98f9cc 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/model/AuthRequest.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/manager/model/AuthRequest.kt @@ -2,7 +2,7 @@ package com.x8bit.bitwarden.data.auth.manager.model import android.os.Parcelable import kotlinx.parcelize.Parcelize -import java.time.ZonedDateTime +import java.time.Instant /** * Represents a Login Approval request. @@ -27,8 +27,8 @@ data class AuthRequest( val ipAddress: String, val key: String?, val masterPasswordHash: String?, - val creationDate: ZonedDateTime, - val responseDate: ZonedDateTime?, + val creationDate: Instant, + val responseDate: Instant?, val requestApproved: Boolean, val originUrl: String, val fingerprint: String, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/PushDiskSource.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/PushDiskSource.kt index 0c28366aff..e20451f226 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/PushDiskSource.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/PushDiskSource.kt @@ -1,6 +1,6 @@ package com.x8bit.bitwarden.data.platform.datasource.disk -import java.time.ZonedDateTime +import java.time.Instant /** * Primary access point for push notification information. @@ -25,7 +25,7 @@ interface PushDiskSource { /** * Retrieves the last time a push token was registered for a user. */ - fun getLastPushTokenRegistrationDate(userId: String): ZonedDateTime? + fun getLastPushTokenRegistrationDate(userId: String): Instant? /** * Sets the current token for a user. @@ -35,5 +35,5 @@ interface PushDiskSource { /** * Sets the last push token registration date for a user. */ - fun storeLastPushTokenRegistrationDate(userId: String, registrationDate: ZonedDateTime?) + fun storeLastPushTokenRegistrationDate(userId: String, registrationDate: Instant?) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/PushDiskSourceImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/PushDiskSourceImpl.kt index 4785cb99b0..7e72ff1e70 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/PushDiskSourceImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/PushDiskSourceImpl.kt @@ -1,10 +1,10 @@ package com.x8bit.bitwarden.data.platform.datasource.disk import android.content.SharedPreferences -import com.bitwarden.core.util.getBinaryLongFromZoneDateTime -import com.bitwarden.core.util.getZoneDateTimeFromBinaryLong +import com.bitwarden.core.util.getBinaryLongFromInstant +import com.bitwarden.core.util.getInstantFromBinaryLong import com.bitwarden.data.datasource.disk.BaseDiskSource -import java.time.ZonedDateTime +import java.time.Instant private const val CURRENT_PUSH_TOKEN_KEY = "pushCurrentToken" private const val LAST_REGISTRATION_DATE_KEY = "pushLastRegistrationDate" @@ -35,9 +35,9 @@ class PushDiskSourceImpl( return getString(CURRENT_PUSH_TOKEN_KEY.appendIdentifier(userId)) } - override fun getLastPushTokenRegistrationDate(userId: String): ZonedDateTime? { + override fun getLastPushTokenRegistrationDate(userId: String): Instant? { return getLong(LAST_REGISTRATION_DATE_KEY.appendIdentifier(userId)) - ?.let { getZoneDateTimeFromBinaryLong(it) } + ?.let { getInstantFromBinaryLong(it) } } override fun storeCurrentPushToken(userId: String, pushToken: String?) { @@ -49,11 +49,11 @@ class PushDiskSourceImpl( override fun storeLastPushTokenRegistrationDate( userId: String, - registrationDate: ZonedDateTime?, + registrationDate: Instant?, ) { putLong( key = LAST_REGISTRATION_DATE_KEY.appendIdentifier(userId), - value = registrationDate?.let { getBinaryLongFromZoneDateTime(registrationDate) }, + value = registrationDate?.let { getBinaryLongFromInstant(registrationDate) }, ) } } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/database/PlatformDatabase.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/database/PlatformDatabase.kt index 810de0bb2c..1c739c37ca 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/database/PlatformDatabase.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/database/PlatformDatabase.kt @@ -6,7 +6,7 @@ import androidx.room.RoomDatabase import androidx.room.TypeConverters import com.x8bit.bitwarden.data.platform.datasource.disk.dao.OrganizationEventDao import com.x8bit.bitwarden.data.platform.datasource.disk.entity.OrganizationEventEntity -import com.x8bit.bitwarden.data.vault.datasource.disk.convertor.ZonedDateTimeTypeConverter +import com.x8bit.bitwarden.data.vault.datasource.disk.convertor.InstantTypeConverter /** * Room database for storing any persisted data for platform data. @@ -21,7 +21,7 @@ import com.x8bit.bitwarden.data.vault.datasource.disk.convertor.ZonedDateTimeTyp AutoMigration(from = 1, to = 2), ], ) -@TypeConverters(ZonedDateTimeTypeConverter::class) +@TypeConverters(InstantTypeConverter::class) abstract class PlatformDatabase : RoomDatabase() { /** * Provides the DAO for accessing organization event data. diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/di/PlatformDiskModule.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/di/PlatformDiskModule.kt index 4d97290cf4..1fbabc3a6b 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/di/PlatformDiskModule.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/di/PlatformDiskModule.kt @@ -31,7 +31,7 @@ import com.x8bit.bitwarden.data.platform.datasource.disk.legacy.LegacySecureStor import com.x8bit.bitwarden.data.platform.manager.DatabaseSchemeManager import com.x8bit.bitwarden.data.platform.repository.SettingsRepository import com.x8bit.bitwarden.data.vault.datasource.disk.callback.DatabaseSchemeCallback -import com.x8bit.bitwarden.data.vault.datasource.disk.convertor.ZonedDateTimeTypeConverter +import com.x8bit.bitwarden.data.vault.datasource.disk.convertor.InstantTypeConverter import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -71,7 +71,7 @@ object PlatformDiskModule { name = "platform_database", ) .fallbackToDestructiveMigration(dropAllTables = false) - .addTypeConverter(ZonedDateTimeTypeConverter()) + .addTypeConverter(InstantTypeConverter()) .addCallback(DatabaseSchemeCallback(databaseSchemeManager = databaseSchemeManager)) .build() diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/entity/OrganizationEventEntity.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/entity/OrganizationEventEntity.kt index 16d09cd4ca..21b6475feb 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/entity/OrganizationEventEntity.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/entity/OrganizationEventEntity.kt @@ -3,7 +3,7 @@ package com.x8bit.bitwarden.data.platform.datasource.disk.entity import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey -import java.time.ZonedDateTime +import java.time.Instant /** * Entity representing an organization event in the database. @@ -24,7 +24,7 @@ data class OrganizationEventEntity( val cipherId: String?, @ColumnInfo(name = "date") - val date: ZonedDateTime, + val date: Instant, @ColumnInfo(name = "organization_id") val organizationId: String?, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/PushManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/PushManagerImpl.kt index 5dfdd0f0cf..827f26e517 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/PushManagerImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/PushManagerImpl.kt @@ -31,8 +31,6 @@ import kotlinx.coroutines.launch import kotlinx.serialization.json.Json import timber.log.Timber import java.time.Clock -import java.time.ZoneOffset -import java.time.ZonedDateTime import javax.inject.Inject import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract @@ -340,8 +338,7 @@ class PushManagerImpl @Inject constructor( private suspend fun registerPushTokenIfNecessaryInternal(userId: String, token: String) { val currentToken = pushDiskSource.getCurrentPushToken(userId) if (token == currentToken) { - val lastRegistration = - pushDiskSource.getLastPushTokenRegistrationDate(userId)?.toInstant() ?: return + val lastRegistration = pushDiskSource.getLastPushTokenRegistrationDate(userId) ?: return val updateTime = clock.instant().minus(PUSH_TOKEN_UPDATE_DELAY.toJavaDuration()) if (updateTime.isBefore(lastRegistration)) return } @@ -354,7 +351,7 @@ class PushManagerImpl @Inject constructor( onSuccess = { pushDiskSource.storeLastPushTokenRegistrationDate( userId = userId, - registrationDate = ZonedDateTime.ofInstant(clock.instant(), ZoneOffset.UTC), + registrationDate = clock.instant(), ) pushDiskSource.storeCurrentPushToken( userId = userId, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/event/OrganizationEventManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/event/OrganizationEventManagerImpl.kt index 314a669710..fc398e7550 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/event/OrganizationEventManagerImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/event/OrganizationEventManagerImpl.kt @@ -18,7 +18,6 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import java.time.Clock -import java.time.ZonedDateTime /** * The amount of time to delay before attempting the first upload events after the app is @@ -78,7 +77,7 @@ class OrganizationEventManagerImpl( event = OrganizationEventJson( type = event.type, cipherId = event.cipherId, - date = ZonedDateTime.now(clock), + date = clock.instant(), organizationId = event.organizationId, ), ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/NotificationPayload.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/NotificationPayload.kt index 9771bcccb7..a362f16c77 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/NotificationPayload.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/NotificationPayload.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.Contextual import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable import kotlinx.serialization.json.JsonNames -import java.time.ZonedDateTime +import java.time.Instant /** * The payload of a push notification. @@ -31,7 +31,7 @@ sealed class NotificationPayload { @JsonNames("OrganizationId", "organizationId") val organizationId: String?, @JsonNames("CollectionIds", "collectionIds") val collectionIds: List?, @Contextual - @JsonNames("RevisionDate", "revisionDate") val revisionDate: ZonedDateTime?, + @JsonNames("RevisionDate", "revisionDate") val revisionDate: Instant?, ) : NotificationPayload() /** @@ -42,7 +42,7 @@ sealed class NotificationPayload { @JsonNames("Id", "id") val folderId: String?, @JsonNames("UserId", "userId") override val userId: String?, @Contextual - @JsonNames("RevisionDate", "revisionDate") val revisionDate: ZonedDateTime?, + @JsonNames("RevisionDate", "revisionDate") val revisionDate: Instant?, ) : NotificationPayload() /** @@ -55,7 +55,7 @@ sealed class NotificationPayload { @Contextual @JsonNames("Date", "date") - val date: ZonedDateTime?, + val date: Instant?, @JsonNames("Reason", "reason") val pushNotificationLogOutReason: PushNotificationLogOutReason?, @@ -69,7 +69,7 @@ sealed class NotificationPayload { @JsonNames("Id", "id") val sendId: String?, @JsonNames("UserId", "userId") override val userId: String?, @Contextual - @JsonNames("RevisionDate", "revisionDate") val revisionDate: ZonedDateTime?, + @JsonNames("RevisionDate", "revisionDate") val revisionDate: Instant?, ) : NotificationPayload() /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SyncCipherUpsertData.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SyncCipherUpsertData.kt index 3f322b3bdb..948c59bbc6 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SyncCipherUpsertData.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SyncCipherUpsertData.kt @@ -1,6 +1,6 @@ package com.x8bit.bitwarden.data.platform.manager.model -import java.time.ZonedDateTime +import java.time.Instant /** * Required data for sync cipher upsert operations. @@ -14,7 +14,7 @@ import java.time.ZonedDateTime data class SyncCipherUpsertData( val userId: String, val cipherId: String, - val revisionDate: ZonedDateTime, + val revisionDate: Instant, val organizationId: String?, val collectionIds: List?, val isUpdate: Boolean, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SyncFolderUpsertData.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SyncFolderUpsertData.kt index 7d07117575..5dfaab6865 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SyncFolderUpsertData.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SyncFolderUpsertData.kt @@ -1,6 +1,6 @@ package com.x8bit.bitwarden.data.platform.manager.model -import java.time.ZonedDateTime +import java.time.Instant /** * Required data for sync folder upsert operations. @@ -14,6 +14,6 @@ import java.time.ZonedDateTime data class SyncFolderUpsertData( val userId: String, val folderId: String, - val revisionDate: ZonedDateTime, + val revisionDate: Instant, val isUpdate: Boolean, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SyncSendUpsertData.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SyncSendUpsertData.kt index 10397bcecf..1428827ff7 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SyncSendUpsertData.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SyncSendUpsertData.kt @@ -1,6 +1,6 @@ package com.x8bit.bitwarden.data.platform.manager.model -import java.time.ZonedDateTime +import java.time.Instant /** * Required data for sync send upsert operations. @@ -14,6 +14,6 @@ import java.time.ZonedDateTime data class SyncSendUpsertData( val userId: String, val sendId: String, - val revisionDate: ZonedDateTime, + val revisionDate: Instant, val isUpdate: Boolean, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/InstantTypeConverter.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/InstantTypeConverter.kt new file mode 100644 index 0000000000..1baaae9094 --- /dev/null +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/InstantTypeConverter.kt @@ -0,0 +1,27 @@ +package com.x8bit.bitwarden.data.vault.datasource.disk.convertor + +import androidx.room.ProvidedTypeConverter +import androidx.room.TypeConverter +import java.time.Instant + +/** + * A [TypeConverter] to convert an [Instant] to and from a [Long]. + */ +@ProvidedTypeConverter +class InstantTypeConverter { + /** + * A [TypeConverter] to convert a [Long] to an [Instant]. + */ + @TypeConverter + fun fromTimestamp( + value: Long?, + ): Instant? = value?.let { Instant.ofEpochSecond(it) } + + /** + * A [TypeConverter] to convert an [Instant] to a [Long]. + */ + @TypeConverter + fun toTimestamp( + instant: Instant?, + ): Long? = instant?.epochSecond +} diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/ZonedDateTimeTypeConverter.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/ZonedDateTimeTypeConverter.kt deleted file mode 100644 index 149c738b73..0000000000 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/ZonedDateTimeTypeConverter.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.x8bit.bitwarden.data.vault.datasource.disk.convertor - -import androidx.room.ProvidedTypeConverter -import androidx.room.TypeConverter -import java.time.Instant -import java.time.ZoneOffset -import java.time.ZonedDateTime - -/** - * A [TypeConverter] to convert a [ZonedDateTime] to and from a [Long]. - */ -@ProvidedTypeConverter -class ZonedDateTimeTypeConverter { - /** - * A [TypeConverter] to convert a [Long] to a [ZonedDateTime]. - */ - @TypeConverter - fun fromTimestamp( - value: Long?, - ): ZonedDateTime? = value?.let { - ZonedDateTime.ofInstant(Instant.ofEpochSecond(it), ZoneOffset.UTC) - } - - /** - * A [TypeConverter] to convert a [ZonedDateTime] to a [Long]. - */ - @TypeConverter - fun toTimestamp( - localDateTime: ZonedDateTime?, - ): Long? = localDateTime?.toEpochSecond() -} diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/database/VaultDatabase.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/database/VaultDatabase.kt index edfd719001..e471bdead0 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/database/VaultDatabase.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/database/VaultDatabase.kt @@ -4,7 +4,7 @@ import androidx.room.AutoMigration import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.TypeConverters -import com.x8bit.bitwarden.data.vault.datasource.disk.convertor.ZonedDateTimeTypeConverter +import com.x8bit.bitwarden.data.vault.datasource.disk.convertor.InstantTypeConverter 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 @@ -34,7 +34,7 @@ import com.x8bit.bitwarden.data.vault.datasource.disk.entity.SendEntity AutoMigration(from = 7, to = 8), ], ) -@TypeConverters(ZonedDateTimeTypeConverter::class) +@TypeConverters(InstantTypeConverter::class) abstract class VaultDatabase : RoomDatabase() { /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/di/VaultDiskModule.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/di/VaultDiskModule.kt index e0457bbf22..1dcb9bdea8 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/di/VaultDiskModule.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/di/VaultDiskModule.kt @@ -7,7 +7,7 @@ import com.x8bit.bitwarden.data.platform.manager.DatabaseSchemeManager import com.x8bit.bitwarden.data.vault.datasource.disk.VaultDiskSource import com.x8bit.bitwarden.data.vault.datasource.disk.VaultDiskSourceImpl import com.x8bit.bitwarden.data.vault.datasource.disk.callback.DatabaseSchemeCallback -import com.x8bit.bitwarden.data.vault.datasource.disk.convertor.ZonedDateTimeTypeConverter +import com.x8bit.bitwarden.data.vault.datasource.disk.convertor.InstantTypeConverter 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 @@ -42,7 +42,7 @@ class VaultDiskModule { ) .fallbackToDestructiveMigration(dropAllTables = false) .addCallback(DatabaseSchemeCallback(databaseSchemeManager = databaseSchemeManager)) - .addTypeConverter(ZonedDateTimeTypeConverter()) + .addTypeConverter(InstantTypeConverter()) .build() @Provides diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/entity/FolderEntity.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/entity/FolderEntity.kt index 4fe5979322..a4bf8377a2 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/entity/FolderEntity.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/entity/FolderEntity.kt @@ -3,7 +3,7 @@ package com.x8bit.bitwarden.data.vault.datasource.disk.entity import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey -import java.time.ZonedDateTime +import java.time.Instant /** * Entity representing a folder in the database. @@ -21,5 +21,5 @@ data class FolderEntity( val name: String?, @ColumnInfo(name = "revision_date") - val revisionDate: ZonedDateTime, + val revisionDate: Instant, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/CipherManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/CipherManagerImpl.kt index 5613301712..5c9e099597 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/CipherManagerImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/CipherManagerImpl.kt @@ -778,7 +778,7 @@ class CipherManagerImpl( // Return if local cipher is more recent val localCipher = vaultDiskSource.getCipher(userId = userId, cipherId = cipherId) if (localCipher != null && - localCipher.revisionDate.toEpochSecond() > revisionDate.toEpochSecond() + localCipher.revisionDate.epochSecond > revisionDate.epochSecond ) { return } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/FolderManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/FolderManagerImpl.kt index f54facfcca..ce593dd4e8 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/FolderManagerImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/FolderManagerImpl.kt @@ -162,7 +162,7 @@ class FolderManagerImpl( val isValidCreate = !isUpdate && localFolder == null val isValidUpdate = isUpdate && localFolder != null && - localFolder.revisionDate.toEpochSecond() < revisionDate.toEpochSecond() + localFolder.revisionDate.epochSecond < revisionDate.epochSecond if (!isValidCreate && !isValidUpdate) return if (activeUserId != userId) { diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/SendManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/SendManagerImpl.kt index 97d06b23b9..df20332cfc 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/SendManagerImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/SendManagerImpl.kt @@ -279,7 +279,7 @@ class SendManagerImpl( val isValidCreate = !isUpdate && localSend == null val isValidUpdate = isUpdate && localSend != null && - localSend.revisionDate.toEpochSecond() < revisionDate.toEpochSecond() + localSend.revisionDate.epochSecond < revisionDate.epochSecond if (!isValidCreate && !isValidUpdate) return if (activeUserId != userId) { // We cannot update right now since the accounts do not match, so we will diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt index 23269e7c68..e787dcf5ce 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt @@ -36,8 +36,6 @@ import com.bitwarden.vault.SecureNote import com.bitwarden.vault.SecureNoteType import com.bitwarden.vault.SshKey import com.bitwarden.vault.UriMatchType -import java.time.ZoneOffset -import java.time.ZonedDateTime /** * Converts a Bitwarden SDK [Cipher] object to a corresponding @@ -55,7 +53,7 @@ fun Cipher.toEncryptedNetworkCipher( ?.associate { requireNotNull(it.id) to it.toNetworkAttachmentRequest() }, reprompt = reprompt.toNetworkRepromptType(), passwordHistory = passwordHistory?.toEncryptedNetworkPasswordHistoryList(), - lastKnownRevisionDate = ZonedDateTime.ofInstant(revisionDate, ZoneOffset.UTC), + lastKnownRevisionDate = revisionDate, type = type.toNetworkCipherType(), login = login?.toEncryptedNetworkLogin(), secureNote = secureNote?.toEncryptedNetworkSecureNote(), @@ -68,7 +66,7 @@ fun Cipher.toEncryptedNetworkCipher( card = card?.toEncryptedNetworkCard(), key = key, sshKey = sshKey?.toEncryptedNetworkSshKey(), - archivedDate = archivedDate?.let { ZonedDateTime.ofInstant(it, ZoneOffset.UTC) }, + archivedDate = archivedDate, encryptedFor = encryptedFor, ) @@ -100,15 +98,15 @@ fun Cipher.toEncryptedNetworkCipherResponse( sshKey = sshKey?.toEncryptedNetworkSshKey(), shouldOrganizationUseTotp = organizationUseTotp, shouldEdit = edit, - revisionDate = ZonedDateTime.ofInstant(revisionDate, ZoneOffset.UTC), - creationDate = ZonedDateTime.ofInstant(creationDate, ZoneOffset.UTC), - deletedDate = deletedDate?.let { ZonedDateTime.ofInstant(it, ZoneOffset.UTC) }, + revisionDate = revisionDate, + creationDate = creationDate, + deletedDate = deletedDate, collectionIds = collectionIds, id = id.orEmpty(), shouldViewPassword = viewPassword, key = key, encryptedFor = encryptedFor, - archivedDate = archivedDate?.let { ZonedDateTime.ofInstant(it, ZoneOffset.UTC) }, + archivedDate = archivedDate, ) /** @@ -297,9 +295,7 @@ private fun Login.toEncryptedNetworkLogin(): SyncResponseJson.Cipher.Login = uris = uris?.toEncryptedNetworkUriList(), totp = totp, password = password, - passwordRevisionDate = passwordRevisionDate?.let { - ZonedDateTime.ofInstant(it, ZoneOffset.UTC) - }, + passwordRevisionDate = passwordRevisionDate, shouldAutofillOnPageLoad = autofillOnPageLoad, // uri needs to be null to avoid duplicating the first url entry for a login item. uri = null, @@ -323,7 +319,7 @@ private fun Fido2Credential.toNetworkFido2Credential() = SyncResponseJson.Cipher userDisplayName = userDisplayName, counter = counter, discoverable = discoverable, - creationDate = ZonedDateTime.ofInstant(creationDate, ZoneOffset.UTC), + creationDate = creationDate, ) /** @@ -342,7 +338,7 @@ private fun List.toEncryptedNetworkPasswordHistoryList(): List< private fun PasswordHistory.toEncryptedNetworkPasswordHistory(): SyncResponseJson.Cipher.PasswordHistory = SyncResponseJson.Cipher.PasswordHistory( password = password, - lastUsedDate = ZonedDateTime.ofInstant(lastUsedDate, ZoneOffset.UTC), + lastUsedDate = lastUsedDate, ) /** @@ -415,10 +411,10 @@ fun SyncResponseJson.Cipher.toEncryptedSdkCipher(): Cipher = fields = fields?.toSdkFieldList(), passwordHistory = passwordHistory?.toSdkPasswordHistoryList(), permissions = permissions?.toSdkPermissions(), - creationDate = creationDate.toInstant(), - deletedDate = deletedDate?.toInstant(), - revisionDate = revisionDate.toInstant(), - archivedDate = archivedDate?.toInstant(), + creationDate = creationDate, + deletedDate = deletedDate, + revisionDate = revisionDate, + archivedDate = archivedDate, data = null, ) @@ -429,7 +425,7 @@ fun SyncResponseJson.Cipher.Login.toSdkLogin(): Login = Login( username = username, password = password, - passwordRevisionDate = passwordRevisionDate?.toInstant(), + passwordRevisionDate = passwordRevisionDate, uris = uris?.toSdkLoginUriList(), totp = totp, autofillOnPageLoad = shouldAutofillOnPageLoad, @@ -452,7 +448,7 @@ private fun SyncResponseJson.Cipher.Fido2Credential.toSdkFido2Credential() = Fid userDisplayName = userDisplayName, counter = counter, discoverable = discoverable, - creationDate = creationDate.toInstant(), + creationDate = creationDate, ) /** @@ -588,7 +584,7 @@ fun List.toSdkPasswordHistoryList(): Li fun SyncResponseJson.Cipher.PasswordHistory.toSdkPasswordHistory(): PasswordHistory = PasswordHistory( password = password, - lastUsedDate = lastUsedDate.toInstant(), + lastUsedDate = lastUsedDate, ) /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkFolderExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkFolderExtensions.kt index 7ee1efee90..19da86dfef 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkFolderExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkFolderExtensions.kt @@ -21,7 +21,7 @@ fun SyncResponseJson.Folder.toEncryptedSdkFolder(): Folder = Folder( id = id, name = name.orEmpty(), - revisionDate = revisionDate.toInstant(), + revisionDate = revisionDate, ) /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkSendExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkSendExtensions.kt index 1a8c70547f..c16593f949 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkSendExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkSendExtensions.kt @@ -13,8 +13,6 @@ import com.bitwarden.send.SendFile import com.bitwarden.send.SendText import com.bitwarden.send.SendType import com.bitwarden.send.SendView -import java.time.ZoneOffset -import java.time.ZonedDateTime /** * Converts a Bitwarden SDK [Send] object to a corresponding [SyncResponseJson.Send] object. @@ -26,8 +24,8 @@ fun Send.toEncryptedNetworkSend(fileLength: Long? = null): SendJsonRequest = notes = notes, key = key, maxAccessCount = maxAccessCount?.toInt(), - expirationDate = expirationDate?.let { ZonedDateTime.ofInstant(it, ZoneOffset.UTC) }, - deletionDate = ZonedDateTime.ofInstant(deletionDate, ZoneOffset.UTC), + expirationDate = expirationDate, + deletionDate = deletionDate, fileLength = fileLength, file = file?.toNetworkSendFile(), text = text?.toNetworkSendText(), @@ -95,9 +93,9 @@ fun SyncResponseJson.Send.toEncryptedSdkSend(): Send = accessCount = accessCount.toUInt(), disabled = isDisabled, hideEmail = shouldHideEmail, - revisionDate = revisionDate.toInstant(), - deletionDate = deletionDate.toInstant(), - expirationDate = expirationDate?.toInstant(), + revisionDate = revisionDate, + deletionDate = deletionDate, + expirationDate = expirationDate, emails = emails, authType = authType?.toSdkAuthType() ?: AuthType.NONE, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModel.kt index 152b8f2f9b..f1ba4292f0 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModel.kt @@ -61,7 +61,8 @@ import kotlinx.coroutines.launch import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize import java.time.Clock -import java.time.ZonedDateTime +import java.time.Instant +import java.time.temporal.ChronoUnit import javax.inject.Inject private const val KEY_STATE = "state" @@ -117,7 +118,9 @@ class AddEditSendViewModel @Inject constructor( isHideEmailAddressEnabled = !policyManager .getActivePolicies() .any { it.shouldDisableHideEmail ?: false }, - deletionDate = ZonedDateTime.now(clock).plusWeeks(1), + deletionDate = clock + .instant() + .plus(@Suppress("MagicNumber") 7, ChronoUnit.DAYS), expirationDate = null, sendUrl = null, hasPassword = false, @@ -400,7 +403,6 @@ class AddEditSendViewModel @Inject constructor( viewState = sendDataState .data ?.toViewState( - clock = clock, baseWebSendUrl = environmentRepo .environment .environmentUrlData @@ -442,7 +444,6 @@ class AddEditSendViewModel @Inject constructor( viewState = sendDataState .data ?.toViewState( - clock = clock, baseWebSendUrl = environmentRepo .environment .environmentUrlData @@ -993,8 +994,8 @@ data class AddEditSendState( val isHideEmailChecked: Boolean, val isDeactivateChecked: Boolean, val isHideEmailAddressEnabled: Boolean, - val deletionDate: ZonedDateTime, - val expirationDate: ZonedDateTime?, + val deletionDate: Instant, + val expirationDate: Instant?, val sendUrl: String?, val hasPassword: Boolean, val isSendEmailVerificationEnabled: Boolean, @@ -1218,7 +1219,7 @@ sealed class AddEditSendAction { /** * The user changed the deletion date. */ - data class DeletionDateChange(val deletionDate: ZonedDateTime) : AddEditSendAction() + data class DeletionDateChange(val deletionDate: Instant) : AddEditSendAction() /** * The user selected an authentication type. diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/components/AddEditSendCustomDateChooser.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/components/AddEditSendCustomDateChooser.kt index 2de5c295b8..4949c955bc 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/components/AddEditSendCustomDateChooser.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/components/AddEditSendCustomDateChooser.kt @@ -21,7 +21,7 @@ import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toImmutableList import kotlinx.parcelize.Parcelize import java.time.Clock -import java.time.ZonedDateTime +import java.time.Instant import java.time.format.FormatStyle import java.time.temporal.ChronoUnit import kotlin.time.Duration.Companion.days @@ -39,8 +39,8 @@ import kotlin.time.Duration.Companion.hours */ @Composable fun AddEditSendCustomDateChooser( - originalSelection: ZonedDateTime, - onDateSelect: (ZonedDateTime) -> Unit, + originalSelection: Instant, + onDateSelect: (Instant) -> Unit, isEnabled: Boolean, modifier: Modifier = Modifier, clock: Clock = LocalClock.current, @@ -70,8 +70,8 @@ fun AddEditSendCustomDateChooser( onDateSelect( (currentSelectionOption as? CustomDeletionOption.Current) ?.time - ?: ZonedDateTime - .now(clock) + ?: clock + .instant() .plus(currentSelectionOption.offsetMillis, ChronoUnit.MILLIS), ) }, @@ -89,7 +89,7 @@ private sealed class CustomDeletionOption : Parcelable { @Parcelize data class Current( - val time: ZonedDateTime, + val time: Instant, ) : CustomDeletionOption() { override val offsetMillis: Long get() = 0L diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/components/AddEditSendDeletionDateChooser.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/components/AddEditSendDeletionDateChooser.kt index 6925353159..e48613e295 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/components/AddEditSendDeletionDateChooser.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/components/AddEditSendDeletionDateChooser.kt @@ -17,7 +17,7 @@ import com.bitwarden.ui.util.asText import com.x8bit.bitwarden.ui.platform.composition.LocalClock import kotlinx.collections.immutable.toImmutableList import java.time.Clock -import java.time.ZonedDateTime +import java.time.Instant import java.time.temporal.ChronoUnit import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.hours @@ -27,7 +27,7 @@ import kotlin.time.Duration.Companion.hours */ @Composable fun AddEditSendDeletionDateChooser( - onDateSelect: (ZonedDateTime) -> Unit, + onDateSelect: (Instant) -> Unit, isEnabled: Boolean, modifier: Modifier = Modifier, clock: Clock = LocalClock.current, @@ -44,7 +44,7 @@ fun AddEditSendDeletionDateChooser( onOptionSelected = { selected -> selectedOption = options.entries.first { it.value == selected }.key onDateSelect( - ZonedDateTime.now(clock).plus(selectedOption.offsetMillis, ChronoUnit.MILLIS), + clock.instant().plus(selectedOption.offsetMillis, ChronoUnit.MILLIS), ) }, supportingText = stringResource(id = BitwardenString.deletion_date_info), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/handlers/AddEditSendHandlers.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/handlers/AddEditSendHandlers.kt index 121b4b7383..0d0e5fbd0e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/handlers/AddEditSendHandlers.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/handlers/AddEditSendHandlers.kt @@ -5,7 +5,7 @@ import com.x8bit.bitwarden.ui.tools.feature.send.addedit.AddEditSendAction import com.x8bit.bitwarden.ui.tools.feature.send.addedit.AddEditSendViewModel import com.x8bit.bitwarden.ui.tools.feature.send.addedit.model.AuthEmail import com.x8bit.bitwarden.ui.tools.feature.send.addedit.model.SendAuth -import java.time.ZonedDateTime +import java.time.Instant /** * A collection of handler functions for managing actions within the context of adding and editing @@ -22,7 +22,7 @@ data class AddEditSendHandlers( val onNoteChange: (String) -> Unit, val onHideEmailToggle: (Boolean) -> Unit, val onDeactivateSendToggle: (Boolean) -> Unit, - val onDeletionDateChange: (ZonedDateTime) -> Unit, + val onDeletionDateChange: (Instant) -> Unit, val onDeleteClick: () -> Unit, val onOpenPasswordGeneratorClick: () -> Unit, val onPasswordCopyClick: (String) -> Unit, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/AddEditSendStateExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/AddEditSendStateExtensions.kt index 78931750e3..162b35f54f 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/AddEditSendStateExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/AddEditSendStateExtensions.kt @@ -38,11 +38,11 @@ fun AddEditSendState.ViewState.Content.toSendView( disabled = common.isDeactivateChecked, hideEmail = common.isHideEmailChecked, revisionDate = clock.instant(), - deletionDate = common.deletionDate.toInstant(), + deletionDate = common.deletionDate, expirationDate = common.expirationDate?.let { // We no longer support expiration dates but is a send has one already, // we just update it to match the deletion date. - common.deletionDate.toInstant() + common.deletionDate }, emails = (common.sendAuth as? SendAuth.Email) ?.emails diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/SendViewExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/SendViewExtensions.kt index 52e0e71292..3afe617bc7 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/SendViewExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/SendViewExtensions.kt @@ -7,14 +7,10 @@ import com.x8bit.bitwarden.ui.tools.feature.send.addedit.model.AuthEmail import com.x8bit.bitwarden.ui.tools.feature.send.addedit.model.SendAuth import com.x8bit.bitwarden.ui.tools.feature.send.util.toSendUrl import kotlinx.collections.immutable.toImmutableList -import java.time.Clock -import java.time.ZonedDateTime - /** * Transforms [SendView] into [AddEditSendState.ViewState.Content]. */ fun SendView.toViewState( - clock: Clock, baseWebSendUrl: String, isHideEmailAddressEnabled: Boolean, isSendEmailVerificationEnabled: Boolean, @@ -31,8 +27,8 @@ fun SendView.toViewState( noteInput = this.notes.orEmpty(), isHideEmailChecked = this.hideEmail, isDeactivateChecked = this.disabled, - deletionDate = ZonedDateTime.ofInstant(this.deletionDate, clock.zone), - expirationDate = this.expirationDate?.let { ZonedDateTime.ofInstant(it, clock.zone) }, + deletionDate = this.deletionDate, + expirationDate = this.expirationDate, sendUrl = this.toSendUrl(baseWebSendUrl), hasPassword = this.hasPassword, isHideEmailAddressEnabled = isHideEmailAddressEnabled, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceTest.kt index 566017b24f..d750fb67c6 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceTest.kt @@ -33,7 +33,6 @@ import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test import java.time.Instant -import java.time.ZonedDateTime @Suppress("LargeClass") class AuthDiskSourceTest { @@ -1556,7 +1555,7 @@ private val USER_STATE = UserStateJson( kdfMemory = 16, kdfParallelism = 4, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), userDecryptionOptions = UserDecryptionOptionsJson( hasMasterPassword = true, trustedDeviceUserDecryptionOptions = TrustedDeviceUserDecryptionOptionsJson( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerTest.kt index 681dee0957..abcaaad430 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerTest.kt @@ -35,7 +35,6 @@ import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime @Suppress("LargeClass") class AuthRequestManagerTest { @@ -107,7 +106,7 @@ class AuthRequestManagerTest { ipAddress = "192.168.0.1", key = "public", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = false, originUrl = "www.bitwarden.com", @@ -185,7 +184,7 @@ class AuthRequestManagerTest { ipAddress = "192.168.0.1", key = "public", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = false, originUrl = "www.bitwarden.com", @@ -266,13 +265,13 @@ class AuthRequestManagerTest { ipAddress = "192.168.0.1", key = "public", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = false, originUrl = "www.bitwarden.com", ) val updatedAuthRequestResponseJson = authRequestResponseJson.copy( - responseDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + responseDate = Instant.parse("2024-09-13T00:00:00Z"), ) val authRequest = AuthRequest( id = authRequestResponseJson.id, @@ -334,13 +333,13 @@ class AuthRequestManagerTest { ipAddress = "192.168.0.1", key = "public", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = false, originUrl = "www.bitwarden.com", ) val updatedAuthRequestResponseJson = authRequestResponseJson.copy( - creationDate = ZonedDateTime.parse("2023-09-13T00:00Z"), + creationDate = Instant.parse("2023-09-13T00:00:00Z"), ) val authRequest = AuthRequest( id = authRequestResponseJson.id, @@ -564,7 +563,7 @@ class AuthRequestManagerTest { ZoneOffset.UTC, ) val authRequestsResponse = AUTH_REQUESTS_RESPONSE_JSON_AUTH_RESPONSE.copy( - creationDate = ZonedDateTime.ofInstant(fixedClock.instant(), ZoneOffset.UTC), + creationDate = fixedClock.instant(), requestApproved = false, ) val expectedOne = AuthRequestUpdatesResult.Update(authRequest = AUTH_REQUEST) @@ -771,7 +770,7 @@ class AuthRequestManagerTest { ) val authRequestResponseOne = AUTH_REQUESTS_RESPONSE_JSON_AUTH_RESPONSE.asSuccess() val authRequestResponseJson = AUTH_REQUESTS_RESPONSE_JSON_AUTH_RESPONSE.copy( - creationDate = ZonedDateTime.ofInstant(fixedClock.instant(), ZoneOffset.UTC), + creationDate = fixedClock.instant(), requestApproved = false, ) val authRequestResponseTwo = authRequestResponseJson.asSuccess() @@ -961,7 +960,7 @@ class AuthRequestManagerTest { ipAddress = "192.168.0.1", key = "public", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", @@ -977,7 +976,7 @@ class AuthRequestManagerTest { ipAddress = "192.168.0.1", key = "public", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", @@ -1011,7 +1010,7 @@ class AuthRequestManagerTest { ipAddress = "192.168.0.1", key = "public", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", @@ -1095,7 +1094,7 @@ class AuthRequestManagerTest { ipAddress = "192.168.0.1", key = "key", masterPasswordHash = passwordHash, - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", @@ -1108,7 +1107,7 @@ class AuthRequestManagerTest { ipAddress = "192.168.0.1", key = "key", masterPasswordHash = passwordHash, - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", @@ -1177,7 +1176,7 @@ private val ACCOUNT: AccountJson = AccountJson( kdfParallelism = 4, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), tokens = AccountTokensJson( accessToken = ACCESS_TOKEN, @@ -1203,7 +1202,7 @@ private val AUTH_REQUESTS_RESPONSE_JSON_AUTH_RESPONSE: AuthRequestsResponseJson. ipAddress = "192.168.0.1", key = "public", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", @@ -1216,7 +1215,7 @@ private val AUTH_REQUEST: AuthRequest = AuthRequest( ipAddress = "192.168.0.1", key = "public", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthTokenManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthTokenManagerTest.kt index 29f146e556..f5afbdd822 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthTokenManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/AuthTokenManagerTest.kt @@ -10,7 +10,7 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertNull -import java.time.ZonedDateTime +import java.time.Instant class AuthTokenManagerTest { @@ -188,7 +188,7 @@ private val ACCOUNT: AccountJson = AccountJson( kdfParallelism = 4, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), tokens = AccountTokensJson( accessToken = ACCESS_TOKEN, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/KdfManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/KdfManagerTest.kt index a21d9039dd..104f626318 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/KdfManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/KdfManagerTest.kt @@ -27,7 +27,7 @@ import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -import java.time.ZonedDateTime +import java.time.Instant class KdfManagerTest { @@ -355,7 +355,7 @@ private val PROFILE_1 = AccountJson.Profile( kdfParallelism = 4, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) private val ACCOUNT_1 = AccountJson( @@ -382,7 +382,7 @@ private val ACCOUNT_2 = AccountJson( kdfParallelism = null, userDecryptionOptions = null, isTwoFactorEnabled = true, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), settings = AccountJson.Settings( environmentUrlData = EnvironmentUrlDataJson.DEFAULT_EU, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/TrustedDeviceManagerTests.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/TrustedDeviceManagerTests.kt index 3bede3f95b..38a70bd16a 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/TrustedDeviceManagerTests.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/TrustedDeviceManagerTests.kt @@ -25,7 +25,7 @@ import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import java.time.ZonedDateTime +import java.time.Instant class TrustedDeviceManagerTests { private val fakeAuthDiskSource = FakeAuthDiskSource() @@ -154,7 +154,7 @@ class TrustedDeviceManagerTests { name = "name", identifier = "identifier", type = 0, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) fakeAuthDiskSource.userState = DEFAULT_USER_STATE fakeAuthDiskSource.storeShouldTrustDevice(userId = USER_ID, shouldTrustDevice = true) @@ -211,7 +211,7 @@ class TrustedDeviceManagerTests { name = "name", identifier = "identifier", type = 0, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) fakeAuthDiskSource.userState = DEFAULT_USER_STATE fakeAuthDiskSource.storeShouldTrustDevice(userId = USER_ID, shouldTrustDevice = true) @@ -300,7 +300,7 @@ private val DEFAULT_ACCOUNT = AccountJson( kdfParallelism = 4, userDecryptionOptions = DEFAULT_USER_DECRYPTION_OPTIONS, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), settings = AccountJson.Settings( environmentUrlData = EnvironmentUrlDataJson.DEFAULT_US, @@ -324,7 +324,7 @@ private val UPDATED_ACCOUNT = AccountJson( kdfParallelism = 4, userDecryptionOptions = UPDATED_USER_DECRYPTION_OPTIONS, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), settings = AccountJson.Settings( environmentUrlData = EnvironmentUrlDataJson.DEFAULT_US, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserLogoutManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserLogoutManagerTest.kt index 6bfd4e8b68..d03f5f11f7 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserLogoutManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserLogoutManagerTest.kt @@ -28,7 +28,7 @@ import io.mockk.runs import io.mockk.verify import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith -import java.time.ZonedDateTime +import java.time.Instant @ExtendWith(MainDispatcherExtension::class) class UserLogoutManagerTest { @@ -308,7 +308,7 @@ private val ACCOUNT_1 = AccountJson( kdfParallelism = 4, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), tokens = AccountTokensJson( accessToken = ACCESS_TOKEN, @@ -335,7 +335,7 @@ private val ACCOUNT_2 = AccountJson( kdfParallelism = null, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), tokens = AccountTokensJson( accessToken = ACCESS_TOKEN_2, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserStateManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserStateManagerTest.kt index b2c105c127..34244c4a01 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserStateManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserStateManagerTest.kt @@ -35,7 +35,7 @@ import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertNull -import java.time.ZonedDateTime +import java.time.Instant class UserStateManagerTest { @@ -338,7 +338,7 @@ private val PROFILE_1 = AccountJson.Profile( kdfParallelism = 4, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) private val ACCOUNT_1 = AccountJson( profile = PROFILE_1, @@ -363,7 +363,7 @@ private val ACCOUNT_2 = AccountJson( kdfParallelism = null, userDecryptionOptions = null, isTwoFactorEnabled = true, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), settings = AccountJson.Settings( environmentUrlData = EnvironmentUrlDataJson.DEFAULT_EU, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/util/TrustDeviceResponseExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/util/TrustDeviceResponseExtensionsTest.kt index c0352d0c71..c1ab9f8ea7 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/util/TrustDeviceResponseExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/util/TrustDeviceResponseExtensionsTest.kt @@ -9,7 +9,7 @@ import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountJson import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -import java.time.ZonedDateTime +import java.time.Instant class TrustDeviceResponseExtensionsTest { @Test @@ -82,7 +82,7 @@ private val DEFAULT_ACCOUNT = AccountJson( kdfParallelism = 4, userDecryptionOptions = DEFAULT_USER_DECRYPTION_OPTIONS, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), settings = AccountJson.Settings( environmentUrlData = EnvironmentUrlDataJson.DEFAULT_US, @@ -106,7 +106,7 @@ private val UPDATED_ACCOUNT = AccountJson( kdfParallelism = 4, userDecryptionOptions = UPDATED_USER_DECRYPTION_OPTIONS, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), settings = AccountJson.Settings( environmentUrlData = EnvironmentUrlDataJson.DEFAULT_US, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt index 3420ead060..1e615bc567 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt @@ -170,7 +170,6 @@ import org.junit.jupiter.api.assertDoesNotThrow import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime import javax.net.ssl.SSLHandshakeException @Suppress("LargeClass") @@ -7695,7 +7694,7 @@ class AuthRepositoryTest { kdfParallelism = 4, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) private val PROFILE_1 = BASE_PROFILE_1.copy( @@ -7733,7 +7732,7 @@ class AuthRepositoryTest { kdfParallelism = null, userDecryptionOptions = null, isTwoFactorEnabled = true, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), settings = AccountJson.Settings( environmentUrlData = EnvironmentUrlDataJson.DEFAULT_EU, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/AuthDiskSourceExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/AuthDiskSourceExtensionsTest.kt index 05c753620e..6e39bcb61e 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/AuthDiskSourceExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/AuthDiskSourceExtensionsTest.kt @@ -19,7 +19,7 @@ import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Test -import java.time.ZonedDateTime +import java.time.Instant class AuthDiskSourceExtensionsTest { private val authDiskSource: AuthDiskSource = FakeAuthDiskSource() @@ -490,7 +490,7 @@ private val MOCK_PROFILE = AccountJson.Profile( kdfParallelism = null, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) private val MOCK_ACCOUNT = AccountJson( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/UserStateJsonExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/UserStateJsonExtensionsTest.kt index ff8cf33ece..b110c085f5 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/UserStateJsonExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/UserStateJsonExtensionsTest.kt @@ -30,7 +30,7 @@ import io.mockk.every import io.mockk.mockk import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -import java.time.ZonedDateTime +import java.time.Instant @Suppress("LargeClass") class UserStateJsonExtensionsTest { @@ -67,7 +67,7 @@ class UserStateJsonExtensionsTest { kdfParallelism = 4, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) val originalAccount = AccountJson( profile = originalProfile, @@ -122,7 +122,7 @@ class UserStateJsonExtensionsTest { masterPasswordUnlock = null, ), isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) val originalAccount = AccountJson( profile = originalProfile, @@ -193,7 +193,7 @@ class UserStateJsonExtensionsTest { kdfParallelism = 4, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) val originalAccount = AccountJson( profile = originalProfile, @@ -209,7 +209,7 @@ class UserStateJsonExtensionsTest { avatarColorHex = "avatarColor", stamp = "securityStamp", isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), ), ), @@ -229,8 +229,7 @@ class UserStateJsonExtensionsTest { every { isPremium } returns true every { isPremiumFromOrganization } returns true every { isTwoFactorEnabled } returns false - every { creationDate } returns ZonedDateTime - .parse("2024-09-13T01:00:00.00Z") + every { creationDate } returns Instant.parse("2024-09-13T01:00:00.00Z") every { userDecryption } returns null } }, @@ -258,7 +257,7 @@ class UserStateJsonExtensionsTest { kdfParallelism = 4, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) val originalAccount = AccountJson( profile = originalProfile, @@ -323,7 +322,7 @@ class UserStateJsonExtensionsTest { masterPasswordUnlock = null, ), isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) val originalAccount = AccountJson( profile = originalProfile, @@ -1688,7 +1687,7 @@ class UserStateJsonExtensionsTest { kdfParallelism = 4, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) val originalAccount = AccountJson( profile = originalProfile, @@ -1708,7 +1707,7 @@ class UserStateJsonExtensionsTest { every { isPremium } returns false every { isPremiumFromOrganization } returns false every { isTwoFactorEnabled } returns true - every { creationDate } returns ZonedDateTime.parse("2024-09-13T01:00:00.00Z") + every { creationDate } returns Instant.parse("2024-09-13T01:00:00.00Z") } every { userDecryption } returns UserDecryptionJson( masterPasswordUnlock = MOCK_MASTER_PASSWORD_UNLOCK_DATA, @@ -1725,7 +1724,7 @@ class UserStateJsonExtensionsTest { stamp = "securityStamp", hasPremium = false, isTwoFactorEnabled = true, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), userDecryptionOptions = UserDecryptionOptionsJson( hasMasterPassword = true, trustedDeviceUserDecryptionOptions = null, @@ -1771,7 +1770,7 @@ class UserStateJsonExtensionsTest { masterPasswordUnlock = null, ), isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) val originalAccount = AccountJson( profile = originalProfile, @@ -1791,7 +1790,7 @@ class UserStateJsonExtensionsTest { every { isPremium } returns true every { isPremiumFromOrganization } returns false every { isTwoFactorEnabled } returns true - every { creationDate } returns ZonedDateTime.parse("2024-09-13T01:00:00.00Z") + every { creationDate } returns Instant.parse("2024-09-13T01:00:00.00Z") } every { userDecryption } returns UserDecryptionJson( masterPasswordUnlock = MOCK_MASTER_PASSWORD_UNLOCK_DATA, @@ -1808,7 +1807,7 @@ class UserStateJsonExtensionsTest { stamp = "newSecurityStamp", hasPremium = true, isTwoFactorEnabled = true, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), userDecryptionOptions = UserDecryptionOptionsJson( hasMasterPassword = true, trustedDeviceUserDecryptionOptions = trustedDeviceOptions, @@ -1848,7 +1847,7 @@ class UserStateJsonExtensionsTest { masterPasswordUnlock = MOCK_MASTER_PASSWORD_UNLOCK_DATA, ), isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) val originalAccount = AccountJson( profile = originalProfile, @@ -1868,7 +1867,7 @@ class UserStateJsonExtensionsTest { every { isPremium } returns false every { isPremiumFromOrganization } returns true every { isTwoFactorEnabled } returns false - every { creationDate } returns ZonedDateTime.parse("2024-09-13T01:00:00.00Z") + every { creationDate } returns Instant.parse("2024-09-13T01:00:00.00Z") } every { userDecryption } returns null } @@ -1883,7 +1882,7 @@ class UserStateJsonExtensionsTest { stamp = "updatedSecurityStamp", hasPremium = true, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), userDecryptionOptions = UserDecryptionOptionsJson( hasMasterPassword = true, trustedDeviceUserDecryptionOptions = null, @@ -1916,7 +1915,7 @@ class UserStateJsonExtensionsTest { kdfParallelism = 4, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) val originalAccount = AccountJson( profile = originalProfile, @@ -1973,7 +1972,7 @@ class UserStateJsonExtensionsTest { kdfParallelism = 8, userDecryptionOptions = userDecryptionOptions, isTwoFactorEnabled = true, - creationDate = ZonedDateTime.parse("2024-01-01T00:00:00.00Z"), + creationDate = Instant.parse("2024-01-01T00:00:00.00Z"), ) val originalAccount = AccountJson( profile = originalProfile, @@ -2025,7 +2024,7 @@ class UserStateJsonExtensionsTest { kdfParallelism = 4, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) val inactiveProfile = AccountJson.Profile( userId = "inactiveUserId", @@ -2043,7 +2042,7 @@ class UserStateJsonExtensionsTest { kdfParallelism = 2, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-08-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-08-13T01:00:00.00Z"), ) val activeAccount = AccountJson( profile = activeProfile, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/EventDiskSourceTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/EventDiskSourceTest.kt index 51b4545e27..a373d7b3a6 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/EventDiskSourceTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/EventDiskSourceTest.kt @@ -14,7 +14,6 @@ import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime class EventDiskSourceTest { private val fixedClock: Clock = Clock.fixed( @@ -38,7 +37,7 @@ class EventDiskSourceTest { val organizationEvent = OrganizationEventJson( type = OrganizationEventType.CIPHER_DELETED, cipherId = "cipherId-1", - date = ZonedDateTime.now(fixedClock), + date = fixedClock.instant(), organizationId = null, ) @@ -54,7 +53,7 @@ class EventDiskSourceTest { userId = userId, organizationEventType = "1102", cipherId = "cipherId-1", - date = ZonedDateTime.now(fixedClock), + date = fixedClock.instant(), organizationId = null, ), ), @@ -74,7 +73,7 @@ class EventDiskSourceTest { userId = userId, organizationEventType = "1102", cipherId = "cipherId-1", - date = ZonedDateTime.now(fixedClock), + date = fixedClock.instant(), organizationId = null, ), OrganizationEventEntity( @@ -82,7 +81,7 @@ class EventDiskSourceTest { userId = "userId-2", organizationEventType = "1102", cipherId = "cipherId-2", - date = ZonedDateTime.now(fixedClock), + date = fixedClock.instant(), organizationId = null, ), ), @@ -97,7 +96,7 @@ class EventDiskSourceTest { userId = "userId-2", organizationEventType = "1102", cipherId = "cipherId-2", - date = ZonedDateTime.now(fixedClock), + date = fixedClock.instant(), organizationId = null, ), ), @@ -117,7 +116,7 @@ class EventDiskSourceTest { userId = userId, organizationEventType = "1102", cipherId = "cipherId-1", - date = ZonedDateTime.now(fixedClock), + date = fixedClock.instant(), organizationId = null, ), OrganizationEventEntity( @@ -125,7 +124,7 @@ class EventDiskSourceTest { userId = "userId-2", organizationEventType = "1102", cipherId = "cipherId-2", - date = ZonedDateTime.now(fixedClock), + date = fixedClock.instant(), organizationId = null, ), ), @@ -138,7 +137,7 @@ class EventDiskSourceTest { OrganizationEventJson( type = OrganizationEventType.CIPHER_DELETED, cipherId = "cipherId-1", - date = ZonedDateTime.now(fixedClock), + date = fixedClock.instant(), organizationId = null, ), ), diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/PushDiskSourceTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/PushDiskSourceTest.kt index cc344f2f84..e3edb70e28 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/PushDiskSourceTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/datasource/disk/PushDiskSourceTest.kt @@ -1,15 +1,15 @@ package com.x8bit.bitwarden.data.platform.datasource.disk import androidx.core.content.edit -import com.bitwarden.core.util.getBinaryLongFromZoneDateTime -import com.bitwarden.core.util.getZoneDateTimeFromBinaryLong +import com.bitwarden.core.util.getBinaryLongFromInstant +import com.bitwarden.core.util.getInstantFromBinaryLong import com.bitwarden.data.datasource.disk.base.FakeSharedPreferences import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -import java.time.ZonedDateTime +import java.time.Instant class PushDiskSourceTest { private val fakeSharedPreferences = FakeSharedPreferences() @@ -47,7 +47,7 @@ class PushDiskSourceTest { ) pushDiskSource.storeLastPushTokenRegistrationDate( userId = userId, - registrationDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + registrationDate = Instant.parse("2023-10-27T12:00:00Z"), ) pushDiskSource.clearData(userId = userId) @@ -99,12 +99,12 @@ class PushDiskSourceTest { fun `getLastPushTokenRegistrationDate should pull from SharedPreferences`() { val lastPushTokenBaseKey = "bwPreferencesStorage:pushLastRegistrationDate" val mockUserId = "mockUserId" - val mockLastPushTokenRegistration = ZonedDateTime.parse("2024-01-06T22:27:45.904314Z") + val mockLastPushTokenRegistration = Instant.parse("2024-01-06T22:27:45.904314Z") fakeSharedPreferences .edit { putLong( "${lastPushTokenBaseKey}_$mockUserId", - getBinaryLongFromZoneDateTime(mockLastPushTokenRegistration), + getBinaryLongFromInstant(mockLastPushTokenRegistration), ) } val actual = pushDiskSource.getLastPushTokenRegistrationDate(userId = mockUserId)!! @@ -118,7 +118,7 @@ class PushDiskSourceTest { fun `storeLastPushTokenRegistrationDate for non-null values should update SharedPreferences`() { val lastPushTokenBaseKey = "bwPreferencesStorage:pushLastRegistrationDate" val mockUserId = "mockUserId" - val mockLastPushTokenRegistration = ZonedDateTime.parse("2024-01-06T22:27:45.904314Z") + val mockLastPushTokenRegistration = Instant.parse("2024-01-06T22:27:45.904314Z") pushDiskSource.storeLastPushTokenRegistrationDate( userId = mockUserId, registrationDate = mockLastPushTokenRegistration, @@ -130,7 +130,7 @@ class PushDiskSourceTest { ) assertEquals( mockLastPushTokenRegistration, - getZoneDateTimeFromBinaryLong(actual), + getInstantFromBinaryLong(actual), ) } @@ -138,10 +138,10 @@ class PushDiskSourceTest { fun `storeLastPushTokenRegistrationDate for null values should clear SharedPreferences`() { val lastPushTokenBaseKey = "bwPreferencesStorage:pushLastRegistrationDate" val mockUserId = "mockUserId" - val mockLastPushTokenRegistration = ZonedDateTime.parse("2023-10-27T12:00:00Z") + val mockLastPushTokenRegistration = Instant.parse("2023-10-27T12:00:00Z") val lastPushTokenKey = "${lastPushTokenBaseKey}_$mockUserId" fakeSharedPreferences.edit { - putLong(lastPushTokenKey, mockLastPushTokenRegistration.toEpochSecond()) + putLong(lastPushTokenKey, mockLastPushTokenRegistration.epochSecond) } assertTrue(fakeSharedPreferences.contains(lastPushTokenKey)) pushDiskSource.storeLastPushTokenRegistrationDate( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManagerTest.kt index d80599482a..e5d6cadb66 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManagerTest.kt @@ -28,7 +28,7 @@ import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -import java.time.ZonedDateTime +import java.time.Instant class FirstTimeActionManagerTest { private val fakeAuthDiskSource = FakeAuthDiskSource() @@ -440,7 +440,7 @@ private val MOCK_PROFILE = AccountJson.Profile( kdfParallelism = 4, userDecryptionOptions = MOCK_USER_DECRYPTION_OPTIONS, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) private val MOCK_ACCOUNT = AccountJson( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/PolicyManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/PolicyManagerTest.kt index 12c686f309..ac3143cb48 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/PolicyManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/PolicyManagerTest.kt @@ -17,7 +17,7 @@ import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import java.time.ZonedDateTime +import java.time.Instant class PolicyManagerTest { private val mutableUserStateFlow = MutableStateFlow(null) @@ -367,9 +367,9 @@ class PolicyManagerTest { val userState: UserStateJson = mockk { every { activeUserId } returns USER_ID } - val earliestRevisionDate = ZonedDateTime.parse("2024-01-01T00:00:00Z") - val middleRevisionDate = ZonedDateTime.parse("2024-06-01T00:00:00Z") - val latestRevisionDate = ZonedDateTime.parse("2024-12-01T00:00:00Z") + val earliestRevisionDate = Instant.parse("2024-01-01T00:00:00Z") + val middleRevisionDate = Instant.parse("2024-06-01T00:00:00Z") + val latestRevisionDate = Instant.parse("2024-12-01T00:00:00Z") val expectedOrganizationId = "mockId-1" @@ -434,8 +434,8 @@ class PolicyManagerTest { val userState: UserStateJson = mockk { every { activeUserId } returns USER_ID } - val earlierRevisionDate = ZonedDateTime.parse("2024-01-01T00:00:00Z") - val laterRevisionDate = ZonedDateTime.parse("2024-06-01T00:00:00Z") + val earlierRevisionDate = Instant.parse("2024-01-01T00:00:00Z") + val laterRevisionDate = Instant.parse("2024-06-01T00:00:00Z") val expectedOrganizationId = "mockId-2" every { authDiskSource.userState } returns userState diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/PushManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/PushManagerTest.kt index 2b85173351..d69cb8f988 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/PushManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/PushManagerTest.kt @@ -38,7 +38,6 @@ import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime import java.time.temporal.ChronoUnit class PushManagerTest { @@ -264,7 +263,7 @@ class PushManagerTest { cipherId = "aab5cdcc-f4a7-4e65-bf6d-5e0eab052321", organizationId = "6a41d965-ed95-4eae-98c3-5f1ec609c2c1", collectionIds = listOf(), - revisionDate = ZonedDateTime.parse("2023-10-27T12:00:00.000Z"), + revisionDate = Instant.parse("2023-10-27T12:00:00.000Z"), isUpdate = false, ), awaitItem(), @@ -298,7 +297,7 @@ class PushManagerTest { cipherId = "aab5cdcc-f4a7-4e65-bf6d-5e0eab052321", organizationId = "6a41d965-ed95-4eae-98c3-5f1ec609c2c1", collectionIds = listOf(), - revisionDate = ZonedDateTime.parse("2023-10-27T12:00:00.000Z"), + revisionDate = Instant.parse("2023-10-27T12:00:00.000Z"), isUpdate = true, ), awaitItem(), @@ -315,7 +314,7 @@ class PushManagerTest { SyncFolderUpsertData( userId = "078966a2-93c2-4618-ae2a-0a2394c88d37", folderId = "aab5cdcc-f4a7-4e65-bf6d-5e0eab052321", - revisionDate = ZonedDateTime.parse("2023-10-27T12:00:00.000Z"), + revisionDate = Instant.parse("2023-10-27T12:00:00.000Z"), isUpdate = false, ), awaitItem(), @@ -347,7 +346,7 @@ class PushManagerTest { SyncFolderUpsertData( userId = "078966a2-93c2-4618-ae2a-0a2394c88d37", folderId = "aab5cdcc-f4a7-4e65-bf6d-5e0eab052321", - revisionDate = ZonedDateTime.parse("2023-10-27T12:00:00.000Z"), + revisionDate = Instant.parse("2023-10-27T12:00:00.000Z"), isUpdate = true, ), awaitItem(), @@ -378,7 +377,7 @@ class PushManagerTest { SyncSendUpsertData( userId = "078966a2-93c2-4618-ae2a-0a2394c88d37", sendId = "aab5cdcc-f4a7-4e65-bf6d-5e0eab052321", - revisionDate = ZonedDateTime.parse("2023-10-27T12:00:00.000Z"), + revisionDate = Instant.parse("2023-10-27T12:00:00.000Z"), isUpdate = false, ), awaitItem(), @@ -408,7 +407,7 @@ class PushManagerTest { SyncSendUpsertData( userId = "078966a2-93c2-4618-ae2a-0a2394c88d37", sendId = "aab5cdcc-f4a7-4e65-bf6d-5e0eab052321", - revisionDate = ZonedDateTime.parse("2023-10-27T12:00:00.000Z"), + revisionDate = Instant.parse("2023-10-27T12:00:00.000Z"), isUpdate = true, ), awaitItem(), @@ -710,10 +709,10 @@ class PushManagerTest { @Suppress("MaxLineLength") @Test fun `registerPushTokenIfNecessary should do nothing if registered less than 7 days before`() { - val lastRegistration = ZonedDateTime.ofInstant( - clock.instant().minus(6, ChronoUnit.DAYS).minus(23, ChronoUnit.HOURS), - ZoneOffset.UTC, - ) + val lastRegistration = clock + .instant() + .minus(6, ChronoUnit.DAYS) + .minus(23, ChronoUnit.HOURS) pushDiskSource.storeLastPushTokenRegistrationDate( userId, lastRegistration, @@ -724,18 +723,18 @@ class PushManagerTest { assertEquals(newToken, pushDiskSource.registeredPushToken) // Assert the last registration value has not changed assertEquals( - lastRegistration.toEpochSecond(), - pushDiskSource.getLastPushTokenRegistrationDate(userId)!!.toEpochSecond(), + lastRegistration.epochSecond, + pushDiskSource.getLastPushTokenRegistrationDate(userId)!!.epochSecond, ) } @Suppress("MaxLineLength") @Test fun `registerStoredPushTokenIfNecessary should do nothing if registered less than 7 days before`() { - val lastRegistration = ZonedDateTime.ofInstant( - clock.instant().minus(6, ChronoUnit.DAYS).minus(23, ChronoUnit.HOURS), - ZoneOffset.UTC, - ) + val lastRegistration = clock + .instant() + .minus(6, ChronoUnit.DAYS) + .minus(23, ChronoUnit.HOURS) pushDiskSource.registeredPushToken = newToken pushDiskSource.storeLastPushTokenRegistrationDate( userId, @@ -747,18 +746,15 @@ class PushManagerTest { assertEquals(newToken, pushDiskSource.registeredPushToken) // Assert the last registration value has not changed assertEquals( - lastRegistration.toEpochSecond(), - pushDiskSource.getLastPushTokenRegistrationDate(userId)!!.toEpochSecond(), + lastRegistration.epochSecond, + pushDiskSource.getLastPushTokenRegistrationDate(userId)!!.epochSecond, ) } @Suppress("MaxLineLength") @Test fun `registerPushTokenIfNecessary should update registeredPushToken, lastPushTokenRegistrationDate and currentPushToken`() { - val lastRegistration = ZonedDateTime.ofInstant( - clock.instant().minus(8, ChronoUnit.DAYS), - ZoneOffset.UTC, - ) + val lastRegistration = clock.instant().minus(8, ChronoUnit.DAYS) pushDiskSource.storeLastPushTokenRegistrationDate( userId, lastRegistration, @@ -770,7 +766,7 @@ class PushManagerTest { } assertEquals( clock.instant().epochSecond, - pushDiskSource.getLastPushTokenRegistrationDate(userId)?.toEpochSecond(), + pushDiskSource.getLastPushTokenRegistrationDate(userId)?.epochSecond, ) assertEquals(newToken, pushDiskSource.registeredPushToken) assertEquals(newToken, pushDiskSource.getCurrentPushToken(userId)) @@ -779,10 +775,7 @@ class PushManagerTest { @Suppress("MaxLineLength") @Test fun `registerStoredPushTokenIfNecessary should update registeredPushToken, lastPushTokenRegistrationDate and currentPushToken`() { - val lastRegistration = ZonedDateTime.ofInstant( - clock.instant().minus(8, ChronoUnit.DAYS), - ZoneOffset.UTC, - ) + val lastRegistration = clock.instant().minus(8, ChronoUnit.DAYS) pushDiskSource.storeLastPushTokenRegistrationDate( userId, lastRegistration, @@ -795,7 +788,7 @@ class PushManagerTest { } assertEquals( clock.instant().epochSecond, - pushDiskSource.getLastPushTokenRegistrationDate(userId)?.toEpochSecond(), + pushDiskSource.getLastPushTokenRegistrationDate(userId)?.epochSecond, ) assertEquals(newToken, pushDiskSource.registeredPushToken) assertEquals(newToken, pushDiskSource.getCurrentPushToken(userId)) @@ -825,9 +818,7 @@ class PushManagerTest { } assertEquals( clock.instant().epochSecond, - pushDiskSource - .getLastPushTokenRegistrationDate(userId) - ?.toEpochSecond(), + pushDiskSource.getLastPushTokenRegistrationDate(userId)?.epochSecond, ) assertEquals(newToken, pushDiskSource.registeredPushToken) assertEquals(newToken, pushDiskSource.getCurrentPushToken(userId)) @@ -844,9 +835,7 @@ class PushManagerTest { } assertEquals( clock.instant().epochSecond, - pushDiskSource - .getLastPushTokenRegistrationDate(userId) - ?.toEpochSecond(), + pushDiskSource.getLastPushTokenRegistrationDate(userId)?.epochSecond, ) assertEquals(newToken, pushDiskSource.registeredPushToken) assertEquals(newToken, pushDiskSource.getCurrentPushToken(userId)) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/event/OrganizationEventManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/event/OrganizationEventManagerTest.kt index 65d1a0b0a9..c6a04b3d7c 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/event/OrganizationEventManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/event/OrganizationEventManagerTest.kt @@ -29,7 +29,6 @@ import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime class OrganizationEventManagerTest { @@ -73,7 +72,7 @@ class OrganizationEventManagerTest { val organizationEvent = OrganizationEventJson( type = OrganizationEventType.CIPHER_UPDATED, cipherId = CIPHER_ID, - date = ZonedDateTime.now(fixedClock), + date = fixedClock.instant(), organizationId = null, ) val events = listOf(organizationEvent) @@ -105,7 +104,7 @@ class OrganizationEventManagerTest { val organizationEvent = OrganizationEventJson( type = OrganizationEventType.CIPHER_UPDATED, cipherId = CIPHER_ID, - date = ZonedDateTime.now(fixedClock), + date = fixedClock.instant(), organizationId = null, ) val events = listOf(organizationEvent) @@ -211,7 +210,7 @@ class OrganizationEventManagerTest { event = OrganizationEventJson( type = OrganizationEventType.CIPHER_CLIENT_AUTO_FILLED, cipherId = CIPHER_ID, - date = ZonedDateTime.now(fixedClock), + date = fixedClock.instant(), organizationId = null, ), ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryTest.kt index 686759845d..943e4517d1 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryTest.kt @@ -42,7 +42,7 @@ import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import java.time.ZonedDateTime +import java.time.Instant class AuthenticatorBridgeRepositoryTest { @@ -508,14 +508,14 @@ private val USER_1_DELETED_TOTP_CIPHER = mockk { every { login?.totp } returns "encryptedTotp1Deleted" every { login?.username } returns "username" every { archivedDate } returns null - every { deletedDate } returns ZonedDateTime.parse("2023-10-27T12:00:00Z") + every { deletedDate } returns Instant.parse("2023-10-27T12:00:00Z") every { name } returns "cipher1" } private val USER_1_ARCHIVED_TOTP_CIPHER = mockk { every { login?.totp } returns "encryptedTotp1Deleted" every { login?.username } returns "username" - every { archivedDate } returns ZonedDateTime.parse("2023-10-27T12:00:00Z") + every { archivedDate } returns Instant.parse("2023-10-27T12:00:00Z") every { deletedDate } returns null every { name } returns "cipher1" } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryTest.kt index 2206e61e92..7a7d19dc40 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryTest.kt @@ -56,7 +56,6 @@ import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import java.time.Instant -import java.time.ZonedDateTime import javax.crypto.Cipher @Suppress("LargeClass") @@ -1476,7 +1475,7 @@ private val MOCK_PROFILE = AccountJson.Profile( kdfParallelism = 4, userDecryptionOptions = MOCK_USER_DECRYPTION_OPTIONS, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) private val MOCK_ACCOUNT = AccountJson( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/tools/generator/repository/GeneratorRepositoryTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/tools/generator/repository/GeneratorRepositoryTest.kt index 6bc9c4fa3e..f104f784f6 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/tools/generator/repository/GeneratorRepositoryTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/tools/generator/repository/GeneratorRepositoryTest.kt @@ -54,7 +54,6 @@ import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime @Suppress("LargeClass") class GeneratorRepositoryTest { @@ -807,7 +806,7 @@ private val USER_STATE = UserStateJson( masterPasswordUnlock = null, ), isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), tokens = AccountTokensJson( accessToken = "accessToken", diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt index 02642cb8f7..5b4d5c2df4 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt @@ -30,7 +30,7 @@ import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import java.time.ZonedDateTime +import java.time.Instant class VaultDiskSourceTest { @@ -556,7 +556,7 @@ private val FOLDER_ENTITY = FolderEntity( id = "mockId-2", userId = USER_ID, name = "mockName-2", - revisionDate = ZonedDateTime.parse("2023-10-27T12:00Z"), + revisionDate = Instant.parse("2023-10-27T12:00:00Z"), ) private const val SEND_JSON = """ diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/ZonedDateTimeTypeConverterTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/InstantTypeConverterTest.kt similarity index 64% rename from app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/ZonedDateTimeTypeConverterTest.kt rename to app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/InstantTypeConverterTest.kt index 4463aa3db1..e7696c1e95 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/ZonedDateTimeTypeConverterTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/convertor/InstantTypeConverterTest.kt @@ -3,11 +3,11 @@ package com.x8bit.bitwarden.data.vault.datasource.disk.convertor import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Test -import java.time.ZonedDateTime +import java.time.Instant -class ZonedDateTimeTypeConverterTest { +class InstantTypeConverterTest { - private val typeConverter = ZonedDateTimeTypeConverter() + private val typeConverter = InstantTypeConverter() @Test fun `fromTimestamp should return null when value is null`() { @@ -19,9 +19,9 @@ class ZonedDateTimeTypeConverterTest { } @Test - fun `fromTimestamp should return correct ZonedDateTime when value is not null`() { - val expected = ZonedDateTime.parse("2023-12-15T20:38:06Z") - val value = expected.toEpochSecond() + fun `fromTimestamp should return correct Instant when value is not null`() { + val expected = Instant.parse("2023-12-15T20:38:06Z") + val value = expected.epochSecond val result = typeConverter.fromTimestamp(value) @@ -30,7 +30,7 @@ class ZonedDateTimeTypeConverterTest { @Test fun `toTimestamp should return null when value is null`() { - val value: ZonedDateTime? = null + val value: Instant? = null val result = typeConverter.toTimestamp(value) @@ -39,8 +39,8 @@ class ZonedDateTimeTypeConverterTest { @Test fun `toTimestamp should return correct Long when value is not null`() { - val value = ZonedDateTime.parse("2023-12-15T20:38:06Z") - val expected = value.toEpochSecond() + val value = Instant.parse("2023-12-15T20:38:06Z") + val expected = value.epochSecond val result = typeConverter.toTimestamp(value) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt index 3234823e48..7959997f01 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt @@ -11,10 +11,9 @@ import com.bitwarden.vault.LocalDataView import com.bitwarden.vault.LoginListView import com.bitwarden.vault.LoginUriView import java.time.Instant -import java.time.ZonedDateTime /** - * Default date time used for [ZonedDateTime] properties of mock objects. + * Default date time used for [Instant] properties of mock objects. */ private const val DEFAULT_TIMESTAMP = "2023-10-27T12:00:00Z" diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt index 72b9a60e0c..4435d4dfbf 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt @@ -20,10 +20,9 @@ import com.bitwarden.vault.UriMatchType import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime /** - * Default date time used for [ZonedDateTime] properties of mock objects. + * Default date time used for [Instant] properties of mock objects. */ private const val DEFAULT_TIMESTAMP = "2023-10-27T12:00:00Z" private val FIXED_CLOCK: Clock = Clock.fixed( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/FolderViewUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/FolderViewUtil.kt index 23ecfe2368..2522857d01 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/FolderViewUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/FolderViewUtil.kt @@ -1,7 +1,7 @@ package com.x8bit.bitwarden.data.vault.datasource.sdk.model import com.bitwarden.vault.FolderView -import java.time.ZonedDateTime +import java.time.Instant /** * Create a mock [FolderView] with a given [number]. @@ -10,7 +10,5 @@ fun createMockFolderView(number: Int): FolderView = FolderView( id = "mockId-$number", name = "mockName-$number", - revisionDate = ZonedDateTime - .parse("2023-10-27T12:00:00Z") - .toInstant(), + revisionDate = Instant.parse("2023-10-27T12:00:00Z"), ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/SendViewUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/SendViewUtil.kt index 20b1d8ddfb..92d4668e84 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/SendViewUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/SendViewUtil.kt @@ -6,7 +6,6 @@ import com.bitwarden.send.SendTextView import com.bitwarden.send.SendType import com.bitwarden.send.SendView import java.time.Instant -import java.time.ZonedDateTime /** * Create a mock [SendView] with a given [number]. @@ -28,9 +27,9 @@ fun createMockSendView( accessCount: UInt = 1U, disabled: Boolean = false, hideEmail: Boolean = false, - revisionDate: Instant = ZonedDateTime.parse("2023-10-27T12:00:00Z").toInstant(), - deletionDate: Instant = ZonedDateTime.parse("2023-10-27T12:00:00Z").toInstant(), - expirationDate: Instant? = ZonedDateTime.parse("2023-10-27T12:00:00Z").toInstant(), + revisionDate: Instant = Instant.parse("2023-10-27T12:00:00Z"), + deletionDate: Instant = Instant.parse("2023-10-27T12:00:00Z"), + expirationDate: Instant? = Instant.parse("2023-10-27T12:00:00Z"), ): SendView = SendView( id = id, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCipherUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCipherUtil.kt index 6044ee06af..19a90a9427 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCipherUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCipherUtil.kt @@ -19,10 +19,9 @@ import com.bitwarden.vault.UriMatchType import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime /** - * Default date time used for [ZonedDateTime] properties of mock objects. + * Default date time used for [Instant] properties of mock objects. */ private const val DEFAULT_TIMESTAMP = "2023-10-27T12:00:00Z" private val FIXED_CLOCK: Clock = Clock.fixed( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkEncryptionContextUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkEncryptionContextUtil.kt index 3b746a3bae..4be33a6dc9 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkEncryptionContextUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkEncryptionContextUtil.kt @@ -5,10 +5,9 @@ import com.bitwarden.vault.EncryptionContext import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime /** - * Default date time used for [ZonedDateTime] properties of mock objects. + * Default date time used for [Instant] properties of mock objects. */ private const val DEFAULT_TIMESTAMP = "2023-10-27T12:00:00Z" private val FIXED_CLOCK: Clock = Clock.fixed( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkFolderUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkFolderUtil.kt index 9a5e61a531..2f749c9b3f 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkFolderUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkFolderUtil.kt @@ -1,7 +1,7 @@ package com.x8bit.bitwarden.data.vault.datasource.sdk.model import com.bitwarden.vault.Folder -import java.time.ZonedDateTime +import java.time.Instant /** * Create a mock [Folder] with a given [number]. @@ -10,7 +10,5 @@ fun createMockSdkFolder(number: Int): Folder = Folder( id = "mockId-$number", name = "mockName-$number", - revisionDate = ZonedDateTime - .parse("2023-10-27T12:00:00Z") - .toInstant(), + revisionDate = Instant.parse("2023-10-27T12:00:00Z"), ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkSendUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkSendUtil.kt index 53059c5cfe..697de6c575 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkSendUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkSendUtil.kt @@ -5,7 +5,7 @@ import com.bitwarden.send.Send import com.bitwarden.send.SendFile import com.bitwarden.send.SendText import com.bitwarden.send.SendType -import java.time.ZonedDateTime +import java.time.Instant /** * Create a mock [Send] with a given [number]. @@ -28,9 +28,9 @@ fun createMockSdkSend( accessCount = 1u, disabled = false, hideEmail = false, - revisionDate = ZonedDateTime.parse("2023-10-27T12:00:00Z").toInstant(), - deletionDate = ZonedDateTime.parse("2023-10-27T12:00:00Z").toInstant(), - expirationDate = ZonedDateTime.parse("2023-10-27T12:00:00Z").toInstant(), + revisionDate = Instant.parse("2023-10-27T12:00:00Z"), + deletionDate = Instant.parse("2023-10-27T12:00:00Z"), + expirationDate = Instant.parse("2023-10-27T12:00:00Z"), emails = null, authType = AuthType.PASSWORD, ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/CipherManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/CipherManagerTest.kt index d97223dc87..eabb8100a4 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/CipherManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/CipherManagerTest.kt @@ -81,7 +81,6 @@ import java.io.File import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime import java.time.temporal.ChronoUnit @Suppress("LargeClass") @@ -2686,7 +2685,7 @@ class CipherManagerTest { val cipherId = "mockId-$number" val originalCipher = createMockCipher( number = number, - revisionDate = ZonedDateTime.now(clock).minus(5, ChronoUnit.MINUTES), + revisionDate = clock.instant().minus(5, ChronoUnit.MINUTES), ) fakeAuthDiskSource.userState = MOCK_USER_STATE @@ -2698,7 +2697,7 @@ class CipherManagerTest { SyncCipherUpsertData( userId = userId, cipherId = cipherId, - revisionDate = ZonedDateTime.now(clock), + revisionDate = clock.instant(), isUpdate = false, collectionIds = null, organizationId = null, @@ -2724,7 +2723,7 @@ class CipherManagerTest { val collection = createMockCollection(number = number) val originalCipher = createMockCipher( number = number, - revisionDate = ZonedDateTime.now(clock).minus(5, ChronoUnit.MINUTES), + revisionDate = clock.instant().minus(5, ChronoUnit.MINUTES), ) val updatedCipher = mockk() @@ -2746,7 +2745,7 @@ class CipherManagerTest { SyncCipherUpsertData( userId = userId, cipherId = cipherId, - revisionDate = ZonedDateTime.now(clock), + revisionDate = clock.instant(), isUpdate = false, collectionIds = listOf("mockId-1"), organizationId = "mock-id", @@ -2769,7 +2768,7 @@ class CipherManagerTest { val cipherId = "mockId-$number" val originalCipher = createMockCipher( number = number, - revisionDate = ZonedDateTime.now(clock).minus(5, ChronoUnit.MINUTES), + revisionDate = clock.instant().minus(5, ChronoUnit.MINUTES), ) val updatedCipher = mockk() val collection = createMockCollection(number = number) @@ -2789,7 +2788,7 @@ class CipherManagerTest { SyncCipherUpsertData( userId = userId, cipherId = cipherId, - revisionDate = ZonedDateTime.now(clock), + revisionDate = clock.instant(), isUpdate = true, collectionIds = listOf("mockId-1"), organizationId = "mock-id", @@ -2816,7 +2815,7 @@ class CipherManagerTest { SyncCipherUpsertData( userId = userId, cipherId = cipherId, - revisionDate = ZonedDateTime.now(clock), + revisionDate = clock.instant(), isUpdate = true, collectionIds = null, organizationId = null, @@ -2839,7 +2838,7 @@ class CipherManagerTest { val cipherId = "mockId-$number" val originalCipher = createMockCipher( number = number, - revisionDate = ZonedDateTime.now(clock), + revisionDate = clock.instant(), ) fakeAuthDiskSource.userState = MOCK_USER_STATE @@ -2851,7 +2850,7 @@ class CipherManagerTest { SyncCipherUpsertData( userId = userId, cipherId = cipherId, - revisionDate = ZonedDateTime.now(clock).minus(5, ChronoUnit.MINUTES), + revisionDate = clock.instant().minus(5, ChronoUnit.MINUTES), isUpdate = true, collectionIds = null, organizationId = null, @@ -2889,7 +2888,7 @@ class CipherManagerTest { SyncCipherUpsertData( userId = userId, cipherId = cipherId, - revisionDate = ZonedDateTime.now(clock), + revisionDate = clock.instant(), isUpdate = true, collectionIds = null, organizationId = null, @@ -2921,7 +2920,7 @@ class CipherManagerTest { SyncCipherUpsertData( userId = userId, cipherId = cipherId, - revisionDate = ZonedDateTime.now(clock), + revisionDate = clock.instant(), isUpdate = false, collectionIds = null, organizationId = null, @@ -2961,7 +2960,7 @@ class CipherManagerTest { SyncCipherUpsertData( userId = userId, cipherId = cipherId, - revisionDate = ZonedDateTime.now(clock), + revisionDate = clock.instant(), isUpdate = false, collectionIds = null, organizationId = null, @@ -2983,7 +2982,7 @@ class CipherManagerTest { val userId = MOCK_USER_STATE.activeUserId val cipherId = "mockId-$number" val originalCipher = mockk { - every { revisionDate } returns ZonedDateTime.now(clock).minus(5, ChronoUnit.MINUTES) + every { revisionDate } returns clock.instant().minus(5, ChronoUnit.MINUTES) } val updatedCipher = mockk() @@ -3000,7 +2999,7 @@ class CipherManagerTest { SyncCipherUpsertData( userId = userId, cipherId = cipherId, - revisionDate = ZonedDateTime.now(clock), + revisionDate = clock.instant(), isUpdate = true, collectionIds = null, organizationId = null, @@ -3020,7 +3019,7 @@ class CipherManagerTest { val userId = "nonActiveUserId" val cipherId = "mockId-$number" val originalCipher = mockk { - every { revisionDate } returns ZonedDateTime.now(clock).minus(5, ChronoUnit.MINUTES) + every { revisionDate } returns clock.instant().minus(5, ChronoUnit.MINUTES) } val lastSyncTime = clock.instant() @@ -3034,7 +3033,7 @@ class CipherManagerTest { SyncCipherUpsertData( userId = userId, cipherId = cipherId, - revisionDate = ZonedDateTime.now(clock), + revisionDate = clock.instant(), isUpdate = true, collectionIds = null, organizationId = null, @@ -3081,7 +3080,7 @@ private val MOCK_PROFILE = AccountJson.Profile( kdfParallelism = null, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) private val MOCK_ACCOUNT = AccountJson( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/FolderManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/FolderManagerTest.kt index d6a2a332e2..85909d0a56 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/FolderManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/FolderManagerTest.kt @@ -43,9 +43,7 @@ import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant -import java.time.ZoneId import java.time.ZoneOffset -import java.time.ZonedDateTime import java.time.temporal.ChronoUnit class FolderManagerTest { @@ -167,7 +165,7 @@ class FolderManagerTest { val networkFolder = SyncResponseJson.Folder( id = "1", name = testFolderName, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = Instant.now(FIXED_CLOCK), ) coEvery { @@ -371,7 +369,7 @@ class FolderManagerTest { val networkFolder = SyncResponseJson.Folder( id = "1", name = testFolderName, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = Instant.now(FIXED_CLOCK), ) coEvery { @@ -440,7 +438,7 @@ class FolderManagerTest { SyncFolderUpsertData( userId = userId, folderId = folderId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), isUpdate = false, ), ) @@ -466,7 +464,7 @@ class FolderManagerTest { SyncFolderUpsertData( userId = userId, folderId = folderId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), isUpdate = true, ), ) @@ -493,9 +491,7 @@ class FolderManagerTest { SyncFolderUpsertData( userId = userId, folderId = folderId, - revisionDate = ZonedDateTime.ofInstant( - Instant.ofEpochSecond(0), ZoneId.of("UTC"), - ), + revisionDate = Instant.ofEpochSecond(0), isUpdate = true, ), ) @@ -526,7 +522,7 @@ class FolderManagerTest { SyncFolderUpsertData( userId = userId, folderId = folderId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), isUpdate = false, ), ) @@ -548,7 +544,7 @@ class FolderManagerTest { fakeAuthDiskSource.userState = MOCK_USER_STATE val folderView = createMockFolder( number = number, - revisionDate = ZonedDateTime.now(FIXED_CLOCK).minus(5, ChronoUnit.MINUTES), + revisionDate = FIXED_CLOCK.instant().minus(5, ChronoUnit.MINUTES), ) coEvery { vaultDiskSource.getFolders(userId = userId) @@ -561,7 +557,7 @@ class FolderManagerTest { SyncFolderUpsertData( userId = userId, folderId = folderId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), isUpdate = true, ), ) @@ -583,7 +579,7 @@ class FolderManagerTest { fakeAuthDiskSource.userState = MOCK_USER_STATE val folderView = createMockFolder( number = number, - revisionDate = ZonedDateTime.now(FIXED_CLOCK).minus(5, ChronoUnit.MINUTES), + revisionDate = FIXED_CLOCK.instant().minus(5, ChronoUnit.MINUTES), ) coEvery { vaultDiskSource.getFolders(userId = userId) @@ -593,7 +589,7 @@ class FolderManagerTest { SyncFolderUpsertData( userId = userId, folderId = folderId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), isUpdate = true, ), ) @@ -632,7 +628,7 @@ private val MOCK_PROFILE = AccountJson.Profile( kdfParallelism = null, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) private val MOCK_ACCOUNT = AccountJson( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/SendManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/SendManagerTest.kt index a2e76858e4..3a5c5d440a 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/SendManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/SendManagerTest.kt @@ -57,7 +57,6 @@ import java.io.File import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime import java.time.temporal.ChronoUnit @Suppress("LargeClass") @@ -135,7 +134,7 @@ class SendManagerTest { SyncSendUpsertData( userId = userId, sendId = sendId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), isUpdate = false, ), ) @@ -159,7 +158,7 @@ class SendManagerTest { SyncSendUpsertData( userId = userId, sendId = sendId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), isUpdate = true, ), ) @@ -179,7 +178,7 @@ class SendManagerTest { fakeAuthDiskSource.userState = MOCK_USER_STATE val send = createMockSend( number = number, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), ) val updatedSend = createMockSend(number = number) coEvery { vaultDiskSource.getSends(userId = userId) } returns MutableStateFlow(listOf(send)) @@ -190,7 +189,7 @@ class SendManagerTest { SyncSendUpsertData( userId = userId, sendId = sendId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK).minus(5, ChronoUnit.MINUTES), + revisionDate = FIXED_CLOCK.instant().minus(5, ChronoUnit.MINUTES), isUpdate = true, ), ) @@ -220,7 +219,7 @@ class SendManagerTest { val sendView = createMockSend( number = number, - revisionDate = ZonedDateTime.now(FIXED_CLOCK).minus(5, ChronoUnit.MINUTES), + revisionDate = FIXED_CLOCK.instant().minus(5, ChronoUnit.MINUTES), ) coEvery { vaultDiskSource.getSends(userId = userId) @@ -230,7 +229,7 @@ class SendManagerTest { SyncSendUpsertData( userId = userId, sendId = sendId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), isUpdate = true, ), ) @@ -261,7 +260,7 @@ class SendManagerTest { SyncSendUpsertData( userId = userId, sendId = sendId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), isUpdate = false, ), ) @@ -294,7 +293,7 @@ class SendManagerTest { SyncSendUpsertData( userId = userId, sendId = sendId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), isUpdate = false, ), ) @@ -316,7 +315,7 @@ class SendManagerTest { fakeAuthDiskSource.userState = MOCK_USER_STATE val sendView = createMockSend( number = number, - revisionDate = ZonedDateTime.now(FIXED_CLOCK).minus(5, ChronoUnit.MINUTES), + revisionDate = FIXED_CLOCK.instant().minus(5, ChronoUnit.MINUTES), ) coEvery { vaultDiskSource.getSends(userId = userId) @@ -330,7 +329,7 @@ class SendManagerTest { SyncSendUpsertData( userId = userId, sendId = sendId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), isUpdate = true, ), ) @@ -352,7 +351,7 @@ class SendManagerTest { fakeAuthDiskSource.userState = MOCK_USER_STATE val sendView = createMockSend( number = number, - revisionDate = ZonedDateTime.now(FIXED_CLOCK).minus(5, ChronoUnit.MINUTES), + revisionDate = FIXED_CLOCK.instant().minus(5, ChronoUnit.MINUTES), ) coEvery { vaultDiskSource.getSends(userId = userId) @@ -362,7 +361,7 @@ class SendManagerTest { SyncSendUpsertData( userId = userId, sendId = sendId, - revisionDate = ZonedDateTime.now(FIXED_CLOCK), + revisionDate = FIXED_CLOCK.instant(), isUpdate = true, ), ) @@ -972,7 +971,7 @@ private val MOCK_PROFILE = AccountJson.Profile( kdfParallelism = null, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) private val MOCK_ACCOUNT = AccountJson( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerTest.kt index 345ba71bfc..c7fe2e4f76 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerTest.kt @@ -63,7 +63,6 @@ import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime @OptIn(ExperimentalCoroutinesApi::class) @Suppress("LargeClass") @@ -2118,7 +2117,7 @@ private val MOCK_PROFILE = AccountJson.Profile( kdfParallelism = null, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) private val MOCK_ACCOUNT = AccountJson( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultMigrationManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultMigrationManagerTest.kt index b70eb2f2d0..335704bdb0 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultMigrationManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultMigrationManagerTest.kt @@ -47,7 +47,6 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test import java.time.Instant -import java.time.ZonedDateTime @Suppress("LargeClass") class VaultMigrationManagerTest { @@ -1222,7 +1221,7 @@ private val MOCK_USER_STATE = UserStateJson( kdfParallelism = null, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ), tokens = AccountTokensJson( accessToken = "accessToken", diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultSyncManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultSyncManagerTest.kt index 343e5849b7..84aeb6f0cf 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultSyncManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultSyncManagerTest.kt @@ -82,7 +82,6 @@ import java.net.UnknownHostException import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime import java.time.temporal.ChronoUnit @Suppress("LargeClass") @@ -1317,7 +1316,7 @@ private val MOCK_PROFILE = AccountJson.Profile( kdfParallelism = null, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) private val MOCK_ACCOUNT = AccountJson( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt index c339ccb1b0..b0c956a2c4 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt @@ -77,7 +77,6 @@ import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import java.security.GeneralSecurityException import java.time.Instant -import java.time.ZonedDateTime import javax.crypto.BadPaddingException import javax.crypto.Cipher @@ -1551,7 +1550,7 @@ private val MOCK_BASE_PROFILE = AccountJson.Profile( kdfParallelism = null, userDecryptionOptions = null, isTwoFactorEnabled = false, - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), ) private val MOCK_PROFILE = MOCK_BASE_PROFILE.copy( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/model/AccountJsonUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/model/AccountJsonUtil.kt index 3c1dd132d2..c5c103b916 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/model/AccountJsonUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/model/AccountJsonUtil.kt @@ -5,7 +5,7 @@ import com.bitwarden.network.model.UserDecryptionOptionsJson import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountJson import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountTokensJson import com.x8bit.bitwarden.data.auth.datasource.disk.model.ForcePasswordResetReason -import java.time.ZonedDateTime +import java.time.Instant /** * Creates a mock [AccountJson.Profile] for testing purposes. @@ -28,7 +28,7 @@ fun createMockAccountJsonProfile( kdfParallelism: Int? = null, userDecryptionOptions: UserDecryptionOptionsJson? = null, isTwoFactorEnabled: Boolean = false, - creationDate: ZonedDateTime = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate: Instant = Instant.parse("2024-09-13T01:00:00.00Z"), ): AccountJson.Profile = AccountJson.Profile( userId = userId, email = email, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensionsTest.kt index a29983e809..e9430db265 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensionsTest.kt @@ -43,10 +43,9 @@ import org.junit.jupiter.api.assertNull import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime /** - * Default date time used for [ZonedDateTime] properties of mock objects. + * Default date time used for [Instant] properties of mock objects. */ private const val DEFAULT_TIMESTAMP = "2023-10-27T12:00:00Z" private val FIXED_CLOCK: Clock = Clock.fixed( @@ -83,7 +82,7 @@ class VaultSdkCipherExtensionsTest { createMockCipherJsonRequest( number = 1, login = createMockLogin(number = 1, uri = null), - archivedDate = ZonedDateTime.ofInstant(FIXED_CLOCK.instant(), ZoneOffset.UTC), + archivedDate = FIXED_CLOCK.instant(), ), syncCipher, ) @@ -364,7 +363,7 @@ class VaultSdkCipherExtensionsTest { createMockCipherJsonRequest( number = 1, login = createMockLogin(number = 1, uri = null), - archivedDate = ZonedDateTime.ofInstant(FIXED_CLOCK.instant(), ZoneOffset.UTC), + archivedDate = FIXED_CLOCK.instant(), ), encryptionContext.toEncryptedNetworkCipher(), ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceViewModelTest.kt index f51b3dd711..e7638ed68b 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceViewModelTest.kt @@ -29,7 +29,7 @@ import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import java.time.ZonedDateTime +import java.time.Instant @Suppress("LargeClass") class LoginWithDeviceViewModelTest : BaseViewModelTest() { @@ -709,7 +709,7 @@ private val AUTH_REQUEST = AuthRequest( ipAddress = "192.168.0.1", key = "public", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalViewModelTest.kt index f9d647f3f8..a7c8d8818f 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalViewModelTest.kt @@ -40,7 +40,6 @@ import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime class LoginApprovalViewModelTest : BaseViewModelTest() { @@ -527,7 +526,7 @@ private val AUTH_REQUEST = AuthRequest( ipAddress = "1.0.0.1", key = "public", masterPasswordHash = PASSWORD_HASH, - creationDate = ZonedDateTime.parse("2024-09-13T00:00Z"), + creationDate = Instant.parse("2024-09-13T00:00:00Z"), responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsViewModelTest.kt index c76b271a7a..d07b0219ad 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsViewModelTest.kt @@ -31,8 +31,8 @@ import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime import java.time.format.FormatStyle +import java.time.temporal.ChronoUnit import java.time.temporal.TemporalAccessor class PendingRequestsViewModelTest : BaseViewModelTest() { @@ -95,9 +95,9 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { @Suppress("LongMethod") @Test fun `getPendingResults success with content should update state with some requests filtered`() { - val nowZonedDateTime = ZonedDateTime.now(fixedClock) + val nowInstant = fixedClock.instant() every { - nowZonedDateTime.toFormattedDateTimeStyle( + nowInstant.toFormattedDateTimeStyle( dateStyle = FormatStyle.SHORT, timeStyle = FormatStyle.SHORT, clock = fixedClock, @@ -111,7 +111,7 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { ipAddress = "192.168.0.1", key = "publicKey", masterPasswordHash = "verySecureHash", - creationDate = nowZonedDateTime, + creationDate = nowInstant, responseDate = null, requestApproved = false, originUrl = "www.bitwarden.com", @@ -124,7 +124,7 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { ipAddress = "192.168.0.1", key = "publicKey", masterPasswordHash = "verySecureHash", - creationDate = nowZonedDateTime, + creationDate = nowInstant, responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", @@ -137,7 +137,7 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { ipAddress = "192.168.0.2", key = "publicKey", masterPasswordHash = "verySecureHash", - creationDate = nowZonedDateTime.minusMinutes(10), + creationDate = nowInstant.minus(10, ChronoUnit.MINUTES), responseDate = null, requestApproved = false, originUrl = "www.bitwarden.com", @@ -150,8 +150,8 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { ipAddress = "192.168.0.1", key = "publicKey", masterPasswordHash = "verySecureHash", - creationDate = nowZonedDateTime, - responseDate = nowZonedDateTime, + creationDate = nowInstant, + responseDate = nowInstant, requestApproved = false, originUrl = "www.bitwarden.com", fingerprint = "fingerprint", @@ -263,7 +263,7 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { ipAddress = "192.168.0.2", key = "publicKey", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.now(fixedClock).minusMinutes(5), + creationDate = fixedClock.instant().minus(5, ChronoUnit.MINUTES), responseDate = null, requestApproved = false, originUrl = "www.bitwarden.com", @@ -276,7 +276,7 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { ipAddress = "192.168.0.3", key = "publicKey", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.now(fixedClock), + creationDate = fixedClock.instant(), responseDate = null, requestApproved = false, originUrl = "www.bitwarden.com", @@ -291,7 +291,7 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { ) } returns AuthRequestResult.Success( authRequest1.copy( - responseDate = ZonedDateTime.now(fixedClock), + responseDate = fixedClock.instant(), ), ) coEvery { @@ -303,7 +303,7 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { ) } returns AuthRequestResult.Success( authRequest2.copy( - responseDate = ZonedDateTime.now(fixedClock), + responseDate = fixedClock.instant(), ), ) val viewModel = createViewModel() @@ -330,18 +330,18 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { @Test fun `on LifecycleResume should update state`() = runTest { - val nowZonedDateTime = ZonedDateTime.now(fixedClock) - val fiveMinZonedDateTime = ZonedDateTime.now(fixedClock).minusMinutes(5) - val sixMinZonedDateTime = ZonedDateTime.now(fixedClock).minusMinutes(6) + val nowInstant = fixedClock.instant() + val fiveMinInstant = fixedClock.instant().minus(5, ChronoUnit.MINUTES) + val sixMinInstant = fixedClock.instant().minus(6, ChronoUnit.MINUTES) every { - nowZonedDateTime.toFormattedDateTimeStyle( + nowInstant.toFormattedDateTimeStyle( dateStyle = FormatStyle.SHORT, timeStyle = FormatStyle.SHORT, clock = fixedClock, ) } returns "10/27/23, 12:00 PM" every { - fiveMinZonedDateTime.toFormattedDateTimeStyle( + fiveMinInstant.toFormattedDateTimeStyle( dateStyle = FormatStyle.SHORT, timeStyle = FormatStyle.SHORT, clock = fixedClock, @@ -355,7 +355,7 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { ipAddress = "192.168.0.1", key = "publicKey", masterPasswordHash = "verySecureHash", - creationDate = sixMinZonedDateTime, + creationDate = sixMinInstant, responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", @@ -368,7 +368,7 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { ipAddress = "192.168.0.2", key = "publicKey", masterPasswordHash = "verySecureHash", - creationDate = fiveMinZonedDateTime, + creationDate = fiveMinInstant, responseDate = null, requestApproved = false, originUrl = "www.bitwarden.com", @@ -381,7 +381,7 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { ipAddress = "192.168.0.3", key = "publicKey", masterPasswordHash = "verySecureHash", - creationDate = nowZonedDateTime, + creationDate = nowInstant, responseDate = null, requestApproved = false, originUrl = "www.bitwarden.com", diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendScreenTest.kt index f2e404fb28..27f849fc22 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendScreenTest.kt @@ -50,7 +50,7 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.jupiter.api.Assertions.assertEquals -import java.time.ZonedDateTime +import java.time.Instant @Suppress("LargeClass") class AddEditSendScreenTest : BitwardenComposeTest() { @@ -1652,7 +1652,7 @@ private val DEFAULT_COMMON_STATE = AddEditSendState.ViewState.Content.Common( noteInput = "", isHideEmailChecked = false, isDeactivateChecked = false, - deletionDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + deletionDate = Instant.parse("2023-10-27T12:00:00Z"), expirationDate = null, sendUrl = null, hasPassword = true, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModelTest.kt index b8d97aea72..d720266a5a 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModelTest.kt @@ -67,7 +67,6 @@ import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime import java.util.UUID @Suppress("LargeClass") @@ -319,7 +318,6 @@ class AddEditSendViewModelTest : BaseViewModelTest() { val mockSendView = createMockSendView(number = 1) every { mockSendView.toViewState( - clock = clock, baseWebSendUrl = DEFAULT_ENVIRONMENT_URL, isHideEmailAddressEnabled = true, isSendEmailVerificationEnabled = false, @@ -364,7 +362,6 @@ class AddEditSendViewModelTest : BaseViewModelTest() { val errorMessage = "Failure" every { mockSendView.toViewState( - clock = clock, baseWebSendUrl = DEFAULT_ENVIRONMENT_URL, isHideEmailAddressEnabled = true, isSendEmailVerificationEnabled = false, @@ -609,7 +606,6 @@ class AddEditSendViewModelTest : BaseViewModelTest() { val mockSendView = createMockSendView(number = 1) every { mockSendView.toViewState( - clock = clock, baseWebSendUrl = DEFAULT_ENVIRONMENT_URL, isHideEmailAddressEnabled = true, isSendEmailVerificationEnabled = false, @@ -672,7 +668,6 @@ class AddEditSendViewModelTest : BaseViewModelTest() { val mockSendView = createMockSendView(number = 1) every { mockSendView.toViewState( - clock = clock, baseWebSendUrl = DEFAULT_ENVIRONMENT_URL, isHideEmailAddressEnabled = true, isSendEmailVerificationEnabled = false, @@ -719,7 +714,6 @@ class AddEditSendViewModelTest : BaseViewModelTest() { val mockSendView = createMockSendView(number = 1) every { mockSendView.toViewState( - clock = clock, baseWebSendUrl = DEFAULT_ENVIRONMENT_URL, isHideEmailAddressEnabled = true, isSendEmailVerificationEnabled = false, @@ -795,7 +789,6 @@ class AddEditSendViewModelTest : BaseViewModelTest() { val mockSendView = createMockSendView(number = 1) every { mockSendView.toViewState( - clock = clock, baseWebSendUrl = DEFAULT_ENVIRONMENT_URL, isHideEmailAddressEnabled = true, isSendEmailVerificationEnabled = false, @@ -864,7 +857,6 @@ class AddEditSendViewModelTest : BaseViewModelTest() { val mockSendView = createMockSendView(number = 1) every { mockSendView.toViewState( - clock = clock, baseWebSendUrl = DEFAULT_ENVIRONMENT_URL, isHideEmailAddressEnabled = true, isSendEmailVerificationEnabled = false, @@ -902,7 +894,7 @@ class AddEditSendViewModelTest : BaseViewModelTest() { @Test fun `DeletionDateChange should store the new deletion date`() { val viewModel = createViewModel() - val newDeletionDate = ZonedDateTime.parse("2024-09-13T00:00Z") + val newDeletionDate = Instant.parse("2024-09-13T00:00:00Z") // DEFAULT deletion date is "2023-11-03T00:00Z" assertEquals(DEFAULT_STATE, viewModel.stateFlow.value) @@ -1465,7 +1457,7 @@ private val DEFAULT_COMMON_STATE = AddEditSendState.ViewState.Content.Common( noteInput = "", isHideEmailChecked = false, isDeactivateChecked = false, - deletionDate = ZonedDateTime.parse("2023-11-03T12:00Z"), + deletionDate = Instant.parse("2023-11-03T12:00:00Z"), expirationDate = null, sendUrl = null, hasPassword = false, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/AddEditSendStateExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/AddEditSendStateExtensionsTest.kt index cf7c7f68e3..0d72ec5f8d 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/AddEditSendStateExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/AddEditSendStateExtensionsTest.kt @@ -13,7 +13,6 @@ import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime class AddEditSendStateExtensionsTest { @@ -72,15 +71,15 @@ class AddEditSendStateExtensionsTest { key = null, accessCount = 0U, hasPassword = false, - deletionDate = ZonedDateTime.parse("2030-10-27T12:00:00Z").toInstant(), - expirationDate = ZonedDateTime.parse("2030-10-27T12:00:00Z").toInstant(), + deletionDate = Instant.parse("2030-10-27T12:00:00Z"), + expirationDate = Instant.parse("2030-10-27T12:00:00Z"), ) val result = DEFAULT_VIEW_STATE .copy( common = DEFAULT_COMMON_STATE.copy( - deletionDate = ZonedDateTime.parse("2030-10-27T12:00:00Z"), - expirationDate = ZonedDateTime.parse("2026-10-27T12:00:00Z"), + deletionDate = Instant.parse("2030-10-27T12:00:00Z"), + expirationDate = Instant.parse("2026-10-27T12:00:00Z"), ), ) .toSendView(FIXED_CLOCK) @@ -153,8 +152,8 @@ private val DEFAULT_COMMON_STATE = AddEditSendState.ViewState.Content.Common( noteInput = "mockNotes-1", isHideEmailChecked = false, isDeactivateChecked = false, - deletionDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), - expirationDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + deletionDate = Instant.parse("2023-10-27T12:00:00Z"), + expirationDate = Instant.parse("2023-10-27T12:00:00Z"), sendUrl = null, hasPassword = false, isHideEmailAddressEnabled = true, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/SendViewExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/SendViewExtensionsTest.kt index 4a6409c95e..79504b0270 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/SendViewExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/util/SendViewExtensionsTest.kt @@ -6,10 +6,7 @@ import com.x8bit.bitwarden.ui.tools.feature.send.addedit.AddEditSendState import com.x8bit.bitwarden.ui.tools.feature.send.addedit.model.SendAuth import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -import java.time.Clock import java.time.Instant -import java.time.ZoneOffset -import java.time.ZonedDateTime class SendViewExtensionsTest { @@ -18,7 +15,6 @@ class SendViewExtensionsTest { val sendView = createMockSendView(number = 1, type = SendType.FILE) val result = sendView.toViewState( - clock = FIXED_CLOCK, baseWebSendUrl = "www.test.com/", isHideEmailAddressEnabled = true, isSendEmailVerificationEnabled = false, @@ -40,7 +36,6 @@ class SendViewExtensionsTest { val sendView = createMockSendView(number = 1, type = SendType.TEXT) val result = sendView.toViewState( - clock = FIXED_CLOCK, baseWebSendUrl = "www.test.com/", isHideEmailAddressEnabled = true, isSendEmailVerificationEnabled = false, @@ -59,11 +54,6 @@ class SendViewExtensionsTest { } } -private val FIXED_CLOCK: Clock = Clock.fixed( - Instant.parse("2023-10-27T12:00:00Z"), - ZoneOffset.UTC, -) - private val DEFAULT_COMMON: AddEditSendState.ViewState.Content.Common = AddEditSendState.ViewState.Content.Common( name = "mockName-1", @@ -73,14 +63,8 @@ private val DEFAULT_COMMON: AddEditSendState.ViewState.Content.Common = noteInput = "mockNotes-1", isHideEmailChecked = false, isDeactivateChecked = false, - deletionDate = ZonedDateTime.ofInstant( - Instant.parse("2023-10-27T12:00:00Z"), - ZoneOffset.UTC, - ), - expirationDate = ZonedDateTime.ofInstant( - Instant.parse("2023-10-27T12:00:00Z"), - ZoneOffset.UTC, - ), + deletionDate = Instant.parse("2023-10-27T12:00:00Z"), + expirationDate = Instant.parse("2023-10-27T12:00:00Z"), sendUrl = "www.test.com/mockAccessId-1/mockKey-1", hasPassword = true, isHideEmailAddressEnabled = true, diff --git a/core/src/main/kotlin/com/bitwarden/core/data/serializer/ZonedDateTimeSerializer.kt b/core/src/main/kotlin/com/bitwarden/core/data/serializer/InstantSerializer.kt similarity index 52% rename from core/src/main/kotlin/com/bitwarden/core/data/serializer/ZonedDateTimeSerializer.kt rename to core/src/main/kotlin/com/bitwarden/core/data/serializer/InstantSerializer.kt index 26766de584..72d49aa976 100644 --- a/core/src/main/kotlin/com/bitwarden/core/data/serializer/ZonedDateTimeSerializer.kt +++ b/core/src/main/kotlin/com/bitwarden/core/data/serializer/InstantSerializer.kt @@ -6,28 +6,31 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder +import java.time.Instant +import java.time.ZoneOffset import java.time.ZonedDateTime import java.time.format.DateTimeFormatter /** - * Used to serialize and deserialize [ZonedDateTime]. + * Used to serialize and deserialize [Instant]. */ -class ZonedDateTimeSerializer : KSerializer { +class InstantSerializer : KSerializer { private val dateTimeFormatterDeserialization = DateTimeFormatter .ofPattern("yyyy-MM-dd'T'HH:mm:ss[.][:][SSSSSSS][SSSSSS][SSSSS][SSSS][SSS][SS][S]XXX") - private val dateTimeFormatterSerialization = - DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX") + private val dateTimeFormatterSerialization: DateTimeFormatter = DateTimeFormatter + .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX") + .withZone(ZoneOffset.UTC) override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor(serialName = "ZonedDateTime", kind = PrimitiveKind.STRING) + get() = PrimitiveSerialDescriptor(serialName = "Instant", kind = PrimitiveKind.STRING) - override fun deserialize(decoder: Decoder): ZonedDateTime = - decoder.decodeString().let { dateString -> - ZonedDateTime.parse(dateString, dateTimeFormatterDeserialization) - } + override fun deserialize(decoder: Decoder): Instant = + ZonedDateTime + .parse(decoder.decodeString(), dateTimeFormatterDeserialization) + .toInstant() - override fun serialize(encoder: Encoder, value: ZonedDateTime) { + override fun serialize(encoder: Encoder, value: Instant) { encoder.encodeString(dateTimeFormatterSerialization.format(value)) } } diff --git a/core/src/main/kotlin/com/bitwarden/core/di/CoreModule.kt b/core/src/main/kotlin/com/bitwarden/core/di/CoreModule.kt index dcc4de45b5..1f41bf2eb3 100644 --- a/core/src/main/kotlin/com/bitwarden/core/di/CoreModule.kt +++ b/core/src/main/kotlin/com/bitwarden/core/di/CoreModule.kt @@ -1,6 +1,6 @@ package com.bitwarden.core.di -import com.bitwarden.core.data.serializer.ZonedDateTimeSerializer +import com.bitwarden.core.data.serializer.InstantSerializer import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -30,7 +30,7 @@ object CoreModule { // We allow for nullable values to have keys missing in the JSON response. explicitNulls = false serializersModule = SerializersModule { - contextual(ZonedDateTimeSerializer()) + contextual(InstantSerializer()) } // Respect model default property values. diff --git a/core/src/main/kotlin/com/bitwarden/core/util/InstantExtensions.kt b/core/src/main/kotlin/com/bitwarden/core/util/InstantExtensions.kt new file mode 100644 index 0000000000..25525745df --- /dev/null +++ b/core/src/main/kotlin/com/bitwarden/core/util/InstantExtensions.kt @@ -0,0 +1,16 @@ +package com.bitwarden.core.util + +import java.time.Clock +import java.time.Duration +import java.time.Instant + +/** + * Returns a [Boolean] indicating whether this [Instant] is five or more minutes old. + */ +@Suppress("MagicNumber") +fun Instant.isOverFiveMinutesOld( + clock: Clock = Clock.systemDefaultZone(), +): Boolean = + Duration + .between(this, clock.instant()) + .toMinutes() > 5 diff --git a/core/src/main/kotlin/com/bitwarden/core/util/ZonedDateTimeUtils.kt b/core/src/main/kotlin/com/bitwarden/core/util/InstantUtils.kt similarity index 65% rename from core/src/main/kotlin/com/bitwarden/core/util/ZonedDateTimeUtils.kt rename to core/src/main/kotlin/com/bitwarden/core/util/InstantUtils.kt index e1db4a03c5..d7d8ef2946 100644 --- a/core/src/main/kotlin/com/bitwarden/core/util/ZonedDateTimeUtils.kt +++ b/core/src/main/kotlin/com/bitwarden/core/util/InstantUtils.kt @@ -1,8 +1,6 @@ package com.bitwarden.core.util import java.time.Instant -import java.time.ZoneOffset -import java.time.ZonedDateTime private const val NANOS_PER_TICK = 100L private const val TICKS_PER_SECOND = 1000000000L / NANOS_PER_TICK @@ -13,32 +11,31 @@ private const val TICKS_PER_SECOND = 1000000000L / NANOS_PER_TICK private const val YEAR_OFFSET = -62135596800L /** - * Returns the [ZonedDateTime] of the binary [Long] [value]. This is needed to remain consistent + * Returns the [Instant] of the binary [Long] [value]. This is needed to remain consistent * with how `DateTime`s were stored when using C#. * * This functionality is based on the https://stackoverflow.com/questions/65315060/how-to-convert-net-datetime-tobinary-to-java-date */ @Suppress("MagicNumber") -fun getZoneDateTimeFromBinaryLong(value: Long): ZonedDateTime { +fun getInstantFromBinaryLong(value: Long): Instant { // Shift the bits to eliminate the "Kind" property since we know it was stored as UTC and leave // us with ticks val ticks = value and (1L shl 62) - 1 - val instant = Instant.ofEpochSecond( + return Instant.ofEpochSecond( ticks / TICKS_PER_SECOND + YEAR_OFFSET, ticks % TICKS_PER_SECOND * NANOS_PER_TICK, ) - return ZonedDateTime.ofInstant(instant, ZoneOffset.UTC) } /** - * Returns the [ZonedDateTime] [value] converted to a binary [Long]. This is needed to remain + * Returns the [Instant] [value] converted to a binary [Long]. This is needed to remain * consistent with how `DateTime`s were stored when using C#. * * This functionality is based on the https://stackoverflow.com/questions/65315060/how-to-convert-net-datetime-tobinary-to-java-date */ @Suppress("MagicNumber") -fun getBinaryLongFromZoneDateTime(value: ZonedDateTime): Long { +fun getBinaryLongFromInstant(value: Instant): Long { val nanoAdjustment = value.nano / NANOS_PER_TICK - val ticks = (value.toEpochSecond() - YEAR_OFFSET) * TICKS_PER_SECOND + nanoAdjustment + val ticks = (value.epochSecond - YEAR_OFFSET) * TICKS_PER_SECOND + nanoAdjustment return 1L shl 62 or ticks } diff --git a/core/src/main/kotlin/com/bitwarden/core/util/ZonedDateTimeExtensions.kt b/core/src/main/kotlin/com/bitwarden/core/util/ZonedDateTimeExtensions.kt deleted file mode 100644 index 30221133c9..0000000000 --- a/core/src/main/kotlin/com/bitwarden/core/util/ZonedDateTimeExtensions.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.bitwarden.core.util - -import java.time.Clock -import java.time.Duration -import java.time.ZonedDateTime - -/** - * Returns a [Boolean] indicating whether this [ZonedDateTime] is five or more minutes old. - */ -@Suppress("MagicNumber") -fun ZonedDateTime.isOverFiveMinutesOld( - clock: Clock = Clock.systemDefaultZone(), -): Boolean = - Duration - .between(this.toInstant(), clock.instant()) - .toMinutes() > 5 diff --git a/core/src/test/kotlin/com/bitwarden/core/data/serializer/InstantSerializerTest.kt b/core/src/test/kotlin/com/bitwarden/core/data/serializer/InstantSerializerTest.kt new file mode 100644 index 0000000000..9890f9bbc7 --- /dev/null +++ b/core/src/test/kotlin/com/bitwarden/core/data/serializer/InstantSerializerTest.kt @@ -0,0 +1,70 @@ +package com.bitwarden.core.data.serializer + +import com.bitwarden.core.di.CoreModule +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.encodeToJsonElement +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test +import java.time.Instant + +class InstantSerializerTest { + private val json = CoreModule.providesJson() + + @Test + fun `properly deserializes raw JSON to Instant`() { + assertEquals( + InstantData( + dataAsInstant = Instant.ofEpochSecond(1_696_612_948L, 440_000_000L), + ), + json.decodeFromString( + """ + { + "dataAsInstant": "2023-10-06T17:22:28.44Z" + } + """, + ), + ) + } + + @Test + fun `properly deserializes raw JSON with nano seconds to Instant`() { + assertEquals( + InstantData( + dataAsInstant = Instant.ofEpochSecond(1_690_906_383L, 502_391_000L), + ), + json.decodeFromString( + """ + { + "dataAsInstant": "2023-08-01T16:13:03.502391Z" + } + """, + ), + ) + } + + @Test + fun `properly serializes external model back to raw JSON`() { + assertEquals( + json.parseToJsonElement( + """ + { + "dataAsInstant": "2023-10-06T17:22:28.440Z" + } + """, + ), + json.encodeToJsonElement( + InstantData( + dataAsInstant = Instant.ofEpochSecond(1_696_612_948L, 440_000_000L), + ), + ), + ) + } +} + +@Serializable +private data class InstantData( + @Serializable(InstantSerializer::class) + @SerialName("dataAsInstant") + val dataAsInstant: Instant, +) diff --git a/core/src/test/kotlin/com/bitwarden/core/data/serializer/ZonedDateTimeSerializerTest.kt b/core/src/test/kotlin/com/bitwarden/core/data/serializer/ZonedDateTimeSerializerTest.kt index 536f4d5704..126baf2ad4 100644 --- a/core/src/test/kotlin/com/bitwarden/core/data/serializer/ZonedDateTimeSerializerTest.kt +++ b/core/src/test/kotlin/com/bitwarden/core/data/serializer/ZonedDateTimeSerializerTest.kt @@ -1,99 +1 @@ package com.bitwarden.core.data.serializer - -import com.bitwarden.core.di.CoreModule -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable -import kotlinx.serialization.json.encodeToJsonElement -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Test -import java.time.ZoneId -import java.time.ZoneOffset -import java.time.ZonedDateTime - -class ZonedDateTimeSerializerTest { - private val json = CoreModule.providesJson() - - @Test - fun `properly deserializes raw JSON to ZonedDateTime`() { - assertEquals( - ZonedDateTimeData( - dataAsZonedDateTime = ZonedDateTime.of( - 2023, - 10, - 6, - 17, - 22, - 28, - 440000000, - ZoneOffset.UTC, - ), - ), - json.decodeFromString( - """ - { - "dataAsZonedDateTime": "2023-10-06T17:22:28.44Z" - } - """, - ), - ) - } - - @Test - fun `properly deserializes raw JSON with nano seconds to ZonedDateTime`() { - assertEquals( - ZonedDateTimeData( - dataAsZonedDateTime = ZonedDateTime.of( - 2023, - 8, - 1, - 16, - 13, - 3, - 502391000, - ZoneOffset.UTC, - ), - ), - json.decodeFromString( - """ - { - "dataAsZonedDateTime": "2023-08-01T16:13:03.502391Z" - } - """, - ), - ) - } - - @Test - fun `properly serializes external model back to raw JSON`() { - assertEquals( - json.parseToJsonElement( - """ - { - "dataAsZonedDateTime": "2023-10-06T17:22:28.440Z" - } - """, - ), - json.encodeToJsonElement( - ZonedDateTimeData( - dataAsZonedDateTime = ZonedDateTime.of( - 2023, - 10, - 6, - 17, - 22, - 28, - 440000000, - ZoneId.of("UTC"), - ), - ), - ), - ) - } -} - -@Serializable -private data class ZonedDateTimeData( - @Serializable(ZonedDateTimeSerializer::class) - @SerialName("dataAsZonedDateTime") - val dataAsZonedDateTime: ZonedDateTime, -) diff --git a/core/src/test/kotlin/com/bitwarden/core/util/ZonedDateTimeExtensionsTest.kt b/core/src/test/kotlin/com/bitwarden/core/util/InstantExtensionsTest.kt similarity index 75% rename from core/src/test/kotlin/com/bitwarden/core/util/ZonedDateTimeExtensionsTest.kt rename to core/src/test/kotlin/com/bitwarden/core/util/InstantExtensionsTest.kt index 1f4f1bc85b..bb8750d370 100644 --- a/core/src/test/kotlin/com/bitwarden/core/util/ZonedDateTimeExtensionsTest.kt +++ b/core/src/test/kotlin/com/bitwarden/core/util/InstantExtensionsTest.kt @@ -6,9 +6,8 @@ import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime -class ZonedDateTimeExtensionsTest { +class InstantExtensionsTest { private val fixedClock: Clock = Clock.fixed( Instant.parse("2023-10-27T12:00:00Z"), @@ -17,25 +16,25 @@ class ZonedDateTimeExtensionsTest { @Test fun `isOverFiveMinutesOld returns true when time is old`() { - val time = ZonedDateTime.parse("2022-09-13T00:00Z") + val time = Instant.parse("2022-09-13T00:00:00Z") assertTrue(time.isOverFiveMinutesOld(fixedClock)) } @Test fun `isOverFiveMinutesOld returns false when time is now`() { - val time = ZonedDateTime.parse("2023-10-27T11:55:00Z") + val time = Instant.parse("2023-10-27T11:55:00Z") assertFalse(time.isOverFiveMinutesOld(fixedClock)) } @Test fun `isOverFiveMinutesOld returns false when time is now minus 5 minutes`() { - val time = ZonedDateTime.now(fixedClock).minusMinutes(5) + val time = fixedClock.instant().minusSeconds(300) assertFalse(time.isOverFiveMinutesOld(fixedClock)) } @Test fun `isOverFiveMinutesOld returns true when time is now minus 6 minutes`() { - val time = ZonedDateTime.now(fixedClock).minusMinutes(6) + val time = fixedClock.instant().minusSeconds(360) assertTrue(time.isOverFiveMinutesOld(fixedClock)) } } diff --git a/core/src/test/kotlin/com/bitwarden/core/util/InstantUtilsTest.kt b/core/src/test/kotlin/com/bitwarden/core/util/InstantUtilsTest.kt new file mode 100644 index 0000000000..5a6bad7a61 --- /dev/null +++ b/core/src/test/kotlin/com/bitwarden/core/util/InstantUtilsTest.kt @@ -0,0 +1,25 @@ +package com.bitwarden.core.util + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test +import java.time.Instant + +class InstantUtilsTest { + @Test + fun `getInstantFromBinaryLong should correctly convert a Long to an Instant`() { + val binaryLong = 5250087787086431044L + val expectedInstant = Instant.parse("2024-01-06T22:27:45.904314Z") + assertEquals(expectedInstant, getInstantFromBinaryLong(binaryLong)) + + val a = getInstantFromBinaryLong(binaryLong) + val b = getBinaryLongFromInstant(a) + assertEquals(binaryLong, b) + } + + @Test + fun `getBinaryLongFromInstant should correctly convert an Instant to a Long`() { + val instant = Instant.parse("2024-01-06T22:27:45.904314Z") + val expectedBinaryLong = 5250087787086431044L + assertEquals(expectedBinaryLong, getBinaryLongFromInstant(instant)) + } +} diff --git a/core/src/test/kotlin/com/bitwarden/core/util/ZonedDateTimeUtilsTest.kt b/core/src/test/kotlin/com/bitwarden/core/util/ZonedDateTimeUtilsTest.kt deleted file mode 100644 index c89cda5b5b..0000000000 --- a/core/src/test/kotlin/com/bitwarden/core/util/ZonedDateTimeUtilsTest.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.bitwarden.core.util - -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Test -import java.time.ZonedDateTime - -class ZonedDateTimeUtilsTest { - @Test - fun `getZoneDateTimeFromBinaryLong should correctly convert a Long to a ZonedDateTime`() { - val binaryLong = 5250087787086431044L - val expectedDateTime = ZonedDateTime.parse("2024-01-06T22:27:45.904314Z") - assertEquals(expectedDateTime, getZoneDateTimeFromBinaryLong(binaryLong)) - - val a = getZoneDateTimeFromBinaryLong(binaryLong) - val b = getBinaryLongFromZoneDateTime(a) - assertEquals(binaryLong, b) - } - - @Test - fun `getBinaryLongFromZoneDateTime should correctly convert a ZonedDateTime to a Long`() { - val dateTime = ZonedDateTime.parse("2024-01-06T22:27:45.904314Z") - val expectedBinaryLong = 5250087787086431044L - assertEquals(expectedBinaryLong, getBinaryLongFromZoneDateTime(dateTime)) - } -} diff --git a/network/src/main/kotlin/com/bitwarden/network/BitwardenServiceClientImpl.kt b/network/src/main/kotlin/com/bitwarden/network/BitwardenServiceClientImpl.kt index b766fc074e..b7027ce640 100644 --- a/network/src/main/kotlin/com/bitwarden/network/BitwardenServiceClientImpl.kt +++ b/network/src/main/kotlin/com/bitwarden/network/BitwardenServiceClientImpl.kt @@ -1,7 +1,7 @@ package com.bitwarden.network import com.bitwarden.annotation.OmitFromCoverage -import com.bitwarden.core.data.serializer.ZonedDateTimeSerializer +import com.bitwarden.core.data.serializer.InstantSerializer import com.bitwarden.network.interceptor.AuthTokenManager import com.bitwarden.network.interceptor.BaseUrlInterceptors import com.bitwarden.network.interceptor.CookieInterceptor @@ -71,7 +71,7 @@ internal class BitwardenServiceClientImpl( // We allow for nullable values to have keys missing in the JSON response. explicitNulls = false serializersModule = SerializersModule { - contextual(ZonedDateTimeSerializer()) + contextual(InstantSerializer()) } // Respect model default property values. diff --git a/network/src/main/kotlin/com/bitwarden/network/model/AuthRequestsResponseJson.kt b/network/src/main/kotlin/com/bitwarden/network/model/AuthRequestsResponseJson.kt index e9fdc01ffc..6c6e612b4b 100644 --- a/network/src/main/kotlin/com/bitwarden/network/model/AuthRequestsResponseJson.kt +++ b/network/src/main/kotlin/com/bitwarden/network/model/AuthRequestsResponseJson.kt @@ -3,7 +3,7 @@ package com.bitwarden.network.model import kotlinx.serialization.Contextual import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import java.time.ZonedDateTime +import java.time.Instant /** * Response body for authentication requests used for Login with device. @@ -50,11 +50,11 @@ data class AuthRequestsResponseJson( @SerialName("creationDate") @Contextual - val creationDate: ZonedDateTime, + val creationDate: Instant, @SerialName("responseDate") @Contextual - val responseDate: ZonedDateTime?, + val responseDate: Instant?, @SerialName("requestApproved") val requestApproved: Boolean?, diff --git a/network/src/main/kotlin/com/bitwarden/network/model/CipherJsonRequest.kt b/network/src/main/kotlin/com/bitwarden/network/model/CipherJsonRequest.kt index 04f5c21fe3..b82cf0d3c0 100644 --- a/network/src/main/kotlin/com/bitwarden/network/model/CipherJsonRequest.kt +++ b/network/src/main/kotlin/com/bitwarden/network/model/CipherJsonRequest.kt @@ -3,7 +3,7 @@ package com.bitwarden.network.model import kotlinx.serialization.Contextual import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import java.time.ZonedDateTime +import java.time.Instant /** * Represents a cipher request. @@ -42,7 +42,7 @@ data class CipherJsonRequest( @SerialName("lastKnownRevisionDate") @Contextual - val lastKnownRevisionDate: ZonedDateTime?, + val lastKnownRevisionDate: Instant?, @SerialName("type") val type: CipherTypeJson, @@ -82,7 +82,7 @@ data class CipherJsonRequest( @SerialName("archivedDate") @Contextual - val archivedDate: ZonedDateTime?, + val archivedDate: Instant?, @SerialName("encryptedFor") val encryptedFor: String?, diff --git a/network/src/main/kotlin/com/bitwarden/network/model/CipherMiniResponseJson.kt b/network/src/main/kotlin/com/bitwarden/network/model/CipherMiniResponseJson.kt index 25ce821613..702e3311e8 100644 --- a/network/src/main/kotlin/com/bitwarden/network/model/CipherMiniResponseJson.kt +++ b/network/src/main/kotlin/com/bitwarden/network/model/CipherMiniResponseJson.kt @@ -3,7 +3,7 @@ package com.bitwarden.network.model import kotlinx.serialization.Contextual import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import java.time.ZonedDateTime +import java.time.Instant /** * Represents a minimal cipher response from the API, typically returned from bulk operations. @@ -52,15 +52,15 @@ data class CipherMiniResponseJson( @SerialName("revisionDate") @Contextual - val revisionDate: ZonedDateTime, + val revisionDate: Instant, @SerialName("creationDate") @Contextual - val creationDate: ZonedDateTime, + val creationDate: Instant, @SerialName("deletedDate") @Contextual - val deletedDate: ZonedDateTime?, + val deletedDate: Instant?, @SerialName("reprompt") val reprompt: CipherRepromptTypeJson, @@ -70,6 +70,6 @@ data class CipherMiniResponseJson( @SerialName("archivedDate") @Contextual - val archivedDate: ZonedDateTime?, + val archivedDate: Instant?, ) } diff --git a/network/src/main/kotlin/com/bitwarden/network/model/CipherWithIdJsonRequest.kt b/network/src/main/kotlin/com/bitwarden/network/model/CipherWithIdJsonRequest.kt index 6649900331..177e35a4f9 100644 --- a/network/src/main/kotlin/com/bitwarden/network/model/CipherWithIdJsonRequest.kt +++ b/network/src/main/kotlin/com/bitwarden/network/model/CipherWithIdJsonRequest.kt @@ -3,7 +3,7 @@ package com.bitwarden.network.model import kotlinx.serialization.Contextual import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import java.time.ZonedDateTime +import java.time.Instant /** * Represents a cipher request with an ID, typically used in bulk operations @@ -31,7 +31,7 @@ data class CipherWithIdJsonRequest( @SerialName("lastKnownRevisionDate") @Contextual - val lastKnownRevisionDate: ZonedDateTime?, + val lastKnownRevisionDate: Instant?, @SerialName("type") val type: CipherTypeJson, diff --git a/network/src/main/kotlin/com/bitwarden/network/model/OrganizationEventJson.kt b/network/src/main/kotlin/com/bitwarden/network/model/OrganizationEventJson.kt index cf2e113170..86e07fdb97 100644 --- a/network/src/main/kotlin/com/bitwarden/network/model/OrganizationEventJson.kt +++ b/network/src/main/kotlin/com/bitwarden/network/model/OrganizationEventJson.kt @@ -3,7 +3,7 @@ package com.bitwarden.network.model import kotlinx.serialization.Contextual import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import java.time.ZonedDateTime +import java.time.Instant /** * Represents an individual organization event including the type and time. @@ -12,6 +12,6 @@ import java.time.ZonedDateTime data class OrganizationEventJson( @SerialName("type") val type: OrganizationEventType, @SerialName("cipherId") val cipherId: String?, - @SerialName("date") @Contextual val date: ZonedDateTime, + @SerialName("date") @Contextual val date: Instant, @SerialName("organizationId") val organizationId: String?, ) diff --git a/network/src/main/kotlin/com/bitwarden/network/model/SendJsonRequest.kt b/network/src/main/kotlin/com/bitwarden/network/model/SendJsonRequest.kt index 18d2e2c2c0..98479ca477 100644 --- a/network/src/main/kotlin/com/bitwarden/network/model/SendJsonRequest.kt +++ b/network/src/main/kotlin/com/bitwarden/network/model/SendJsonRequest.kt @@ -3,7 +3,7 @@ package com.bitwarden.network.model import kotlinx.serialization.Contextual import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import java.time.ZonedDateTime +import java.time.Instant /** * Represents a send request. @@ -46,11 +46,11 @@ data class SendJsonRequest( @SerialName("expirationDate") @Contextual - val expirationDate: ZonedDateTime?, + val expirationDate: Instant?, @SerialName("deletionDate") @Contextual - val deletionDate: ZonedDateTime, + val deletionDate: Instant, @SerialName("fileLength") val fileLength: Long?, diff --git a/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt b/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt index 4a6fefed0b..06249dfda3 100644 --- a/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt +++ b/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt @@ -6,7 +6,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.json.JsonNames import kotlinx.serialization.json.JsonObject -import java.time.ZonedDateTime +import java.time.Instant private const val DEFAULT_FIDO_2_KEY_TYPE = "public-key" private const val DEFAULT_FIDO_2_KEY_ALGORITHM = "ECDSA" @@ -98,7 +98,7 @@ data class SyncResponseJson( data class Folder( @SerialName("revisionDate") @Contextual - val revisionDate: ZonedDateTime, + val revisionDate: Instant, @SerialName("name") val name: String?, @@ -136,7 +136,7 @@ data class SyncResponseJson( @SerialName("revisionDate") @Contextual - val revisionDate: ZonedDateTime?, + val revisionDate: Instant?, ) /** @@ -230,7 +230,7 @@ data class SyncResponseJson( @SerialName("creationDate") @Contextual - val creationDate: ZonedDateTime, + val creationDate: Instant, ) { /** * Represents an organization in the vault response. @@ -348,7 +348,7 @@ data class SyncResponseJson( @SerialName("familySponsorshipLastSyncDate") @Contextual - val familySponsorshipLastSyncDate: ZonedDateTime?, + val familySponsorshipLastSyncDate: Instant?, @SerialName("name") val name: String?, @@ -358,7 +358,7 @@ data class SyncResponseJson( @SerialName("familySponsorshipValidUntil") @Contextual - val familySponsorshipValidUntil: ZonedDateTime?, + val familySponsorshipValidUntil: Instant?, @SerialName("status") val status: OrganizationStatusType, @@ -484,7 +484,7 @@ data class SyncResponseJson( @SerialName("revisionDate") @Contextual - val revisionDate: ZonedDateTime, + val revisionDate: Instant, @SerialName("type") val type: CipherTypeJson, @@ -494,7 +494,7 @@ data class SyncResponseJson( @SerialName("creationDate") @Contextual - val creationDate: ZonedDateTime, + val creationDate: Instant, @SerialName("secureNote") val secureNote: SecureNote?, @@ -507,7 +507,7 @@ data class SyncResponseJson( @SerialName("deletedDate") @Contextual - val deletedDate: ZonedDateTime?, + val deletedDate: Instant?, @SerialName("identity") val identity: Identity?, @@ -544,7 +544,7 @@ data class SyncResponseJson( @SerialName("archivedDate") @Contextual - val archivedDate: ZonedDateTime?, + val archivedDate: Instant?, ) { /** * Represents an attachment in the vault response. @@ -735,7 +735,7 @@ data class SyncResponseJson( @SerialName("passwordRevisionDate") @Contextual - val passwordRevisionDate: ZonedDateTime?, + val passwordRevisionDate: Instant?, @SerialName("autofillOnPageLoad") val shouldAutofillOnPageLoad: Boolean?, @@ -800,7 +800,7 @@ data class SyncResponseJson( @SerialName("lastUsedDate") @Contextual - val lastUsedDate: ZonedDateTime, + val lastUsedDate: Instant, ) /** @@ -886,7 +886,7 @@ data class SyncResponseJson( @SerialName("creationDate") @Contextual - val creationDate: ZonedDateTime, + val creationDate: Instant, ) } @@ -924,7 +924,7 @@ data class SyncResponseJson( @SerialName("revisionDate") @Contextual - val revisionDate: ZonedDateTime, + val revisionDate: Instant, @SerialName("maxAccessCount") val maxAccessCount: Int?, @@ -952,7 +952,7 @@ data class SyncResponseJson( @SerialName("deletionDate") @Contextual - val deletionDate: ZonedDateTime, + val deletionDate: Instant, @SerialName("name") val name: String?, @@ -971,7 +971,7 @@ data class SyncResponseJson( @SerialName("expirationDate") @Contextual - val expirationDate: ZonedDateTime?, + val expirationDate: Instant?, ) { /** * Represents a file in the vault response. diff --git a/network/src/main/kotlin/com/bitwarden/network/model/TrustedDeviceKeysResponseJson.kt b/network/src/main/kotlin/com/bitwarden/network/model/TrustedDeviceKeysResponseJson.kt index 6c64f1dd1c..addaa20c9f 100644 --- a/network/src/main/kotlin/com/bitwarden/network/model/TrustedDeviceKeysResponseJson.kt +++ b/network/src/main/kotlin/com/bitwarden/network/model/TrustedDeviceKeysResponseJson.kt @@ -3,7 +3,7 @@ package com.bitwarden.network.model import kotlinx.serialization.Contextual import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import java.time.ZonedDateTime +import java.time.Instant /** * The response body for trusting a device. @@ -14,5 +14,5 @@ data class TrustedDeviceKeysResponseJson( @SerialName("name") val name: String, @SerialName("identifier") val identifier: String, @SerialName("type") val type: Int, - @Contextual @SerialName("creationDate") val creationDate: ZonedDateTime, + @Contextual @SerialName("creationDate") val creationDate: Instant, ) diff --git a/network/src/main/kotlin/com/bitwarden/network/service/AccountsServiceImpl.kt b/network/src/main/kotlin/com/bitwarden/network/service/AccountsServiceImpl.kt index 438cacd917..54a89b9528 100644 --- a/network/src/main/kotlin/com/bitwarden/network/service/AccountsServiceImpl.kt +++ b/network/src/main/kotlin/com/bitwarden/network/service/AccountsServiceImpl.kt @@ -32,7 +32,7 @@ import kotlinx.serialization.json.Json * The default implementation of the [AccountsService]. */ @Suppress("TooManyFunctions") -internal class AccountsServiceImpl( +internal class AccountsServiceImpl constructor( private val unauthenticatedAccountsApi: UnauthenticatedAccountsApi, private val authenticatedAccountsApi: AuthenticatedAccountsApi, private val unauthenticatedKeyConnectorApi: UnauthenticatedKeyConnectorApi, diff --git a/network/src/main/kotlin/com/bitwarden/network/service/CiphersServiceImpl.kt b/network/src/main/kotlin/com/bitwarden/network/service/CiphersServiceImpl.kt index 7ab8a40e58..bc764a8fca 100644 --- a/network/src/main/kotlin/com/bitwarden/network/service/CiphersServiceImpl.kt +++ b/network/src/main/kotlin/com/bitwarden/network/service/CiphersServiceImpl.kt @@ -29,7 +29,6 @@ import okhttp3.RequestBody.Companion.asRequestBody import java.io.File import java.time.Clock import java.time.ZoneOffset -import java.time.ZonedDateTime import java.time.format.DateTimeFormatter @Suppress("TooManyFunctions") @@ -130,7 +129,8 @@ internal class CiphersServiceImpl( url = attachment.url, date = DateTimeFormatter .RFC_1123_DATE_TIME - .format(ZonedDateTime.ofInstant(clock.instant(), ZoneOffset.UTC)), + .withZone(ZoneOffset.UTC) + .format(clock.instant()), version = attachment.url.toUri().getQueryParameter("sv"), body = encryptedFile.asRequestBody(), ) diff --git a/network/src/main/kotlin/com/bitwarden/network/service/SendsServiceImpl.kt b/network/src/main/kotlin/com/bitwarden/network/service/SendsServiceImpl.kt index 063c8099f3..22bb3d3484 100644 --- a/network/src/main/kotlin/com/bitwarden/network/service/SendsServiceImpl.kt +++ b/network/src/main/kotlin/com/bitwarden/network/service/SendsServiceImpl.kt @@ -21,7 +21,6 @@ import okhttp3.RequestBody.Companion.asRequestBody import java.io.File import java.time.Clock import java.time.ZoneOffset -import java.time.ZonedDateTime import java.time.format.DateTimeFormatter /** @@ -119,7 +118,8 @@ internal class SendsServiceImpl( url = sendFileResponse.url, date = DateTimeFormatter .RFC_1123_DATE_TIME - .format(ZonedDateTime.ofInstant(clock.instant(), ZoneOffset.UTC)), + .withZone(ZoneOffset.UTC) + .format(clock.instant()), version = sendFileResponse.url.toUri().getQueryParameter("sv"), body = encryptedFile.asRequestBody(), ) diff --git a/network/src/test/kotlin/com/bitwarden/network/service/AuthRequestsServiceTest.kt b/network/src/test/kotlin/com/bitwarden/network/service/AuthRequestsServiceTest.kt index af42bf9074..950a9233d4 100644 --- a/network/src/test/kotlin/com/bitwarden/network/service/AuthRequestsServiceTest.kt +++ b/network/src/test/kotlin/com/bitwarden/network/service/AuthRequestsServiceTest.kt @@ -10,7 +10,7 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test import retrofit2.create -import java.time.ZonedDateTime +import java.time.Instant class AuthRequestsServiceTest : BaseServiceTest() { @@ -116,7 +116,7 @@ private val AUTH_REQUEST_RESPONSE = AuthRequestsResponseJson.AuthRequest( ipAddress = "1.0.0.1", key = "key", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", diff --git a/network/src/test/kotlin/com/bitwarden/network/service/DevicesServiceTest.kt b/network/src/test/kotlin/com/bitwarden/network/service/DevicesServiceTest.kt index 54335cd3b2..4115f0d769 100644 --- a/network/src/test/kotlin/com/bitwarden/network/service/DevicesServiceTest.kt +++ b/network/src/test/kotlin/com/bitwarden/network/service/DevicesServiceTest.kt @@ -11,7 +11,7 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test import retrofit2.create -import java.time.ZonedDateTime +import java.time.Instant class DevicesServiceTest : BaseServiceTest() { @@ -71,7 +71,7 @@ private val TRUST_DEVICE_RESPONSE: TrustedDeviceKeysResponseJson = name = "Pixel 8", identifier = "ea7c0a13-5ce4-4f96-8e17-4fc7fa54f464", type = 0, - creationDate = ZonedDateTime.parse("2024-03-25T18:04:28.23Z"), + creationDate = Instant.parse("2024-03-25T18:04:28.23Z"), ) private const val TRUST_DEVICE_RESPONSE_JSON: String = """ diff --git a/network/src/test/kotlin/com/bitwarden/network/service/EventServiceTest.kt b/network/src/test/kotlin/com/bitwarden/network/service/EventServiceTest.kt index 5453835f3b..c8c1e530c9 100644 --- a/network/src/test/kotlin/com/bitwarden/network/service/EventServiceTest.kt +++ b/network/src/test/kotlin/com/bitwarden/network/service/EventServiceTest.kt @@ -12,7 +12,6 @@ import retrofit2.create import java.time.Clock import java.time.Instant import java.time.ZoneOffset -import java.time.ZonedDateTime class EventServiceTest : BaseServiceTest() { private val fixedClock: Clock = Clock.fixed( @@ -34,7 +33,7 @@ class EventServiceTest : BaseServiceTest() { OrganizationEventJson( type = OrganizationEventType.CIPHER_CREATED, cipherId = "cipher-id", - date = ZonedDateTime.now(fixedClock), + date = Instant.now(fixedClock), organizationId = null, ), ), diff --git a/network/src/test/kotlin/com/bitwarden/network/service/FoldersServiceTest.kt b/network/src/test/kotlin/com/bitwarden/network/service/FoldersServiceTest.kt index b5b065f2f2..349980bef4 100644 --- a/network/src/test/kotlin/com/bitwarden/network/service/FoldersServiceTest.kt +++ b/network/src/test/kotlin/com/bitwarden/network/service/FoldersServiceTest.kt @@ -10,7 +10,7 @@ import okhttp3.mockwebserver.MockResponse import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import retrofit2.create -import java.time.ZonedDateTime +import java.time.Instant class FoldersServiceTest : BaseServiceTest() { private val folderApi: FoldersApi = retrofit.create() @@ -89,7 +89,7 @@ private const val DEFAULT_NAME = "TestName" private val DEFAULT_FOLDER = SyncResponseJson.Folder( id = DEFAULT_ID, name = DEFAULT_NAME, - revisionDate = ZonedDateTime.parse("2024-01-24T22:40:17.1559611Z"), + revisionDate = Instant.parse("2024-01-24T22:40:17.1559611Z"), ) private const val CREATE_UPDATE_FOLDER_SUCCESS_JSON = """ diff --git a/network/src/test/kotlin/com/bitwarden/network/service/NewAuthRequestServiceTest.kt b/network/src/test/kotlin/com/bitwarden/network/service/NewAuthRequestServiceTest.kt index ec185e42f6..86b7d8745d 100644 --- a/network/src/test/kotlin/com/bitwarden/network/service/NewAuthRequestServiceTest.kt +++ b/network/src/test/kotlin/com/bitwarden/network/service/NewAuthRequestServiceTest.kt @@ -12,7 +12,7 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test import retrofit2.create -import java.time.ZonedDateTime +import java.time.Instant class NewAuthRequestServiceTest : BaseServiceTest() { @@ -213,7 +213,7 @@ private val AUTH_REQUEST_RESPONSE = AuthRequestsResponseJson.AuthRequest( ipAddress = "1.0.0.1", key = "key", masterPasswordHash = "verySecureHash", - creationDate = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate = Instant.parse("2024-09-13T01:00:00.00Z"), responseDate = null, requestApproved = true, originUrl = "www.bitwarden.com", diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/CipherJsonRequestUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/CipherJsonRequestUtil.kt index 7f7acd3b45..847e8bd9fd 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/CipherJsonRequestUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/CipherJsonRequestUtil.kt @@ -1,6 +1,6 @@ package com.bitwarden.network.model -import java.time.ZonedDateTime +import java.time.Instant /** * Create a mock [CipherJsonRequest] with a given [number]. @@ -27,9 +27,9 @@ fun createMockCipherJsonRequest( createMockPasswordHistory(number = number), ), reprompt: CipherRepromptTypeJson = CipherRepromptTypeJson.NONE, - lastKnownRevisionDate: ZonedDateTime? = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + lastKnownRevisionDate: Instant? = Instant.parse("2023-10-27T12:00:00Z"), key: String? = "mockKey-$number", - archivedDate: ZonedDateTime? = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + archivedDate: Instant? = Instant.parse("2023-10-27T12:00:00Z"), encryptedFor: String? = "mockEncryptedFor-$number", ): CipherJsonRequest = CipherJsonRequest( diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/CipherMiniResponseJsonUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/CipherMiniResponseJsonUtil.kt index b87b08c942..662ce7933f 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/CipherMiniResponseJsonUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/CipherMiniResponseJsonUtil.kt @@ -1,6 +1,6 @@ package com.bitwarden.network.model -import java.time.ZonedDateTime +import java.time.Instant /** * Create a mock [CipherMiniResponseJson.CipherMiniResponse] for testing. @@ -14,8 +14,8 @@ fun createMockCipherMiniResponse( data = "mockData-$number", attachments = null, shouldOrganizationUseTotp = false, - revisionDate = ZonedDateTime.parse("2023-10-27T12:00:00.000Z"), - creationDate = ZonedDateTime.parse("2023-10-27T12:00:00.000Z"), + revisionDate = Instant.parse("2023-10-27T12:00:00.000Z"), + creationDate = Instant.parse("2023-10-27T12:00:00.000Z"), deletedDate = null, reprompt = CipherRepromptTypeJson.NONE, key = "mockKey-$number", diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SendJsonRequestUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SendJsonRequestUtil.kt index 2a83e3d72d..7cbd2d8ee6 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SendJsonRequestUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SendJsonRequestUtil.kt @@ -1,6 +1,6 @@ package com.bitwarden.network.model -import java.time.ZonedDateTime +import java.time.Instant /** * Create a mock [SendJsonRequest] with a given [number]. @@ -13,8 +13,8 @@ fun createMockSendJsonRequest( type: SendTypeJson = SendTypeJson.FILE, key: String = "mockKey-$number", maxAccessCount: Int? = 1, - expirationDate: ZonedDateTime? = ZonedDateTime.parse("2023-10-27T12:00:00Z"), - deletionDate: ZonedDateTime = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + expirationDate: Instant? = Instant.parse("2023-10-27T12:00:00Z"), + deletionDate: Instant = Instant.parse("2023-10-27T12:00:00Z"), fileLength: Long? = 1, file: SyncResponseJson.Send.File? = createMockFile(number = number), text: SyncResponseJson.Send.Text? = createMockText(number = number), diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseCipherUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseCipherUtil.kt index 83b024770d..3bfe9c9ea0 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseCipherUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseCipherUtil.kt @@ -2,12 +2,12 @@ package com.bitwarden.network.model -import java.time.ZonedDateTime +import java.time.Instant /** - * Constant date time used for [ZonedDateTime] properties of mock objects. + * Constant date time used for [Instant] properties of mock objects. */ -private val MOCK_ZONED_DATE_TIME = ZonedDateTime.parse("2023-10-27T12:00:00Z") +private val MOCK_INSTANT = Instant.parse("2023-10-27T12:00:00Z") /** * Create a mock [SyncResponseJson.Cipher] with a given [number]. @@ -20,10 +20,10 @@ fun createMockCipher( collectionIds: List? = listOf("mockCollectionId-$number"), name: String? = "mockName-$number", notes: String? = "mockNotes-$number", - creationDate: ZonedDateTime = MOCK_ZONED_DATE_TIME, - revisionDate: ZonedDateTime = MOCK_ZONED_DATE_TIME, - deletedDate: ZonedDateTime? = MOCK_ZONED_DATE_TIME, - archivedDate: ZonedDateTime? = MOCK_ZONED_DATE_TIME, + creationDate: Instant = MOCK_INSTANT, + revisionDate: Instant = MOCK_INSTANT, + deletedDate: Instant? = MOCK_INSTANT, + archivedDate: Instant? = MOCK_INSTANT, attachments: List? = listOf( createMockAttachment(number = number), ), @@ -169,7 +169,7 @@ fun createMockCard( fun createMockPasswordHistory( number: Int, password: String = "mockPassword-$number", - lastUsedDate: ZonedDateTime = MOCK_ZONED_DATE_TIME, + lastUsedDate: Instant = MOCK_INSTANT, ): SyncResponseJson.Cipher.PasswordHistory = SyncResponseJson.Cipher.PasswordHistory( password = password, @@ -222,7 +222,7 @@ fun createMockLogin( number: Int, username: String? = "mockUsername-$number", password: String? = "mockPassword-$number", - passwordRevisionDate: ZonedDateTime? = MOCK_ZONED_DATE_TIME, + passwordRevisionDate: Instant? = MOCK_INSTANT, shouldAutofillOnPageLoad: Boolean? = false, uri: String? = "mockUri-$number", uris: List = listOf(createMockUri(number = number)), @@ -274,7 +274,7 @@ fun createMockFido2Credential( userDisplayName: String? = "mockUserDisplayName-$number", counter: String = "mockCounter-$number", discoverable: String = "mockDiscoverable-$number", - creationDate: ZonedDateTime = MOCK_ZONED_DATE_TIME, + creationDate: Instant = MOCK_INSTANT, ): SyncResponseJson.Cipher.Fido2Credential = SyncResponseJson.Cipher.Fido2Credential( credentialId = credentialId, diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseFolderUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseFolderUtil.kt index c6cb6bd772..3062322089 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseFolderUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseFolderUtil.kt @@ -1,6 +1,6 @@ package com.bitwarden.network.model -import java.time.ZonedDateTime +import java.time.Instant /** * Create a mock [SyncResponseJson.Folder] with a given [number]. @@ -9,7 +9,7 @@ fun createMockFolder( number: Int, id: String = "mockId-$number", name: String? = "mockName-$number", - revisionDate: ZonedDateTime = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + revisionDate: Instant = Instant.parse("2023-10-27T12:00:00Z"), ): SyncResponseJson.Folder = SyncResponseJson.Folder( id = id, diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponsePolicyUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponsePolicyUtil.kt index 9e595bfdf3..92af381ea2 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponsePolicyUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponsePolicyUtil.kt @@ -1,7 +1,7 @@ package com.bitwarden.network.model import kotlinx.serialization.json.JsonObject -import java.time.ZonedDateTime +import java.time.Instant /** * Create a mock [SyncResponseJson.Policy] with the given [number], [type], and [data]. @@ -14,7 +14,7 @@ fun createMockPolicy( type: PolicyTypeJson = PolicyTypeJson.MASTER_PASSWORD, isEnabled: Boolean = false, data: JsonObject? = null, - revisionDate: ZonedDateTime? = null, + revisionDate: Instant? = null, ): SyncResponseJson.Policy = SyncResponseJson.Policy( organizationId = organizationId, diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt index f6c52e91e9..c4c44eadc2 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt @@ -2,7 +2,7 @@ package com.bitwarden.network.model -import java.time.ZonedDateTime +import java.time.Instant /** * Create a mock [SyncResponseJson.Profile] with a given [number]. @@ -34,7 +34,7 @@ fun createMockProfile( providers: List? = listOf( createMockProvider(number = number), ), - creationDate: ZonedDateTime = ZonedDateTime.parse("2024-09-13T01:00:00.00Z"), + creationDate: Instant = Instant.parse("2024-09-13T01:00:00.00Z"), ): SyncResponseJson.Profile = SyncResponseJson.Profile( providerOrganizations = providerOrganizations, @@ -89,10 +89,10 @@ fun createMockOrganizationNetwork( shouldUseEvents: Boolean = false, familySponsorshipFriendlyName: String? = "mockFamilySponsorshipFriendlyName-$number", shouldUseTotp: Boolean = false, - familySponsorshipLastSyncDate: ZonedDateTime? = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + familySponsorshipLastSyncDate: Instant? = Instant.parse("2023-10-27T12:00:00Z"), name: String? = "mockName-$number", shouldUseApi: Boolean = false, - familySponsorshipValidUntil: ZonedDateTime? = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + familySponsorshipValidUntil: Instant? = Instant.parse("2023-10-27T12:00:00Z"), status: OrganizationStatusType = OrganizationStatusType.ACCEPTED, userIsClaimedByOrganization: Boolean = false, limitItemDeletion: Boolean = false, diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseSendUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseSendUtil.kt index 495c96f3e7..b7b5cfaea6 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseSendUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseSendUtil.kt @@ -1,6 +1,6 @@ package com.bitwarden.network.model -import java.time.ZonedDateTime +import java.time.Instant /** * Create a mock [CreateFileSendResponseJson] with a given data. @@ -26,19 +26,19 @@ fun createMockSend( accessCount: Int = 1, maxAccessCount: Int? = 1, notes: String? = "mockNotes-$number", - revisionDate: ZonedDateTime = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + revisionDate: Instant = Instant.parse("2023-10-27T12:00:00Z"), shouldHideEmail: Boolean = false, type: SendTypeJson = SendTypeJson.FILE, accessId: String? = "mockAccessId-$number", password: String? = "mockPassword-$number", file: SyncResponseJson.Send.File? = createMockFile(number = number), - deletionDate: ZonedDateTime = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + deletionDate: Instant = Instant.parse("2023-10-27T12:00:00Z"), name: String? = "mockName-$number", isDisabled: Boolean = false, id: String = "mockId-$number", text: SyncResponseJson.Send.Text? = createMockText(number = number), key: String? = "mockKey-$number", - expirationDate: ZonedDateTime? = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + expirationDate: Instant? = Instant.parse("2023-10-27T12:00:00Z"), authTypeJson: SendAuthTypeJson = SendAuthTypeJson.PASSWORD, emails: String? = null, ): SyncResponseJson.Send =