diff --git a/src/main/kotlin/dev/vality/rateboss/client/nbuz/NbuzApiClient.kt b/src/main/kotlin/dev/vality/rateboss/client/nbuz/NbuzApiClient.kt index 9f632df..b795fd4 100644 --- a/src/main/kotlin/dev/vality/rateboss/client/nbuz/NbuzApiClient.kt +++ b/src/main/kotlin/dev/vality/rateboss/client/nbuz/NbuzApiClient.kt @@ -1,6 +1,7 @@ package dev.vality.rateboss.client.nbuz import dev.vality.rateboss.config.properties.RatesProperties +import dev.vality.rateboss.model.NbuzRatesResponse import org.springframework.http.HttpEntity import org.springframework.http.HttpMethod import org.springframework.stereotype.Component @@ -14,9 +15,9 @@ class NbuzApiClient( private val restTemplate: RestTemplate, private val ratesProperties: RatesProperties, ) { - fun getExchangeRates(date: LocalDate): String { + fun getExchangeRates(date: LocalDate): NbuzRatesResponse { val url = buildUrl(date) - return restTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY).body!! + return restTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY).body!! } private fun buildUrl(date: LocalDate): String = diff --git a/src/main/kotlin/dev/vality/rateboss/source/impl/NbuzExchangeRateSource.kt b/src/main/kotlin/dev/vality/rateboss/source/impl/NbuzExchangeRateSource.kt index 1a99d92..2f10b79 100644 --- a/src/main/kotlin/dev/vality/rateboss/source/impl/NbuzExchangeRateSource.kt +++ b/src/main/kotlin/dev/vality/rateboss/source/impl/NbuzExchangeRateSource.kt @@ -1,6 +1,5 @@ package dev.vality.rateboss.source.impl -import com.fasterxml.jackson.databind.ObjectMapper import dev.vality.rateboss.client.nbuz.NbuzApiClient import dev.vality.rateboss.config.properties.RatesProperties import dev.vality.rateboss.job.constant.ExRateSources @@ -20,7 +19,6 @@ private val log = KotlinLogging.logger {} class NbuzExchangeRateSource( private val nbuzApiClient: NbuzApiClient, private val ratesProperties: RatesProperties, - private val objectMapper: ObjectMapper, ) : ExchangeRateSource { override fun getExchangeRate(currencySymbolCode: String): ExchangeRates { val timeZone = ratesProperties.source.nbuz.timeZone @@ -28,9 +26,9 @@ class NbuzExchangeRateSource( log.info { "Trying to get exchange rates from nbuz for currency=$currencySymbolCode, date=$date" } val response = try { - objectMapper.readValue(nbuzApiClient.getExchangeRates(date), NbuzRatesResponse::class.java) + nbuzApiClient.getExchangeRates(date) } catch (e: Exception) { - throw ExchangeRateSourceException("Failed to get daily rates", e) + throw ExchangeRateSourceException("Failed to get daily rates from nbuz", e) } val rates = buildRatesMap(response) if (rates.isEmpty()) { diff --git a/src/test/kotlin/dev/vality/rateboss/client/nbuz/NbuzApiClientTest.kt b/src/test/kotlin/dev/vality/rateboss/client/nbuz/NbuzApiClientTest.kt index 2afcafe..53ab738 100644 --- a/src/test/kotlin/dev/vality/rateboss/client/nbuz/NbuzApiClientTest.kt +++ b/src/test/kotlin/dev/vality/rateboss/client/nbuz/NbuzApiClientTest.kt @@ -30,7 +30,7 @@ class NbuzApiClientTest { val response = nbuzApiClient.getExchangeRates(LocalDate.now()) assertNotNull(response) - assertTrue(response.isNotBlank()) + assertNotNull(response.data) } @Test diff --git a/src/test/kotlin/dev/vality/rateboss/source/NbuzExchangeRateSourceTest.kt b/src/test/kotlin/dev/vality/rateboss/source/NbuzExchangeRateSourceTest.kt index 18ae011..05f9f5a 100644 --- a/src/test/kotlin/dev/vality/rateboss/source/NbuzExchangeRateSourceTest.kt +++ b/src/test/kotlin/dev/vality/rateboss/source/NbuzExchangeRateSourceTest.kt @@ -2,6 +2,9 @@ package dev.vality.rateboss.source import dev.vality.rateboss.client.nbuz.NbuzApiClient import dev.vality.rateboss.config.TestConfig +import dev.vality.rateboss.model.NbuzRateItem +import dev.vality.rateboss.model.NbuzRatesEntry +import dev.vality.rateboss.model.NbuzRatesResponse import dev.vality.rateboss.source.impl.NbuzExchangeRateSource import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertNotNull @@ -38,13 +41,13 @@ class NbuzExchangeRateSourceTest { exchangeRateSource.getExchangeRate(currencySymbolCode) } - assertEquals("Failed to get daily rates", exception.message) + assertEquals("Failed to get daily rates from nbuz", exception.message) } @Test fun getEmptyExchangeRate() { val currencySymbolCode = "UZS" - whenever(nbuzApiClient.getExchangeRates(any())).thenReturn("""{"data": []}""") + whenever(nbuzApiClient.getExchangeRates(any())).thenReturn(NbuzRatesResponse(data = emptyList())) val exception = org.junit.jupiter.api.assertThrows { @@ -58,26 +61,26 @@ class NbuzExchangeRateSourceTest { fun getSuccessExchangeRate() { val currencySymbolCode = "UZS" whenever(nbuzApiClient.getExchangeRates(any())).thenReturn( - """ - { - "data": [ - { - "rates": [ - { - "rate_code": "USD", - "rate_sb": "11979,64", - "rate_equivalent": "1" - }, - { - "rate_code": "JPY", - "rate_sb": "150,58", - "rate_equivalent": "2" - } - ] - } - ] - } - """.trimIndent(), + NbuzRatesResponse( + data = + listOf( + NbuzRatesEntry( + rates = + listOf( + NbuzRateItem( + rateCode = "USD", + rateSb = "11979,64", + rateEquivalent = "1", + ), + NbuzRateItem( + rateCode = "JPY", + rateSb = "150,58", + rateEquivalent = "2", + ), + ), + ), + ), + ), ) val exchangeRate = exchangeRateSource.getExchangeRate(currencySymbolCode) @@ -92,26 +95,26 @@ class NbuzExchangeRateSourceTest { fun getSuccessExchangeRateWithMalformedCurrencyRecord() { val currencySymbolCode = "UZS" whenever(nbuzApiClient.getExchangeRates(any())).thenReturn( - """ - { - "data": [ - { - "rates": [ - { - "rate_code": "USD", - "rate_sb": "11979,64", - "rate_equivalent": "1" - }, - { - "rate_code": "BROKEN", - "rate_sb": "100", - "rate_equivalent": "0" - } - ] - } - ] - } - """.trimIndent(), + NbuzRatesResponse( + data = + listOf( + NbuzRatesEntry( + rates = + listOf( + NbuzRateItem( + rateCode = "USD", + rateSb = "11979,64", + rateEquivalent = "1", + ), + NbuzRateItem( + rateCode = "BROKEN", + rateSb = "100", + rateEquivalent = "0", + ), + ), + ), + ), + ), ) val exchangeRate = exchangeRateSource.getExchangeRate(currencySymbolCode)