diff --git a/currency-service/src/main/java/cz/muni/fi/obs/controller/CurrencyController.java b/currency-service/src/main/java/cz/muni/fi/obs/controller/CurrencyController.java index d110f69389346e8cf958b332741d010e6bbc3f74..62e65e1bd2d5d4497e4552a6e51e98f410a12a0a 100644 --- a/currency-service/src/main/java/cz/muni/fi/obs/controller/CurrencyController.java +++ b/currency-service/src/main/java/cz/muni/fi/obs/controller/CurrencyController.java @@ -28,6 +28,6 @@ public class CurrencyController { @GetMapping("/") public ResponseEntity<Page<CurrencyDto>> currencies(@ModelAttribute Pageable pageRequest) { - return ResponseEntity.ok(currencyFacade.listPaged(pageRequest)); + return ResponseEntity.ok(currencyFacade.listPage(pageRequest)); } } diff --git a/currency-service/src/main/java/cz/muni/fi/obs/facade/CurrencyFacade.java b/currency-service/src/main/java/cz/muni/fi/obs/facade/CurrencyFacade.java index 75d4941b9869083d6f134cf4e5d4bef0aa38e706..85d41b9a6329d1e4cf7779c0337f9e27083b2c6d 100644 --- a/currency-service/src/main/java/cz/muni/fi/obs/facade/CurrencyFacade.java +++ b/currency-service/src/main/java/cz/muni/fi/obs/facade/CurrencyFacade.java @@ -1,15 +1,19 @@ package cz.muni.fi.obs.facade; +import cz.muni.fi.obs.data.dbo.Currency; import cz.muni.fi.obs.dto.CurrencyDto; import cz.muni.fi.obs.dto.CurrencyExchangeResult; import cz.muni.fi.obs.service.CurrencyService; import cz.muni.fi.obs.service.ExchangeRateService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.util.List; +import java.util.stream.Collectors; @Service public class CurrencyFacade { @@ -28,7 +32,11 @@ public class CurrencyFacade { return exchangeRateService.exchange(currencyFrom, currencyTo, amount); } - public Page<CurrencyDto> listPaged(Pageable pageRequest) { - return currencyService.listPage(pageRequest); + public Page<CurrencyDto> listPage(Pageable pageRequest) { + Page<Currency> currencies = currencyService.listPage(pageRequest); + List<CurrencyDto> dtos = currencies.getContent().stream() + .map(currency -> new CurrencyDto(currency.getName(), currency.getCode())) + .collect(Collectors.toList()); + return new PageImpl<>(dtos, pageRequest, currencies.getTotalElements()); } } diff --git a/currency-service/src/main/java/cz/muni/fi/obs/service/CurrencyService.java b/currency-service/src/main/java/cz/muni/fi/obs/service/CurrencyService.java index eb2a6f825acad0efb600e0e6fb953689abd6c561..512b9fa8f3000bf7a361fd4688d2e0c749e4a5e9 100644 --- a/currency-service/src/main/java/cz/muni/fi/obs/service/CurrencyService.java +++ b/currency-service/src/main/java/cz/muni/fi/obs/service/CurrencyService.java @@ -2,28 +2,22 @@ package cz.muni.fi.obs.service; import cz.muni.fi.obs.data.dbo.Currency; import cz.muni.fi.obs.data.repository.CurrencyRepository; -import cz.muni.fi.obs.dto.CurrencyDto; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import java.util.List; - @Service public class CurrencyService { private final CurrencyRepository currencyRepository; + @Autowired public CurrencyService(CurrencyRepository currencyRepository) { this.currencyRepository = currencyRepository; } - public Page<CurrencyDto> listPage(Pageable pageable) { - final Page<Currency> currencyPagedResult = currencyRepository.listPage(pageable); - List<CurrencyDto> results = currencyPagedResult.getContent().stream().map(currency -> - new CurrencyDto(currency.getName(), currency.getCode())).toList(); - - return new PageImpl<>(results, pageable, currencyPagedResult.getTotalElements()); + public Page<Currency> listPage(Pageable pageable) { + return currencyRepository.listPage(pageable); } } diff --git a/currency-service/src/main/java/cz/muni/fi/obs/service/ExchangeRateService.java b/currency-service/src/main/java/cz/muni/fi/obs/service/ExchangeRateService.java index 81d8b90e9cac48ca4abea053f78c89906d70d444..8e4858bbceb2d29f1d9ffb4dbbbc993ce16aa0c3 100644 --- a/currency-service/src/main/java/cz/muni/fi/obs/service/ExchangeRateService.java +++ b/currency-service/src/main/java/cz/muni/fi/obs/service/ExchangeRateService.java @@ -26,7 +26,7 @@ public class ExchangeRateService { this.exchangeRateRepository = exchangeRateRepository; } - public Currency findByCode(String code) { + private Currency findByCode(String code) { return currencyRepository.findByCode(code).orElseThrow(() -> new MissingObject(Currency.class, code)); } diff --git a/currency-service/src/main/java/cz/muni/fi/obs/service/CsvConfig.java b/currency-service/src/main/java/cz/muni/fi/obs/service/update/CsvConfig.java similarity index 90% rename from currency-service/src/main/java/cz/muni/fi/obs/service/CsvConfig.java rename to currency-service/src/main/java/cz/muni/fi/obs/service/update/CsvConfig.java index c72075d3f5b27fb9821b289ad6337b2e2472a7b3..0437d90fb7579080d383e72191382a7ba25e42da 100644 --- a/currency-service/src/main/java/cz/muni/fi/obs/service/CsvConfig.java +++ b/currency-service/src/main/java/cz/muni/fi/obs/service/update/CsvConfig.java @@ -1,4 +1,4 @@ -package cz.muni.fi.obs.service; +package cz.muni.fi.obs.service.update; import com.opencsv.CSVParser; import com.opencsv.CSVParserBuilder; diff --git a/currency-service/src/test/java/cz/muni/fi/obs/facade/CurrencyFacadeTest.java b/currency-service/src/test/java/cz/muni/fi/obs/facade/CurrencyFacadeTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0d1456616355c34402077ae6df6be3075e471dcd --- /dev/null +++ b/currency-service/src/test/java/cz/muni/fi/obs/facade/CurrencyFacadeTest.java @@ -0,0 +1,60 @@ +package cz.muni.fi.obs.facade; + +import cz.muni.fi.obs.data.dbo.Currency; +import cz.muni.fi.obs.dto.CurrencyDto; +import cz.muni.fi.obs.dto.CurrencyExchangeResult; +import cz.muni.fi.obs.service.CurrencyService; +import cz.muni.fi.obs.service.ExchangeRateService; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; + +import java.math.BigDecimal; +import java.util.List; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@SpringBootTest +class CurrencyFacadeTest { + + @Mock + private CurrencyService currencyService; + + @Mock + private ExchangeRateService exchangeRateService; + + @InjectMocks + private CurrencyFacade currencyFacade; + + @Autowired + private List<Currency> testData; + + @Test + void exchange_betweenTwoCurrencies_returnsResult() { + String code = testData.get(1).getCode(); + String code1 = testData.getFirst().getCode(); + when(exchangeRateService.exchange(any(String.class), any(String.class), any(BigDecimal.class))) + .thenReturn(new CurrencyExchangeResult(code1, code, 10.2, BigDecimal.valueOf(1000), BigDecimal.valueOf(10200))); + + CurrencyExchangeResult exchange = currencyFacade.exchange(code, code1, BigDecimal.valueOf(1000)); + + Assertions.assertThat(exchange.destAmount()).isEqualTo(BigDecimal.valueOf(10200)); + } + + @Test + void listPage_threeCurrenciesExist_returnsThreeCurrencies() { + Pageable pageable = Pageable.ofSize(10); + when(currencyService.listPage(pageable)).thenReturn(new PageImpl<>(testData, pageable, 3)); + + Page<CurrencyDto> currencies = currencyFacade.listPage(pageable); + + Assertions.assertThat(currencies.getTotalElements()).isEqualTo(3); + } +} \ No newline at end of file diff --git a/currency-service/src/test/java/cz/muni/fi/obs/service/CurrencyServiceTest.java b/currency-service/src/test/java/cz/muni/fi/obs/service/CurrencyServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..3fa02c34671ecffb39cc21f85624c6eeb7dcd923 --- /dev/null +++ b/currency-service/src/test/java/cz/muni/fi/obs/service/CurrencyServiceTest.java @@ -0,0 +1,40 @@ +package cz.muni.fi.obs.service; + +import cz.muni.fi.obs.data.dbo.Currency; +import cz.muni.fi.obs.data.repository.CurrencyRepository; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +import static org.mockito.Mockito.when; + +@SpringBootTest +class CurrencyServiceTest { + + @Mock + private CurrencyRepository currencyRepository; + + @InjectMocks + private CurrencyService currencyService; + + @Autowired + private List<Currency> mockData; + + @Test + public void listPage_whenThreeCurrenciesPresent_returnsThreeCurrencies() { + Pageable pageable = Pageable.ofSize(10); + when(currencyRepository.listPage(pageable)).thenReturn(new PageImpl<>(mockData, pageable, 3)); + + Page<Currency> currencies = currencyService.listPage(pageable); + + Assertions.assertThat(currencies.getTotalElements()).isEqualTo(3); + } +} \ No newline at end of file diff --git a/currency-service/src/test/java/cz/muni/fi/obs/service/CurrencySheetsResponse.java b/currency-service/src/test/java/cz/muni/fi/obs/service/updaters/CurrencySheetsResponse.java similarity index 94% rename from currency-service/src/test/java/cz/muni/fi/obs/service/CurrencySheetsResponse.java rename to currency-service/src/test/java/cz/muni/fi/obs/service/updaters/CurrencySheetsResponse.java index 9bbe208220c102bdda34f55468303898aa93e556..b1f2b94a1cdce4f4dcd72739a3e3b03d4c70b382 100644 --- a/currency-service/src/test/java/cz/muni/fi/obs/service/CurrencySheetsResponse.java +++ b/currency-service/src/test/java/cz/muni/fi/obs/service/updaters/CurrencySheetsResponse.java @@ -1,4 +1,4 @@ -package cz.muni.fi.obs.service; +package cz.muni.fi.obs.service.updaters; public class CurrencySheetsResponse { diff --git a/currency-service/src/test/java/cz/muni/fi/obs/service/NbsCurrencyUpdateServiceTest.java b/currency-service/src/test/java/cz/muni/fi/obs/service/updaters/NbsCurrencyUpdateServiceTest.java similarity index 96% rename from currency-service/src/test/java/cz/muni/fi/obs/service/NbsCurrencyUpdateServiceTest.java rename to currency-service/src/test/java/cz/muni/fi/obs/service/updaters/NbsCurrencyUpdateServiceTest.java index df034b74d29aff584a711bce73e405114053fdfd..7e1c7bdb16c2126fdf0573a11c8413845acfdf1e 100644 --- a/currency-service/src/test/java/cz/muni/fi/obs/service/NbsCurrencyUpdateServiceTest.java +++ b/currency-service/src/test/java/cz/muni/fi/obs/service/updaters/NbsCurrencyUpdateServiceTest.java @@ -1,4 +1,4 @@ -package cz.muni.fi.obs.service; +package cz.muni.fi.obs.service.updaters; import cz.muni.fi.obs.data.repository.CurrencyRepository; import cz.muni.fi.obs.service.update.NbsCurrencyUpdateService;