aboutsummaryrefslogtreecommitdiff
path: root/taler-kotlin-android/src
diff options
context:
space:
mode:
Diffstat (limited to 'taler-kotlin-android/src')
-rw-r--r--taler-kotlin-android/src/main/java/net/taler/common/TimestampMixin.kt12
-rw-r--r--taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt5
2 files changed, 16 insertions, 1 deletions
diff --git a/taler-kotlin-android/src/main/java/net/taler/common/TimestampMixin.kt b/taler-kotlin-android/src/main/java/net/taler/common/TimestampMixin.kt
index 28dbe7f..6c1bebf 100644
--- a/taler-kotlin-android/src/main/java/net/taler/common/TimestampMixin.kt
+++ b/taler-kotlin-android/src/main/java/net/taler/common/TimestampMixin.kt
@@ -17,11 +17,23 @@
package net.taler.common
import com.fasterxml.jackson.annotation.JsonProperty
+import com.fasterxml.jackson.core.JsonParser
+import com.fasterxml.jackson.databind.DeserializationContext
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer
/**
* Used to support Jackson serialization along with KotlinX.
*/
abstract class TimestampMixin(
+ @get:JsonDeserialize(using = NeverDeserializer::class)
@get:JsonProperty("t_ms")
val ms: Long
)
+
+class NeverDeserializer : StdDeserializer<Long>(Long::class.java) {
+ override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Long {
+ return if (p.text == "never") -1
+ else p.longValue
+ }
+}
diff --git a/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt b/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
index 79a7598..077ff51 100644
--- a/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
+++ b/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
@@ -20,6 +20,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.KotlinModule
import com.fasterxml.jackson.module.kotlin.readValue
+import net.taler.common.Timestamp.Companion.NEVER
import org.junit.Assert.assertEquals
import org.junit.Test
@@ -29,6 +30,7 @@ class ContractTermsTest {
.registerModule(KotlinModule())
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.addMixIn(Amount::class.java, AmountMixin::class.java)
+ .addMixIn(Timestamp::class.java, TimestampMixin::class.java)
@Test
fun test() {
@@ -40,7 +42,7 @@ class ContractTermsTest {
},
"fulfillment_url":"https://shop.test.taler.net/essay/1._The_Free_Software_Definition",
"summary":"Essay: 1. The Free Software Definition",
- "refund_deadline":{"t_ms":1596128414000},
+ "refund_deadline":{"t_ms":"never"},
"wire_transfer_deadline":{"t_ms":1596128564000},
"products":[],
"h_wire":"KV40K023N8EC1F5100TYNS23C4XN68Y1Z3PTJSWFGTMCNYD54KT4S791V2VQ91SZANN86VDAA369M4VEZ0KR6DN71EVRRZA71K681M0",
@@ -69,6 +71,7 @@ class ContractTermsTest {
""".trimIndent()
val contractTerms: ContractTerms = mapper.readValue(json)
assertEquals("Essay: 1. The Free Software Definition", contractTerms.summary)
+ assertEquals(Timestamp(NEVER), contractTerms.refundDeadline)
}
}