Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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<String>(url, HttpMethod.GET, HttpEntity.EMPTY).body!!
return restTemplate.exchange<NbuzRatesResponse>(url, HttpMethod.GET, HttpEntity.EMPTY).body!!
}

private fun buildUrl(date: LocalDate): String =
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -20,17 +19,16 @@ 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
val date = LocalDate.now(timeZone)
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()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class NbuzApiClientTest {
val response = nbuzApiClient.getExchangeRates(LocalDate.now())

assertNotNull(response)
assertTrue(response.isNotBlank())
assertNotNull(response.data)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<ExchangeRateSourceException> {
Expand All @@ -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)
Expand All @@ -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)
Expand Down
Loading