diff --git a/config/src/main/resources/shared/statistics-service.yml b/config/src/main/resources/shared/statistics-service.yml index b6619b2fbc..a05449fdd0 100644 --- a/config/src/main/resources/shared/statistics-service.yml +++ b/config/src/main/resources/shared/statistics-service.yml @@ -21,4 +21,4 @@ server: port: 7000 rates: - url: http://api.fixer.io \ No newline at end of file + url: https://exchangeratesapi.io/api \ No newline at end of file diff --git a/statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClient.java b/statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClient.java index 1a68024080..a53d3fae71 100644 --- a/statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClient.java +++ b/statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClient.java @@ -7,10 +7,19 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; +import java.util.Arrays; +import java.util.Collection; + @FeignClient(url = "${rates.url}", name = "rates-client", fallback = ExchangeRatesClientFallback.class) public interface ExchangeRatesClient { + default ExchangeRatesContainer getRates(Currency base) { + return getRates(base, Arrays.asList(Currency.values())); + } + @RequestMapping(method = RequestMethod.GET, value = "/latest") - ExchangeRatesContainer getRates(@RequestParam("base") Currency base); + ExchangeRatesContainer getRates( + @RequestParam("base") Currency base, + @RequestParam("symbols") Collection currencies); } diff --git a/statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClientFallback.java b/statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClientFallback.java index dbc61a1396..13caa1d3d3 100644 --- a/statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClientFallback.java +++ b/statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClientFallback.java @@ -4,13 +4,14 @@ import com.piggymetrics.statistics.domain.ExchangeRatesContainer; import org.springframework.stereotype.Component; +import java.util.Collection; import java.util.Collections; @Component public class ExchangeRatesClientFallback implements ExchangeRatesClient { @Override - public ExchangeRatesContainer getRates(Currency base) { + public ExchangeRatesContainer getRates(Currency base, Collection currencies) { ExchangeRatesContainer container = new ExchangeRatesContainer(); container.setBase(Currency.getBase()); container.setRates(Collections.emptyMap()); diff --git a/statistics-service/src/test/java/com/piggymetrics/statistics/client/ExchangeRatesClientTest.java b/statistics-service/src/test/java/com/piggymetrics/statistics/client/ExchangeRatesClientTest.java index 45624fe256..60a89a49ab 100644 --- a/statistics-service/src/test/java/com/piggymetrics/statistics/client/ExchangeRatesClientTest.java +++ b/statistics-service/src/test/java/com/piggymetrics/statistics/client/ExchangeRatesClientTest.java @@ -10,6 +10,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.time.LocalDate; +import java.util.Collections; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -30,6 +31,24 @@ public void shouldRetrieveExchangeRates() { assertEquals(container.getBase(), Currency.getBase()); assertNotNull(container.getRates()); + assertEquals(Currency.values().length, container.getRates().size()); + assertNotNull(container.getRates().get(Currency.USD.name())); + assertNotNull(container.getRates().get(Currency.EUR.name())); + assertNotNull(container.getRates().get(Currency.RUB.name())); + } + + @Test + public void shouldRetrieveExchangeRatesForSpecifiedCurrency() { + + Currency requestedCurrency = Currency.EUR; + ExchangeRatesContainer container = client.getRates(Currency.getBase(), Collections.singleton(requestedCurrency)); + + assertEquals(container.getDate(), LocalDate.now()); + assertEquals(container.getBase(), Currency.getBase()); + + assertNotNull(container.getRates()); + assertEquals(1, container.getRates().size()); + assertNotNull(container.getRates().get(requestedCurrency.name())); } } \ No newline at end of file diff --git a/statistics-service/src/test/resources/application.yml b/statistics-service/src/test/resources/application.yml index 0e8852a06a..424a56e455 100644 --- a/statistics-service/src/test/resources/application.yml +++ b/statistics-service/src/test/resources/application.yml @@ -13,4 +13,4 @@ spring: port: 0 rates: - url: http://api.fixer.io \ No newline at end of file + url: https://exchangeratesapi.io/api \ No newline at end of file