Update all LocalDateTimes in the app to use ZonedDateTimes (#404)

This commit is contained in:
David Perez 2023-12-15 17:09:04 -06:00 committed by Álison Fernandes
parent fb7bc78d95
commit 34101245dd
20 changed files with 145 additions and 150 deletions

View file

@ -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())
}
}
}

View file

@ -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<LocalDateTime> {
class ZonedDateTimeSerializer : KSerializer<ZonedDateTime> {
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))
}
}

View file

@ -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,

View file

@ -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.

View file

@ -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<PasswordHistory>.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<SyncResponseJson.Cipher.PasswordHistory>.toSdkPasswordHistoryList(): Li
fun SyncResponseJson.Cipher.PasswordHistory.toSdkPasswordHistory(): PasswordHistory =
PasswordHistory(
password = password,
lastUsedDate = lastUsedDate.toInstant(ZoneOffset.UTC),
lastUsedDate = lastUsedDate.toInstant(),
)
/**

View file

@ -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(),
)

View file

@ -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(),
)
/**

View file

@ -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<LocalDateTimeData>(
json.decodeFromString<ZonedDateTimeData>(
"""
{
"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<LocalDateTimeData>(
json.decodeFromString<ZonedDateTimeData>(
"""
{
"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,
)

View file

@ -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"),
)

View file

@ -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)),

View file

@ -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"),
)

View file

@ -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,
)

View file

@ -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 =

View file

@ -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,

View file

@ -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(),
)
/**

View file

@ -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(),
)

View file

@ -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(),
)
/**

View file

@ -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",

View file

@ -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(),
)

View file

@ -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(),
)
/**