From a5cc4d569865644326f8c212625fd64453ae5094 Mon Sep 17 00:00:00 2001 From: xkollar3 <xkollar3@fi.muni.cz> Date: Tue, 2 Apr 2024 19:35:44 +0200 Subject: [PATCH] added more tests for currency service --- .../fi/obs/controller/CurrencyController.java | 2 +- .../cz/muni/fi/obs/facade/CurrencyFacade.java | 12 +++- .../muni/fi/obs/service/CurrencyService.java | 14 ++--- .../fi/obs/service/ExchangeRateService.java | 2 +- .../obs/service/{ => update}/CsvConfig.java | 2 +- .../fi/obs/facade/CurrencyFacadeTest.java | 60 +++++++++++++++++++ .../fi/obs/service/CurrencyServiceTest.java | 40 +++++++++++++ .../CurrencySheetsResponse.java | 2 +- .../NbsCurrencyUpdateServiceTest.java | 2 +- 9 files changed, 119 insertions(+), 17 deletions(-) rename currency-service/src/main/java/cz/muni/fi/obs/service/{ => update}/CsvConfig.java (90%) create mode 100644 currency-service/src/test/java/cz/muni/fi/obs/facade/CurrencyFacadeTest.java create mode 100644 currency-service/src/test/java/cz/muni/fi/obs/service/CurrencyServiceTest.java rename currency-service/src/test/java/cz/muni/fi/obs/service/{ => updaters}/CurrencySheetsResponse.java (94%) rename currency-service/src/test/java/cz/muni/fi/obs/service/{ => updaters}/NbsCurrencyUpdateServiceTest.java (96%) 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 d110f69..62e65e1 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 75d4941..85d41b9 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 eb2a6f8..512b9fa 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 81d8b90..8e4858b 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 c72075d..0437d90 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 0000000..0d14566 --- /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 0000000..3fa02c3 --- /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 9bbe208..b1f2b94 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 df034b7..7e1c7bd 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; -- GitLab