From c20a7945f2b37863264c3b9bdcc85454018bd4cd Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 22 Jan 2020 09:30:27 -0300 Subject: Don't crash on and show unknown events Also don't crash on unexpected properties --- app/src/main/java/net/taler/wallet/WalletViewModel.kt | 5 ++++- .../main/java/net/taler/wallet/history/HistoryEvent.kt | 7 ++++++- app/src/main/res/values/strings.xml | 1 + .../java/net/taler/wallet/history/HistoryEventTest.kt | 15 +++++++++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) (limited to 'app/src') diff --git a/app/src/main/java/net/taler/wallet/WalletViewModel.kt b/app/src/main/java/net/taler/wallet/WalletViewModel.kt index bc8c7e2..ad41e77 100644 --- a/app/src/main/java/net/taler/wallet/WalletViewModel.kt +++ b/app/src/main/java/net/taler/wallet/WalletViewModel.kt @@ -19,6 +19,7 @@ package net.taler.wallet import android.app.Application import android.util.Log import androidx.lifecycle.* +import com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.module.kotlin.KotlinModule import com.fasterxml.jackson.module.kotlin.readValue @@ -130,7 +131,9 @@ class WalletViewModel(val app: Application) : AndroidViewModel(app) { private var currentWithdrawRequestId = 0 private val walletBackendApi = WalletBackendApi(app) - private val mapper = ObjectMapper().registerModule(KotlinModule()) + private val mapper = ObjectMapper() + .registerModule(KotlinModule()) + .configure(FAIL_ON_UNKNOWN_PROPERTIES, false) fun init() { if (initialized) { diff --git a/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt b/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt index e2a7c7e..787b430 100644 --- a/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt +++ b/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt @@ -87,7 +87,8 @@ typealias History = ArrayList @JsonTypeInfo( use = NAME, include = PROPERTY, - property = "type" + property = "type", + defaultImpl = HistoryUnknownEvent::class ) /** missing: AuditorComplaintSent = "auditor-complained-sent", @@ -136,6 +137,10 @@ abstract class HistoryEvent( } +class HistoryUnknownEvent(timestamp: Timestamp) : HistoryEvent(timestamp) { + override val title = R.string.history_event_unknown +} + @JsonTypeName("exchange-added") class ExchangeAddedEvent( timestamp: Timestamp, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 17d1101..39fd3a6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -30,6 +30,7 @@ Purchase Redirected Refund Obtained change + Unknown Event Fee: Show All Reload History diff --git a/app/src/test/java/net/taler/wallet/history/HistoryEventTest.kt b/app/src/test/java/net/taler/wallet/history/HistoryEventTest.kt index 9355161..361d2ec 100644 --- a/app/src/test/java/net/taler/wallet/history/HistoryEventTest.kt +++ b/app/src/test/java/net/taler/wallet/history/HistoryEventTest.kt @@ -441,4 +441,19 @@ class HistoryEventTest { assertEquals(timestamp, event.timestamp.ms) } + @Test + fun `test HistoryUnknownEvent`() { + val json = """{ + "type": "does not exist", + "timestamp": { + "t_ms": $timestamp + }, + "eventId": "does-not-exist;898724XGQ1GGMZB4WY3KND582NSP74FZ60BX0Y87FF81H0FJ8XD0" + }""".trimIndent() + val event: HistoryEvent = mapper.readValue(json) + + assertEquals(HistoryUnknownEvent::class.java, event.javaClass) + assertEquals(timestamp, event.timestamp.ms) + } + } -- cgit v1.2.3