diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/di/PlatformNetworkModule.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/di/PlatformNetworkModule.kt index a0e3f469ff..d08b9eba6e 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/di/PlatformNetworkModule.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/di/PlatformNetworkModule.kt @@ -6,7 +6,7 @@ import com.x8bit.bitwarden.data.platform.datasource.network.interceptor.BaseUrlI import com.x8bit.bitwarden.data.platform.datasource.network.interceptor.HeadersInterceptor import com.x8bit.bitwarden.data.platform.datasource.network.retrofit.Retrofits import com.x8bit.bitwarden.data.platform.datasource.network.retrofit.RetrofitsImpl -import com.x8bit.bitwarden.data.platform.datasource.network.serializer.LocalDateTimeSerializer +import com.x8bit.bitwarden.data.platform.datasource.network.serializer.ZonedDateTimeSerializer import com.x8bit.bitwarden.data.platform.datasource.network.service.ConfigService import com.x8bit.bitwarden.data.platform.datasource.network.service.ConfigServiceImpl import dagger.Module @@ -16,8 +16,8 @@ import dagger.hilt.components.SingletonComponent import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json import kotlinx.serialization.modules.SerializersModule +import kotlinx.serialization.modules.contextual import retrofit2.create -import java.time.LocalDateTime import javax.inject.Singleton /** @@ -76,7 +76,7 @@ object PlatformNetworkModule { // We allow for nullable values to have keys missing in the JSON response. explicitNulls = false serializersModule = SerializersModule { - contextual(LocalDateTime::class, LocalDateTimeSerializer()) + contextual(ZonedDateTimeSerializer()) } } } diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/LocalDateTimeSerializer.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/ZonedDateTimeSerializer.kt similarity index 63% rename from app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/LocalDateTimeSerializer.kt rename to app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/ZonedDateTimeSerializer.kt index f66a97c186..0e9938caf8 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/LocalDateTimeSerializer.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/ZonedDateTimeSerializer.kt @@ -6,26 +6,28 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder -import java.time.LocalDateTime +import java.time.ZonedDateTime import java.time.format.DateTimeFormatter /** - * Used to serialize and deserialize [LocalDateTime]. + * Used to serialize and deserialize [ZonedDateTime]. */ -class LocalDateTimeSerializer : KSerializer { +class ZonedDateTimeSerializer : KSerializer { private val dateTimeFormatterDeserialization = DateTimeFormatter - .ofPattern("yyyy-MM-dd'T'HH:mm:ss[.][:][SSSSSSS][SSSSSS][SSSSS][SSSS][SSS][SS][S]'Z'") - private val dateTimeFormatterSerialization = - DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor(serialName = "LocalDateTime", kind = PrimitiveKind.STRING) + .ofPattern("yyyy-MM-dd'T'HH:mm:ss[.][:][SSSSSSS][SSSSSS][SSSSS][SSSS][SSS][SS][S]X") - override fun deserialize(decoder: Decoder): LocalDateTime = + private val dateTimeFormatterSerialization = + DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX") + + override val descriptor: SerialDescriptor + get() = PrimitiveSerialDescriptor(serialName = "ZonedDateTime", kind = PrimitiveKind.STRING) + + override fun deserialize(decoder: Decoder): ZonedDateTime = decoder.decodeString().let { dateString -> - LocalDateTime.parse(dateString, dateTimeFormatterDeserialization) + ZonedDateTime.parse(dateString, dateTimeFormatterDeserialization) } - override fun serialize(encoder: Encoder, value: LocalDateTime) { + override fun serialize(encoder: Encoder, value: ZonedDateTime) { encoder.encodeString(dateTimeFormatterSerialization.format(value)) } } diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/CipherJsonRequest.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/CipherJsonRequest.kt index 64d5583ac8..934dd99478 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/CipherJsonRequest.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/CipherJsonRequest.kt @@ -3,7 +3,7 @@ package com.x8bit.bitwarden.data.vault.datasource.network.model import kotlinx.serialization.Contextual import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import java.time.LocalDateTime +import java.time.ZonedDateTime /** * Represents a cipher request. @@ -36,7 +36,7 @@ data class CipherJsonRequest( @SerialName("lastKnownRevisionDate") @Contextual - val lastKnownRevisionDate: LocalDateTime?, + val lastKnownRevisionDate: ZonedDateTime?, @SerialName("type") val type: CipherTypeJson, diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseJson.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseJson.kt index dee3d39ee1..557e04f233 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseJson.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseJson.kt @@ -3,7 +3,7 @@ package com.x8bit.bitwarden.data.vault.datasource.network.model import kotlinx.serialization.Contextual import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import java.time.LocalDateTime +import java.time.ZonedDateTime /** * Represents the response model for vault data fetched from the server. @@ -85,7 +85,7 @@ data class SyncResponseJson( data class Folder( @SerialName("revisionDate") @Contextual - val revisionDate: LocalDateTime, + val revisionDate: ZonedDateTime, @SerialName("name") val name: String?, @@ -361,7 +361,7 @@ data class SyncResponseJson( @SerialName("familySponsorshipLastSyncDate") @Contextual - val familySponsorshipLastSyncDate: LocalDateTime?, + val familySponsorshipLastSyncDate: ZonedDateTime?, @SerialName("useScim") val shouldUseScim: Boolean, @@ -377,7 +377,7 @@ data class SyncResponseJson( @SerialName("familySponsorshipValidUntil") @Contextual - val familySponsorshipValidUntil: LocalDateTime?, + val familySponsorshipValidUntil: ZonedDateTime?, @SerialName("status") val status: Int, @@ -539,7 +539,7 @@ data class SyncResponseJson( @SerialName("revisionDate") @Contextual - val revisionDate: LocalDateTime, + val revisionDate: ZonedDateTime, @SerialName("type") val type: CipherTypeJson, @@ -549,7 +549,7 @@ data class SyncResponseJson( @SerialName("creationDate") @Contextual - val creationDate: LocalDateTime, + val creationDate: ZonedDateTime, @SerialName("secureNote") val secureNote: SecureNote?, @@ -562,7 +562,7 @@ data class SyncResponseJson( @SerialName("deletedDate") @Contextual - val deletedDate: LocalDateTime?, + val deletedDate: ZonedDateTime?, @SerialName("identity") val identity: Identity?, @@ -779,7 +779,7 @@ data class SyncResponseJson( @SerialName("passwordRevisionDate") @Contextual - val passwordRevisionDate: LocalDateTime?, + val passwordRevisionDate: ZonedDateTime?, @SerialName("autofillOnPageLoad") val shouldAutofillOnPageLoad: Boolean?, @@ -819,7 +819,7 @@ data class SyncResponseJson( @SerialName("lastUsedDate") @Contextual - val lastUsedDate: LocalDateTime, + val lastUsedDate: ZonedDateTime, ) /** @@ -864,7 +864,7 @@ data class SyncResponseJson( @SerialName("revisionDate") @Contextual - val revisionDate: LocalDateTime, + val revisionDate: ZonedDateTime, @SerialName("maxAccessCount") val maxAccessCount: Int?, @@ -886,7 +886,7 @@ data class SyncResponseJson( @SerialName("deletionDate") @Contextual - val deletionDate: LocalDateTime, + val deletionDate: ZonedDateTime, @SerialName("name") val name: String?, @@ -905,7 +905,7 @@ data class SyncResponseJson( @SerialName("expirationDate") @Contextual - val expirationDate: LocalDateTime?, + val expirationDate: ZonedDateTime?, ) { /** * Represents a file in the vault response. diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt index 42a40ac8a1..f3c831f5bd 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt @@ -24,8 +24,8 @@ import com.x8bit.bitwarden.data.vault.datasource.network.model.LinkedIdTypeJson import com.x8bit.bitwarden.data.vault.datasource.network.model.SecureNoteTypeJson import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson import com.x8bit.bitwarden.data.vault.datasource.network.model.UriMatchTypeJson -import java.time.LocalDateTime import java.time.ZoneOffset +import java.time.ZonedDateTime /** * Converts a Bitwarden SDK [Cipher] object to a corresponding @@ -36,7 +36,7 @@ fun Cipher.toEncryptedNetworkCipher(): CipherJsonRequest = notes = notes, reprompt = reprompt.toNetworkRepromptType(), passwordHistory = passwordHistory?.toEncryptedNetworkPasswordHistoryList(), - lastKnownRevisionDate = LocalDateTime.ofInstant(revisionDate, ZoneOffset.UTC), + lastKnownRevisionDate = ZonedDateTime.ofInstant(revisionDate, ZoneOffset.UTC), type = type.toNetworkCipherType(), login = login?.toEncryptedNetworkLogin(), secureNote = secureNote?.toEncryptedNetworkSecureNote(), @@ -171,7 +171,7 @@ private fun Login.toEncryptedNetworkLogin(): SyncResponseJson.Cipher.Login = totp = totp, password = password, passwordRevisionDate = passwordRevisionDate?.let { - LocalDateTime.ofInstant(it, ZoneOffset.UTC) + ZonedDateTime.ofInstant(it, ZoneOffset.UTC) }, shouldAutofillOnPageLoad = autofillOnPageLoad, uri = uris?.firstOrNull()?.uri, @@ -194,7 +194,7 @@ private fun List.toEncryptedNetworkPasswordHistoryList(): List< private fun PasswordHistory.toEncryptedNetworkPasswordHistory(): SyncResponseJson.Cipher.PasswordHistory = SyncResponseJson.Cipher.PasswordHistory( password = password, - lastUsedDate = LocalDateTime.ofInstant(lastUsedDate, ZoneOffset.UTC), + lastUsedDate = ZonedDateTime.ofInstant(lastUsedDate, ZoneOffset.UTC), ) /** @@ -253,9 +253,9 @@ fun SyncResponseJson.Cipher.toEncryptedSdkCipher(): Cipher = attachments = attachments?.toSdkAttachmentList(), fields = fields?.toSdkFieldList(), passwordHistory = passwordHistory?.toSdkPasswordHistoryList(), - creationDate = creationDate.toInstant(ZoneOffset.UTC), - deletedDate = deletedDate?.toInstant(ZoneOffset.UTC), - revisionDate = revisionDate.toInstant(ZoneOffset.UTC), + creationDate = creationDate.toInstant(), + deletedDate = deletedDate?.toInstant(), + revisionDate = revisionDate.toInstant(), ) /** @@ -265,7 +265,7 @@ fun SyncResponseJson.Cipher.Login.toSdkLogin(): Login = Login( username = username, password = password, - passwordRevisionDate = passwordRevisionDate?.toInstant(ZoneOffset.UTC), + passwordRevisionDate = passwordRevisionDate?.toInstant(), uris = uris?.toSdkLoginUriList(), totp = totp, autofillOnPageLoad = shouldAutofillOnPageLoad, @@ -392,7 +392,7 @@ fun List.toSdkPasswordHistoryList(): Li fun SyncResponseJson.Cipher.PasswordHistory.toSdkPasswordHistory(): PasswordHistory = PasswordHistory( password = password, - lastUsedDate = lastUsedDate.toInstant(ZoneOffset.UTC), + lastUsedDate = lastUsedDate.toInstant(), ) /** diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkFolderExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkFolderExtensions.kt index 5fbf086f5f..f0339a41f5 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkFolderExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkFolderExtensions.kt @@ -2,7 +2,6 @@ package com.x8bit.bitwarden.data.vault.repository.util import com.bitwarden.core.Folder import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson -import java.time.ZoneOffset /** * Converts a list of [SyncResponseJson.Folder] objects to a list of corresponding @@ -19,5 +18,5 @@ fun SyncResponseJson.Folder.toEncryptedSdkFolder(): Folder = Folder( id = id, name = name.orEmpty(), - revisionDate = revisionDate.toInstant(ZoneOffset.UTC), + revisionDate = revisionDate.toInstant(), ) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkSendExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkSendExtensions.kt index b0ea95e8e4..e91846e65a 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkSendExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkSendExtensions.kt @@ -6,7 +6,6 @@ import com.bitwarden.core.SendText import com.bitwarden.core.SendType import com.x8bit.bitwarden.data.vault.datasource.network.model.SendTypeJson import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson -import java.time.ZoneOffset /** * Converts a list of [SyncResponseJson.Send] objects to a list of corresponding @@ -34,9 +33,9 @@ fun SyncResponseJson.Send.toEncryptedSdkSend(): Send = accessCount = accessCount.toUInt(), disabled = isDisabled, hideEmail = shouldHideEmail, - revisionDate = revisionDate.toInstant(ZoneOffset.UTC), - deletionDate = deletionDate.toInstant(ZoneOffset.UTC), - expirationDate = expirationDate?.toInstant(ZoneOffset.UTC), + revisionDate = revisionDate.toInstant(), + deletionDate = deletionDate.toInstant(), + expirationDate = expirationDate?.toInstant(), ) /** diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/LocalDateTimeSerializerTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/ZonedDateTimeSerializerTest.kt similarity index 54% rename from app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/LocalDateTimeSerializerTest.kt rename to app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/ZonedDateTimeSerializerTest.kt index f0e3da8988..0715c1d2bb 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/LocalDateTimeSerializerTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/network/serializer/ZonedDateTimeSerializerTest.kt @@ -1,25 +1,23 @@ package com.x8bit.bitwarden.data.platform.datasource.network.serializer +import com.x8bit.bitwarden.data.platform.datasource.network.di.PlatformNetworkModule +import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import kotlinx.serialization.json.Json import kotlinx.serialization.json.encodeToJsonElement -import kotlinx.serialization.modules.SerializersModule import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -import java.time.LocalDateTime +import java.time.ZoneId +import java.time.ZoneOffset +import java.time.ZonedDateTime -class LocalDateTimeSerializerTest { - private val json = Json { - serializersModule = SerializersModule { - contextual(LocalDateTime::class, LocalDateTimeSerializer()) - } - } +class ZonedDateTimeSerializerTest { + private val json = PlatformNetworkModule.providesJson() @Test - fun `properly deserializes raw JSON to LocalDate`() { + fun `properly deserializes raw JSON to ZonedDateTime`() { assertEquals( - LocalDateTimeData( - dataAsLocalDateTime = LocalDateTime.of( + ZonedDateTimeData( + dataAsZonedDateTime = ZonedDateTime.of( 2023, 10, 6, @@ -27,12 +25,13 @@ class LocalDateTimeSerializerTest { 22, 28, 440000000, + ZoneOffset.UTC, ), ), - json.decodeFromString( + json.decodeFromString( """ { - "dataAsLocalDateTime": "2023-10-06T17:22:28.44Z" + "dataAsZonedDateTime": "2023-10-06T17:22:28.44Z" } """, ), @@ -40,10 +39,10 @@ class LocalDateTimeSerializerTest { } @Test - fun `properly deserializes raw JSON with nano seconds to LocalDate`() { + fun `properly deserializes raw JSON with nano seconds to ZonedDateTime`() { assertEquals( - LocalDateTimeData( - dataAsLocalDateTime = LocalDateTime.of( + ZonedDateTimeData( + dataAsZonedDateTime = ZonedDateTime.of( 2023, 8, 1, @@ -51,12 +50,13 @@ class LocalDateTimeSerializerTest { 13, 3, 502391000, + ZoneOffset.UTC, ), ), - json.decodeFromString( + json.decodeFromString( """ { - "dataAsLocalDateTime": "2023-08-01T16:13:03.502391Z" + "dataAsZonedDateTime": "2023-08-01T16:13:03.502391Z" } """, ), @@ -69,13 +69,13 @@ class LocalDateTimeSerializerTest { json.parseToJsonElement( """ { - "dataAsLocalDateTime": "2023-10-06T17:22:28.440Z" + "dataAsZonedDateTime": "2023-10-06T17:22:28.440Z" } """, ), json.encodeToJsonElement( - LocalDateTimeData( - dataAsLocalDateTime = LocalDateTime.of( + ZonedDateTimeData( + dataAsZonedDateTime = ZonedDateTime.of( 2023, 10, 6, @@ -83,6 +83,7 @@ class LocalDateTimeSerializerTest { 22, 28, 440000000, + ZoneId.of("UTC"), ), ), ), @@ -91,7 +92,8 @@ class LocalDateTimeSerializerTest { } @Serializable -private data class LocalDateTimeData( - @Serializable(LocalDateTimeSerializer::class) - val dataAsLocalDateTime: LocalDateTime, +private data class ZonedDateTimeData( + @Serializable(ZonedDateTimeSerializer::class) + @SerialName("dataAsZonedDateTime") + val dataAsZonedDateTime: ZonedDateTime, ) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/CipherJsonRequestUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/CipherJsonRequestUtil.kt index 213ddd381f..71db01a16a 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/CipherJsonRequestUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/CipherJsonRequestUtil.kt @@ -1,6 +1,6 @@ package com.x8bit.bitwarden.data.vault.datasource.network.model -import java.time.LocalDateTime +import java.time.ZonedDateTime /** * Create a mock [CipherJsonRequest] with a given [number]. @@ -20,5 +20,5 @@ fun createMockCipherJsonRequest(number: Int): CipherJsonRequest = passwordHistory = listOf(createMockPasswordHistory(number = number)), reprompt = CipherRepromptTypeJson.NONE, secureNote = createMockSecureNote(), - lastKnownRevisionDate = LocalDateTime.parse("2023-10-27T12:00:00"), + lastKnownRevisionDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), ) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseCipherUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseCipherUtil.kt index 839d89b755..5aad8e36fc 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseCipherUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseCipherUtil.kt @@ -1,6 +1,6 @@ package com.x8bit.bitwarden.data.vault.datasource.network.model -import java.time.LocalDateTime +import java.time.ZonedDateTime /** * Create a mock [SyncResponseJson.Cipher] with a given [number]. @@ -15,9 +15,9 @@ fun createMockCipher(number: Int): SyncResponseJson.Cipher = notes = "mockNotes-$number", type = CipherTypeJson.LOGIN, login = createMockLogin(number = number), - creationDate = LocalDateTime.parse("2023-10-27T12:00:00"), - deletedDate = LocalDateTime.parse("2023-10-27T12:00:00"), - revisionDate = LocalDateTime.parse("2023-10-27T12:00:00"), + creationDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + deletedDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), + revisionDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), attachments = listOf(createMockAttachment(number = number)), card = createMockCard(number = number), fields = listOf(createMockField(number = number)), @@ -89,7 +89,7 @@ fun createMockCard(number: Int): SyncResponseJson.Cipher.Card = fun createMockPasswordHistory(number: Int): SyncResponseJson.Cipher.PasswordHistory = SyncResponseJson.Cipher.PasswordHistory( password = "mockPassword-$number", - lastUsedDate = LocalDateTime.parse("2023-10-27T12:00:00"), + lastUsedDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), ) /** @@ -118,7 +118,7 @@ fun createMockLogin(number: Int): SyncResponseJson.Cipher.Login = SyncResponseJson.Cipher.Login( username = "mockUsername-$number", password = "mockPassword-$number", - passwordRevisionDate = LocalDateTime.parse("2023-10-27T12:00:00"), + passwordRevisionDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), shouldAutofillOnPageLoad = false, uri = "mockUri-$number", uris = listOf(createMockUri(number = number)), diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseFolderUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseFolderUtil.kt index 14f2c9a2d9..8bfa9a87bd 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseFolderUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseFolderUtil.kt @@ -1,6 +1,6 @@ package com.x8bit.bitwarden.data.vault.datasource.network.model -import java.time.LocalDateTime +import java.time.ZonedDateTime /** * Create a mock [SyncResponseJson.Folder] with a given [number]. @@ -9,5 +9,5 @@ fun createMockFolder(number: Int): SyncResponseJson.Folder = SyncResponseJson.Folder( id = "mockId-$number", name = "mockName-$number", - revisionDate = LocalDateTime.parse("2023-10-27T12:00:00"), + revisionDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), ) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseProfileUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseProfileUtil.kt index 6e2bef5a7d..82c014f094 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseProfileUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseProfileUtil.kt @@ -1,6 +1,6 @@ package com.x8bit.bitwarden.data.vault.datasource.network.model -import java.time.LocalDateTime +import java.time.ZonedDateTime /** * Create a mock [SyncResponseJson.Profile] with a given [number]. @@ -68,12 +68,12 @@ fun createMockOrganization(number: Int): SyncResponseJson.Profile.Organization = familySponsorshipFriendlyName = "mockFamilySponsorshipFriendlyName-$number", isKeyConnectorEnabled = false, shouldUseTotp = false, - familySponsorshipLastSyncDate = LocalDateTime.parse("2023-10-27T12:00:00"), + familySponsorshipLastSyncDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), shouldUseScim = false, name = "mockName-$number", shouldUseApi = false, isSsoBound = false, - familySponsorshipValidUntil = LocalDateTime.parse("2023-10-27T12:00:00"), + familySponsorshipValidUntil = ZonedDateTime.parse("2023-10-27T12:00:00Z"), status = 1, ) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseSendUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseSendUtil.kt index c81378080d..2a748c3bde 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseSendUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseSendUtil.kt @@ -1,25 +1,25 @@ package com.x8bit.bitwarden.data.vault.datasource.network.model -import java.time.LocalDateTime +import java.time.ZonedDateTime fun createMockSend(number: Int): SyncResponseJson.Send = SyncResponseJson.Send( accessCount = 1, notes = "mockNotes-$number", - revisionDate = LocalDateTime.parse("2023-10-27T12:00:00"), + revisionDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), maxAccessCount = 1, shouldHideEmail = false, type = SendTypeJson.FILE, accessId = "mockAccessId-$number", password = "mockPassword-$number", file = createMockFile(number = number), - deletionDate = LocalDateTime.parse("2023-10-27T12:00:00"), + deletionDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), name = "mockName-$number", isDisabled = false, id = "mockId-$number", text = createMockText(number = number), key = "mockKey-$number", - expirationDate = LocalDateTime.parse("2023-10-27T12:00:00"), + expirationDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), ) fun createMockFile(number: Int): SyncResponseJson.Send.File = diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt index 3c537e4334..b4beb688eb 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt @@ -3,8 +3,7 @@ package com.x8bit.bitwarden.data.vault.datasource.sdk.model import com.bitwarden.core.CipherListView import com.bitwarden.core.CipherRepromptType import com.bitwarden.core.CipherType -import java.time.LocalDateTime -import java.time.ZoneOffset +import java.time.ZonedDateTime /** * Create a mock [CipherListView] with a given [number]. @@ -17,15 +16,15 @@ fun createMockCipherListView(number: Int): CipherListView = collectionIds = listOf("mockCollectionId-$number"), name = "mockName-$number", type = CipherType.LOGIN, - creationDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), - deletedDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), - revisionDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), + creationDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), + deletedDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), + revisionDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), attachments = 1U, favorite = false, reprompt = CipherRepromptType.NONE, diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt index 42329a3d90..4221895170 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt @@ -14,8 +14,7 @@ import com.bitwarden.core.PasswordHistoryView import com.bitwarden.core.SecureNoteType import com.bitwarden.core.SecureNoteView import com.bitwarden.core.UriMatchType -import java.time.LocalDateTime -import java.time.ZoneOffset +import java.time.ZonedDateTime /** * Create a mock [CipherView]. @@ -39,19 +38,19 @@ fun createMockCipherView( notes = "mockNotes-$number", type = cipherType, login = createMockLoginView(number = number), - creationDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), + creationDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), deletedDate = if (isDeleted) { - LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC) + ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant() } else { null }, - revisionDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), + revisionDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), attachments = listOf(createMockAttachmentView(number = number)), card = createMockCardView(number = number), fields = listOf(createMockFieldView(number = number)), @@ -73,9 +72,9 @@ fun createMockLoginView(number: Int): LoginView = LoginView( username = "mockUsername-$number", password = "mockPassword-$number", - passwordRevisionDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), + passwordRevisionDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), autofillOnPageLoad = false, uris = listOf(createMockUriView(number = number)), totp = "mockTotp-$number", @@ -158,9 +157,9 @@ fun createMockIdentityView(number: Int): IdentityView = fun createMockPasswordHistoryView(number: Int): PasswordHistoryView = PasswordHistoryView( password = "mockPassword-$number", - lastUsedDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), + lastUsedDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), ) /** diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/FolderViewUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/FolderViewUtil.kt index 826392f8f3..a7363820af 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/FolderViewUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/FolderViewUtil.kt @@ -1,8 +1,7 @@ package com.x8bit.bitwarden.data.vault.datasource.sdk.model import com.bitwarden.core.FolderView -import java.time.LocalDateTime -import java.time.ZoneOffset +import java.time.ZonedDateTime /** * Create a mock [FolderView] with a given [number]. @@ -11,7 +10,7 @@ fun createMockFolderView(number: Int): FolderView = FolderView( id = "mockId-$number", name = "mockName-$number", - revisionDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), + revisionDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), ) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/SendViewUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/SendViewUtil.kt index 05e5206c5a..4fcbfcf6ee 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/SendViewUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/SendViewUtil.kt @@ -4,8 +4,7 @@ import com.bitwarden.core.SendFileView import com.bitwarden.core.SendTextView import com.bitwarden.core.SendType import com.bitwarden.core.SendView -import java.time.LocalDateTime -import java.time.ZoneOffset +import java.time.ZonedDateTime /** * Create a mock [SendView] with a given [number]. @@ -25,9 +24,9 @@ fun createMockSendView(number: Int): SendView = accessCount = 1u, disabled = false, hideEmail = false, - revisionDate = LocalDateTime.parse("2023-10-27T12:00:00").toInstant(ZoneOffset.UTC), - deletionDate = LocalDateTime.parse("2023-10-27T12:00:00").toInstant(ZoneOffset.UTC), - expirationDate = LocalDateTime.parse("2023-10-27T12:00:00").toInstant(ZoneOffset.UTC), + 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(), ) /** diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCipherUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCipherUtil.kt index b8be34a1cf..0892875cde 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCipherUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCipherUtil.kt @@ -14,8 +14,7 @@ import com.bitwarden.core.PasswordHistory import com.bitwarden.core.SecureNote import com.bitwarden.core.SecureNoteType import com.bitwarden.core.UriMatchType -import java.time.LocalDateTime -import java.time.ZoneOffset +import java.time.ZonedDateTime /** * Create a mock [Cipher] with a given [number]. @@ -31,15 +30,15 @@ fun createMockSdkCipher(number: Int): Cipher = notes = "mockNotes-$number", type = CipherType.LOGIN, login = createMockSdkLogin(number = number), - creationDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), - deletedDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), - revisionDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), + creationDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), + deletedDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), + revisionDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), attachments = listOf(createMockSdkAttachment(number = number)), card = createMockSdkCard(number = number), fields = listOf(createMockSdkField(number = number)), @@ -68,9 +67,9 @@ fun createMockSdkSecureNote(): SecureNote = fun createMockSdkPasswordHistory(number: Int): PasswordHistory = PasswordHistory( password = "mockPassword-$number", - lastUsedDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), + lastUsedDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), ) /** @@ -142,9 +141,9 @@ fun createMockSdkLogin(number: Int): Login = Login( username = "mockUsername-$number", password = "mockPassword-$number", - passwordRevisionDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), + passwordRevisionDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), autofillOnPageLoad = false, uris = listOf(createMockSdkUri(number = number)), totp = "mockTotp-$number", diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkFolderUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkFolderUtil.kt index 1026781e49..f3f8aa96b5 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkFolderUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkFolderUtil.kt @@ -1,8 +1,7 @@ package com.x8bit.bitwarden.data.vault.datasource.sdk.model import com.bitwarden.core.Folder -import java.time.LocalDateTime -import java.time.ZoneOffset +import java.time.ZonedDateTime /** * Create a mock [Folder] with a given [number]. @@ -11,7 +10,7 @@ fun createMockSdkFolder(number: Int): Folder = Folder( id = "mockId-$number", name = "mockName-$number", - revisionDate = LocalDateTime - .parse("2023-10-27T12:00:00") - .toInstant(ZoneOffset.UTC), + revisionDate = ZonedDateTime + .parse("2023-10-27T12:00:00Z") + .toInstant(), ) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkSendUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkSendUtil.kt index 1bff0c2bd7..a7f051e2ce 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkSendUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkSendUtil.kt @@ -4,8 +4,7 @@ import com.bitwarden.core.Send import com.bitwarden.core.SendFile import com.bitwarden.core.SendText import com.bitwarden.core.SendType -import java.time.LocalDateTime -import java.time.ZoneOffset +import java.time.ZonedDateTime /** * Create a mock [Send] with a given [number]. @@ -25,9 +24,9 @@ fun createMockSdkSend(number: Int): Send = accessCount = 1u, disabled = false, hideEmail = false, - revisionDate = LocalDateTime.parse("2023-10-27T12:00:00").toInstant(ZoneOffset.UTC), - deletionDate = LocalDateTime.parse("2023-10-27T12:00:00").toInstant(ZoneOffset.UTC), - expirationDate = LocalDateTime.parse("2023-10-27T12:00:00").toInstant(ZoneOffset.UTC), + 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(), ) /**