From 257cec56b4c8b1cc9cae466f05ff6f4a9ba3005a Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sat, 23 Sep 2023 10:52:35 -0700 Subject: [PATCH] Improved error parsing --- .../net/thauvin/erik/crypto/CryptoPrice.kt | 15 +++++++++----- .../thauvin/erik/crypto/CryptoPriceTest.kt | 20 +++---------------- 2 files changed, 13 insertions(+), 22 deletions(-) diff --git a/src/main/kotlin/net/thauvin/erik/crypto/CryptoPrice.kt b/src/main/kotlin/net/thauvin/erik/crypto/CryptoPrice.kt index 7db00db..6cfdfcd 100644 --- a/src/main/kotlin/net/thauvin/erik/crypto/CryptoPrice.kt +++ b/src/main/kotlin/net/thauvin/erik/crypto/CryptoPrice.kt @@ -110,11 +110,16 @@ open class CryptoPrice(val base: String, val currency: String, val amount: BigDe if (response.isSuccessful) { return body } else { - val data = json.getJSONArray("errors") - throw CryptoException( - response.code, data.getJSONObject(0).getString("id"), - data.getJSONObject(0).getString("message") - ) + if (json.has("errors")) { + val data = json.getJSONArray("errors") + throw CryptoException( + response.code, data.getJSONObject(0).getString("id"), + data.getJSONObject(0).getString("message") + ) + } else { + throw CryptoException(response.code, json.getString("error"), + json.getString("message")) + } } } catch (e: JSONException) { throw CryptoException(response.code, id = "parse_error", "Could not parse data.", e) diff --git a/src/test/kotlin/net/thauvin/erik/crypto/CryptoPriceTest.kt b/src/test/kotlin/net/thauvin/erik/crypto/CryptoPriceTest.kt index dbb8eba..1ac50e5 100644 --- a/src/test/kotlin/net/thauvin/erik/crypto/CryptoPriceTest.kt +++ b/src/test/kotlin/net/thauvin/erik/crypto/CryptoPriceTest.kt @@ -33,10 +33,8 @@ package net.thauvin.erik.crypto import assertk.all import assertk.assertThat -import assertk.assertions.contains import assertk.assertions.isEqualTo import assertk.assertions.isGreaterThan -import assertk.assertions.isNotNull import assertk.assertions.prop import net.thauvin.erik.crypto.CryptoPrice.Companion.apiCall import net.thauvin.erik.crypto.CryptoPrice.Companion.buyPrice @@ -126,20 +124,7 @@ class CryptoPriceTest { @Test @Throws(CryptoException::class) - fun testPrices() { - assertFailsWith( - message = "spotPrice(FOO)", - exceptionClass = CryptoException::class, - block = { spotPrice("FOO") } - ) - - try { - spotPrice("BAR") - } catch (e: CryptoException) { - assertThat(e.id, "spotPrice(bar) error id").isEqualTo("not_found") - assertThat(e.message, "spotPrice(bar) error message").isEqualTo("Invalid base currency") - } - + fun testNotFound() { assertFailsWith( message = "buyPrice(BTC,BAR)", exceptionClass = CryptoException::class, @@ -151,7 +136,8 @@ class CryptoPriceTest { } catch (e: CryptoException) { assertThat(e, "sellPrice(FOOBAR)").all { prop(CryptoException::statusCode).isEqualTo(404) - prop(CryptoException::message).isNotNull().contains("invalid", true) + prop(CryptoException::message).isEqualTo("not found") + prop(CryptoException::id).isEqualTo("not found") } } }