summaryrefslogtreecommitdiffhomepage
path: root/android/test
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-02-26 14:58:25 +0100
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-02-26 14:58:25 +0100
commit5ba686d1ac45509cba636d717bb6729865105cf3 (patch)
treee21ad8d6ca30a8ca6a02313c9b4cc786370dc91e /android/test
parent5025db74b34cfb3536c43f89f3407ffc0d97ae73 (diff)
parent38c4791b414538962f6a8ab958aecd09414f33f6 (diff)
downloadmullvadvpn-5ba686d1ac45509cba636d717bb6729865105cf3.tar.xz
mullvadvpn-5ba686d1ac45509cba636d717bb6729865105cf3.zip
Merge branch 'remove-jodatime-droid-898'
Diffstat (limited to 'android/test')
-rw-r--r--android/test/e2e/build.gradle.kts1
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/Packet.kt10
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/Stream.kt28
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/serializer/NanoSecondsTimestampSerializer.kt14
-rw-r--r--android/test/mockapi/build.gradle.kts1
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountExpiryMockApiTest.kt8
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountHistoryMockApiTest.kt4
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt8
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LogoutMockApiTest.kt4
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt15
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/TooManyDevicesMockApiTest.kt4
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/DateTimeUtils.kt15
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt10
13 files changed, 63 insertions, 59 deletions
diff --git a/android/test/e2e/build.gradle.kts b/android/test/e2e/build.gradle.kts
index 3f4244cde7..8bcc45ab77 100644
--- a/android/test/e2e/build.gradle.kts
+++ b/android/test/e2e/build.gradle.kts
@@ -155,7 +155,6 @@ dependencies {
implementation(libs.ktor.client.cio)
implementation(libs.ktor.serialization.kotlinx.json)
implementation(libs.ktor.client.content.negotiation)
- implementation(libs.jodatime)
androidTestUtil(libs.androidx.test.orchestrator)
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/Packet.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/Packet.kt
index 5c788e5710..cd6b2b855e 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/Packet.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/Packet.kt
@@ -1,23 +1,25 @@
package net.mullvad.mullvadvpn.test.e2e.router.packetCapture
+import java.time.ZonedDateTime
import kotlinx.serialization.Contextual
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import net.mullvad.mullvadvpn.test.e2e.serializer.PacketSerializer
-import org.joda.time.DateTime
@Serializable(with = PacketSerializer::class)
sealed interface Packet {
- @SerialName("timestamp") val date: DateTime
+ @SerialName("timestamp") val date: ZonedDateTime
val fromPeer: Boolean
}
@Serializable
-data class RxPacket(@SerialName("timestamp") @Contextual override val date: DateTime) : Packet {
+data class RxPacket(@SerialName("timestamp") @Contextual override val date: ZonedDateTime) :
+ Packet {
@SerialName("from_peer") override val fromPeer: Boolean = false
}
@Serializable
-data class TxPacket(@SerialName("timestamp") @Contextual override val date: DateTime) : Packet {
+data class TxPacket(@SerialName("timestamp") @Contextual override val date: ZonedDateTime) :
+ Packet {
@SerialName("from_peer") override val fromPeer: Boolean = true
}
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/Stream.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/Stream.kt
index 564d0e25cb..68eb2783cc 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/Stream.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/router/packetCapture/Stream.kt
@@ -1,11 +1,11 @@
package net.mullvad.mullvadvpn.test.e2e.router.packetCapture
+import java.time.Duration
+import java.time.ZonedDateTime
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import net.mullvad.mullvadvpn.test.e2e.router.NetworkingProtocol
-import org.joda.time.DateTime
-import org.joda.time.Interval
@Serializable
data class Stream(
@@ -18,24 +18,26 @@ data class Stream(
@Transient val sourceHost = Host.fromString(sourceAddressAndPort)
@Transient val destinationHost = Host.fromString(destinationAddressAndPort)
- @Transient private val startDate: DateTime = packets.first().date
- @Transient private val endDate: DateTime = packets.last().date
- @Transient private val txStartDate: DateTime? = txPackets().firstOrNull()?.date
- @Transient private val txEndDate: DateTime? = txPackets().lastOrNull()?.date
- @Transient private val rxStartDate: DateTime? = rxPackets().firstOrNull()?.date
- @Transient private val rxEndDate: DateTime? = rxPackets().lastOrNull()?.date
+ @Transient private val startDate: ZonedDateTime = packets.first().date
+ @Transient private val endDate: ZonedDateTime = packets.last().date
+ @Transient private val txStartDate: ZonedDateTime? = txPackets().firstOrNull()?.date
+ @Transient private val txEndDate: ZonedDateTime? = txPackets().lastOrNull()?.date
+ @Transient private val rxStartDate: ZonedDateTime? = rxPackets().firstOrNull()?.date
+ @Transient private val rxEndDate: ZonedDateTime? = rxPackets().lastOrNull()?.date
- @Transient val interval = Interval(startDate, endDate)
+ @Transient val interval = Duration.between(startDate, endDate)
fun txPackets(): List<TxPacket> = packets.filterIsInstance<TxPacket>()
fun rxPackets(): List<RxPacket> = packets.filterIsInstance<RxPacket>()
- fun txInterval(): Interval? =
- if (txStartDate != null && txEndDate != null) Interval(txStartDate, txEndDate) else null
+ fun txInterval(): Duration? =
+ if (txStartDate != null && txEndDate != null) Duration.between(txStartDate, txEndDate)
+ else null
- fun rxInterval(): Interval? =
- if (rxStartDate != null && rxEndDate != null) Interval(rxStartDate, rxEndDate) else null
+ fun rxInterval(): Duration? =
+ if (rxStartDate != null && rxEndDate != null) Duration.between(rxStartDate, rxEndDate)
+ else null
init {
require(packets.isNotEmpty()) { "Stream must contain at least one packet" }
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/serializer/NanoSecondsTimestampSerializer.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/serializer/NanoSecondsTimestampSerializer.kt
index d49ca6017d..26d5f05f5b 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/serializer/NanoSecondsTimestampSerializer.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/serializer/NanoSecondsTimestampSerializer.kt
@@ -1,23 +1,25 @@
package net.mullvad.mullvadvpn.test.e2e.serializer
+import java.time.Instant
+import java.time.ZoneId
+import java.time.ZonedDateTime
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
-import org.joda.time.DateTime
-object NanoSecondsTimestampSerializer : KSerializer<DateTime> {
+object NanoSecondsTimestampSerializer : KSerializer<ZonedDateTime> {
override val descriptor: SerialDescriptor =
- PrimitiveSerialDescriptor("DateTime", PrimitiveKind.LONG)
+ PrimitiveSerialDescriptor("ZonedDateTime", PrimitiveKind.LONG)
- override fun deserialize(decoder: Decoder): DateTime {
+ override fun deserialize(decoder: Decoder): ZonedDateTime {
val long = decoder.decodeLong()
- return DateTime(long / 1000)
+ return ZonedDateTime.ofInstant(Instant.ofEpochMilli(long / 1000), ZoneId.systemDefault())
}
- override fun serialize(encoder: Encoder, value: DateTime) {
+ override fun serialize(encoder: Encoder, value: ZonedDateTime) {
throw NotImplementedError("Only interested in deserialization")
}
}
diff --git a/android/test/mockapi/build.gradle.kts b/android/test/mockapi/build.gradle.kts
index a224b8c53f..f0310107ac 100644
--- a/android/test/mockapi/build.gradle.kts
+++ b/android/test/mockapi/build.gradle.kts
@@ -72,7 +72,6 @@ dependencies {
implementation(libs.androidx.test.rules)
implementation(libs.androidx.test.uiautomator)
implementation(libs.kermit)
- implementation(libs.jodatime)
implementation(Dependencies.junitJupiterApi)
implementation(Dependencies.junit5AndroidTestExtensions)
implementation(Dependencies.junit5AndroidTestRunner)
diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountExpiryMockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountExpiryMockApiTest.kt
index 2fe829841c..d89313fc45 100644
--- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountExpiryMockApiTest.kt
+++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountExpiryMockApiTest.kt
@@ -1,6 +1,7 @@
package net.mullvad.mullvadvpn.test.mockapi
import androidx.test.uiautomator.By
+import java.time.ZonedDateTime
import net.mullvad.mullvadvpn.test.common.extension.clickAgreeOnPrivacyDisclaimer
import net.mullvad.mullvadvpn.test.common.extension.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove
import net.mullvad.mullvadvpn.test.common.extension.dismissChangelogDialogIfShown
@@ -8,8 +9,7 @@ import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout
import net.mullvad.mullvadvpn.test.mockapi.constant.DEFAULT_DEVICE_LIST
import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_DEVICE_NAME_2
import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID_2
-import net.mullvad.mullvadvpn.test.mockapi.util.currentUtcTimeWithOffsetZero
-import net.mullvad.mullvadvpn.util.toExpiryDateString
+import net.mullvad.mullvadvpn.test.mockapi.util.toExpiryDateString
import org.junit.jupiter.api.Test
class AccountExpiryMockApiTest : MockApiTest() {
@@ -18,7 +18,7 @@ class AccountExpiryMockApiTest : MockApiTest() {
fun testAccountExpiryDateUpdated() {
// Arrange
val validAccountNumber = "1234123412341234"
- val oldAccountExpiry = currentUtcTimeWithOffsetZero().plusMonths(1)
+ val oldAccountExpiry = ZonedDateTime.now().plusMonths(1)
apiDispatcher.apply {
expectedAccountNumber = validAccountNumber
accountExpiry = oldAccountExpiry
@@ -52,7 +52,7 @@ class AccountExpiryMockApiTest : MockApiTest() {
fun testAccountTimeExpiredWhileUsingTheAppShouldShowOutOfTimeScreen() {
// Arrange
val validAccountNumber = "1234123412341234"
- val oldAccountExpiry = currentUtcTimeWithOffsetZero().plusMonths(1)
+ val oldAccountExpiry = ZonedDateTime.now().plusMonths(1)
apiDispatcher.apply {
expectedAccountNumber = validAccountNumber
accountExpiry = oldAccountExpiry
diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountHistoryMockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountHistoryMockApiTest.kt
index 7d4639019a..deb63c89b4 100644
--- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountHistoryMockApiTest.kt
+++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountHistoryMockApiTest.kt
@@ -1,6 +1,7 @@
package net.mullvad.mullvadvpn.test.mockapi
import androidx.test.uiautomator.By
+import java.time.ZonedDateTime
import net.mullvad.mullvadvpn.compose.test.LOGIN_INPUT_TEST_TAG
import net.mullvad.mullvadvpn.test.common.extension.clickAgreeOnPrivacyDisclaimer
import net.mullvad.mullvadvpn.test.common.extension.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove
@@ -9,7 +10,6 @@ import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout
import net.mullvad.mullvadvpn.test.mockapi.constant.DEFAULT_DEVICE_LIST
import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_DEVICE_NAME_2
import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID_2
-import net.mullvad.mullvadvpn.test.mockapi.util.currentUtcTimeWithOffsetZero
import org.junit.jupiter.api.Assertions.assertNotNull
import org.junit.jupiter.api.Test
@@ -21,7 +21,7 @@ class AccountHistoryMockApiTest : MockApiTest() {
val validAccountNumber = "1234123412341234"
apiDispatcher.apply {
expectedAccountNumber = validAccountNumber
- accountExpiry = currentUtcTimeWithOffsetZero().plusMonths(1)
+ accountExpiry = ZonedDateTime.now().plusMonths(1)
devices = DEFAULT_DEVICE_LIST.toMutableMap()
devicePendingToGetCreated = DUMMY_ID_2 to DUMMY_DEVICE_NAME_2
}
diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt
index f13e5070e2..5feee8abd8 100644
--- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt
+++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt
@@ -2,6 +2,7 @@ package net.mullvad.mullvadvpn.test.mockapi
import androidx.test.uiautomator.By
import androidx.test.uiautomator.Until
+import java.time.ZonedDateTime
import net.mullvad.mullvadvpn.compose.test.LOGIN_TITLE_TEST_TAG
import net.mullvad.mullvadvpn.test.common.constant.DEFAULT_TIMEOUT
import net.mullvad.mullvadvpn.test.common.extension.clickAgreeOnPrivacyDisclaimer
@@ -10,7 +11,6 @@ import net.mullvad.mullvadvpn.test.common.extension.dismissChangelogDialogIfShow
import net.mullvad.mullvadvpn.test.mockapi.constant.DEFAULT_DEVICE_LIST
import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_DEVICE_NAME_2
import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID_2
-import net.mullvad.mullvadvpn.test.mockapi.util.currentUtcTimeWithOffsetZero
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
@@ -21,7 +21,7 @@ class LoginMockApiTest : MockApiTest() {
val validAccountNumber = "1234123412341234"
apiDispatcher.apply {
expectedAccountNumber = null
- accountExpiry = currentUtcTimeWithOffsetZero().plusDays(1)
+ accountExpiry = ZonedDateTime.now().plusDays(1)
}
app.launch(endpoint)
@@ -47,7 +47,7 @@ class LoginMockApiTest : MockApiTest() {
val validAccountNumber = "1234123412341234"
apiDispatcher.apply {
expectedAccountNumber = validAccountNumber
- accountExpiry = currentUtcTimeWithOffsetZero().plusDays(1)
+ accountExpiry = ZonedDateTime.now().plusDays(1)
devices = DEFAULT_DEVICE_LIST.toMutableMap()
devicePendingToGetCreated = DUMMY_ID_2 to DUMMY_DEVICE_NAME_2
}
@@ -70,7 +70,7 @@ class LoginMockApiTest : MockApiTest() {
val validAccountNumber = "1234123412341234"
apiDispatcher.apply {
expectedAccountNumber = validAccountNumber
- accountExpiry = currentUtcTimeWithOffsetZero().minusDays(1)
+ accountExpiry = ZonedDateTime.now().minusDays(1)
devices = DEFAULT_DEVICE_LIST.toMutableMap()
devicePendingToGetCreated = DUMMY_ID_2 to DUMMY_DEVICE_NAME_2
}
diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LogoutMockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LogoutMockApiTest.kt
index 3df42ac0ce..da41d41066 100644
--- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LogoutMockApiTest.kt
+++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LogoutMockApiTest.kt
@@ -1,6 +1,7 @@
package net.mullvad.mullvadvpn.test.mockapi
import androidx.test.uiautomator.By
+import java.time.ZonedDateTime
import net.mullvad.mullvadvpn.test.common.extension.clickAgreeOnPrivacyDisclaimer
import net.mullvad.mullvadvpn.test.common.extension.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove
import net.mullvad.mullvadvpn.test.common.extension.dismissChangelogDialogIfShown
@@ -8,7 +9,6 @@ import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout
import net.mullvad.mullvadvpn.test.mockapi.constant.DEFAULT_DEVICE_LIST
import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_DEVICE_NAME_2
import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID_2
-import net.mullvad.mullvadvpn.test.mockapi.util.currentUtcTimeWithOffsetZero
import org.junit.jupiter.api.Assertions.assertNotNull
import org.junit.jupiter.api.Test
@@ -20,7 +20,7 @@ class LogoutMockApiTest : MockApiTest() {
val validAccountNumber = "1234123412341234"
apiDispatcher.apply {
expectedAccountNumber = validAccountNumber
- accountExpiry = currentUtcTimeWithOffsetZero().plusMonths(1)
+ accountExpiry = ZonedDateTime.now().plusMonths(1)
devices = DEFAULT_DEVICE_LIST.toMutableMap()
devicePendingToGetCreated = DUMMY_ID_2 to DUMMY_DEVICE_NAME_2
}
diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt
index e230152efe..f99cb48a06 100644
--- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt
+++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt
@@ -1,6 +1,7 @@
package net.mullvad.mullvadvpn.test.mockapi
import co.touchlab.kermit.Logger
+import java.time.ZonedDateTime
import net.mullvad.mullvadvpn.test.mockapi.constant.ACCOUNT_URL_PATH
import net.mullvad.mullvadvpn.test.mockapi.constant.AUTH_TOKEN_URL_PATH
import net.mullvad.mullvadvpn.test.mockapi.constant.CREATE_ACCOUNT_URL_PATH
@@ -10,20 +11,18 @@ import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID_1
import net.mullvad.mullvadvpn.test.mockapi.util.accessTokenJsonResponse
import net.mullvad.mullvadvpn.test.mockapi.util.accountCreationJson
import net.mullvad.mullvadvpn.test.mockapi.util.accountInfoJson
-import net.mullvad.mullvadvpn.test.mockapi.util.currentUtcTimeWithOffsetZero
import net.mullvad.mullvadvpn.test.mockapi.util.deviceJson
import net.mullvad.mullvadvpn.test.mockapi.util.tooManyDevicesJsonResponse
import okhttp3.mockwebserver.Dispatcher
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.RecordedRequest
import okio.Buffer
-import org.joda.time.DateTime
import org.json.JSONArray
class MockApiDispatcher : Dispatcher() {
var expectedAccountNumber: String? = null
- var accountExpiry: DateTime? = null
+ var accountExpiry: ZonedDateTime? = null
var devices: MutableMap<String, String>? = null
private val canAddDevices: Boolean
get() = (devices?.size ?: 0) < 5
@@ -84,7 +83,7 @@ class MockApiDispatcher : Dispatcher() {
.setBody(
accessTokenJsonResponse(
accessToken = DUMMY_ACCESS_TOKEN,
- expiry = currentUtcTimeWithOffsetZero().plusDays(1),
+ expiry = ZonedDateTime.now().plusDays(1),
)
.toString()
)
@@ -115,7 +114,7 @@ class MockApiDispatcher : Dispatcher() {
id = deviceId,
name = devices!![deviceId]!!, // Should always exist
publicKey = cachedKey,
- creationDate = currentUtcTimeWithOffsetZero().minusDays(1),
+ creationDate = ZonedDateTime.now().minusDays(1),
)
.toString()
)
@@ -136,7 +135,7 @@ class MockApiDispatcher : Dispatcher() {
id = devicePendingToGetCreated!!.first,
name = devicePendingToGetCreated!!.second,
publicKey = newKey,
- creationDate = currentUtcTimeWithOffsetZero().minusDays(1),
+ creationDate = ZonedDateTime.now().minusDays(1),
)
.toString()
)
@@ -158,7 +157,7 @@ class MockApiDispatcher : Dispatcher() {
id = entry.key,
name = entry.value,
publicKey = cachedKey,
- creationDate = currentUtcTimeWithOffsetZero().minusDays(index + 1),
+ creationDate = ZonedDateTime.now().minusDays((index + 1).toLong()),
)
)
}
@@ -174,7 +173,7 @@ class MockApiDispatcher : Dispatcher() {
.setBody(
accountCreationJson(
id = DUMMY_ID_1,
- expiry = DateTime(),
+ expiry = ZonedDateTime.now(),
accountNumber = expectedAccountNumber,
)
.toString()
diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/TooManyDevicesMockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/TooManyDevicesMockApiTest.kt
index bde2a8f4dd..19674815c1 100644
--- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/TooManyDevicesMockApiTest.kt
+++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/TooManyDevicesMockApiTest.kt
@@ -1,6 +1,7 @@
package net.mullvad.mullvadvpn.test.mockapi
import androidx.test.uiautomator.By
+import java.time.ZonedDateTime
import net.mullvad.mullvadvpn.test.common.extension.clickAgreeOnPrivacyDisclaimer
import net.mullvad.mullvadvpn.test.common.extension.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove
import net.mullvad.mullvadvpn.test.common.extension.dismissChangelogDialogIfShown
@@ -17,7 +18,6 @@ import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID_3
import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID_4
import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID_5
import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID_6
-import net.mullvad.mullvadvpn.test.mockapi.util.currentUtcTimeWithOffsetZero
import org.junit.jupiter.api.Test
class TooManyDevicesMockApiTest : MockApiTest() {
@@ -27,7 +27,7 @@ class TooManyDevicesMockApiTest : MockApiTest() {
val validAccountNumber = "1234123412341234"
apiDispatcher.apply {
expectedAccountNumber = validAccountNumber
- accountExpiry = currentUtcTimeWithOffsetZero().plusMonths(1)
+ accountExpiry = ZonedDateTime.now().plusMonths(1)
devices =
mutableMapOf(
DUMMY_ID_1 to DUMMY_DEVICE_NAME_1,
diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/DateTimeUtils.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/DateTimeUtils.kt
index 81042f70d2..330fc15a81 100644
--- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/DateTimeUtils.kt
+++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/DateTimeUtils.kt
@@ -1,13 +1,14 @@
package net.mullvad.mullvadvpn.test.mockapi.util
-import org.joda.time.DateTime
-import org.joda.time.DateTimeZone
-import org.joda.time.format.DateTimeFormat
+import java.time.ZonedDateTime
+import java.time.format.DateTimeFormatter
+import java.time.format.FormatStyle
private const val STRICT_ISO8601_AND_RFC3339_PATTERN = "yyyy-MM-dd'T'HH:mm:ssZZ"
-fun currentUtcTimeWithOffsetZero() = DateTime.now(DateTimeZone.forOffsetHours(0))
-
-fun DateTime.formatStrictlyAccordingToIso8601AndRfc3339(): String {
- return toString(DateTimeFormat.forPattern(STRICT_ISO8601_AND_RFC3339_PATTERN))
+fun ZonedDateTime.formatStrictlyAccordingToIso8601AndRfc3339(): String {
+ return DateTimeFormatter.ofPattern(STRICT_ISO8601_AND_RFC3339_PATTERN).format(this)
}
+
+fun ZonedDateTime.toExpiryDateString(): String =
+ DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM, FormatStyle.SHORT).format(this)
diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt
index 2de385c7f8..a0e21d55ca 100644
--- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt
+++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt
@@ -1,9 +1,9 @@
package net.mullvad.mullvadvpn.test.mockapi.util
-import org.joda.time.DateTime
+import java.time.ZonedDateTime
import org.json.JSONObject
-fun accountInfoJson(id: String, expiry: DateTime) =
+fun accountInfoJson(id: String, expiry: ZonedDateTime) =
JSONObject().apply {
put("id", id)
put("expiry", expiry.formatStrictlyAccordingToIso8601AndRfc3339())
@@ -11,10 +11,10 @@ fun accountInfoJson(id: String, expiry: DateTime) =
put("can_add_devices", true)
}
-fun accountCreationJson(id: String, accountNumber: String, expiry: DateTime) =
+fun accountCreationJson(id: String, accountNumber: String, expiry: ZonedDateTime) =
accountInfoJson(id, expiry).apply { put("number", accountNumber) }
-fun deviceJson(id: String, name: String, publicKey: String, creationDate: DateTime) =
+fun deviceJson(id: String, name: String, publicKey: String, creationDate: ZonedDateTime) =
JSONObject().apply {
put("id", id)
put("name", name)
@@ -25,7 +25,7 @@ fun deviceJson(id: String, name: String, publicKey: String, creationDate: DateTi
put("ipv6_address", "fc00::1/128")
}
-fun accessTokenJsonResponse(accessToken: String, expiry: DateTime) =
+fun accessTokenJsonResponse(accessToken: String, expiry: ZonedDateTime) =
JSONObject().apply {
put("access_token", accessToken)
put("expiry", expiry.formatStrictlyAccordingToIso8601AndRfc3339())