fix: exchange method fixes

This commit is contained in:
Piotr Dec 2024-05-24 17:19:30 +02:00
parent c87bcc8b54
commit 71109174f7
Signed by: stawros
GPG key ID: F89F27AD8F881A91
2 changed files with 73 additions and 13 deletions

View file

@ -29,8 +29,8 @@ class CurrencyServiceTest extends RepositoryBasedTest {
public CurrencyServiceTest(UserRepository userRepository, InstanceValidator instanceValidator) {
super(userRepository);
var nbp = Mockito.mock(NbpService.class);
Mockito.when(nbp.getSellRate("USD")).thenReturn(USD_SELL);
Mockito.when(nbp.getBuyRate("USD")).thenReturn(USD_BUY);
Mockito.when(nbp.getSellRate("USD")).thenReturn(SELL_RATE);
Mockito.when(nbp.getBuyRate("USD")).thenReturn(BUY_RATE);
currencyService = new CurrencyService(new UserService(userRepository, instanceValidator), nbp, instanceValidator);
}
@ -65,10 +65,11 @@ class CurrencyServiceTest extends RepositoryBasedTest {
var expected = EntityCreator.user().pln(0).usd(USD_BUY).build();
expect(expected);
}
@Transactional
@Test
void usdToPlnToSellSuccessTest() {
var entity = EntityCreator.user().build();
var entity = EntityCreator.user().pln(0).usd(USD_SELL).build();
userRepository.save(entity);
var result = currencyService.exchange(EntityCreator.exchangeRequest()
.from(USD_SYMBOL)
@ -84,7 +85,7 @@ class CurrencyServiceTest extends RepositoryBasedTest {
@Transactional
@Test
void usdToPlnToBuySuccessTest() {
var entity = EntityCreator.user().build();
var entity = EntityCreator.user().pln(0).usd(USD_SELL).build();
userRepository.save(entity);
var result = currencyService.exchange(EntityCreator.exchangeRequest()
.from(USD_SYMBOL)
@ -97,14 +98,57 @@ class CurrencyServiceTest extends RepositoryBasedTest {
expect(expected);
}
@Transactional
@Test
void usdToPlnNoUsdCurrencyTest() {
var entity = EntityCreator.user().build();
userRepository.save(entity);
var request = EntityCreator.exchangeRequest()
.from(USD_SYMBOL)
.to(PLN_SYMBOL)
.toBuy(PLN)
.build();
assertThatThrownBy(() -> currencyService.exchange(request))
.isInstanceOf(InsufficientFundsException.class);
}
@Transactional
@Test
void doubleExchangeTest() {
var initialValue = 100;
var entity = EntityCreator.user().pln(initialValue).build();
userRepository.save(entity);
var result1 = currencyService.exchange(EntityCreator.exchangeRequest()
.from(PLN_SYMBOL)
.to(USD_SYMBOL)
.toBuy(USD_BUY)
.build());
var result2 = currencyService.exchange(EntityCreator.exchangeRequest()
.from(USD_SYMBOL)
.to(PLN_SYMBOL)
.toSell(USD_BUY)
.build());
var resultOptional = userRepository.findById(entity.getPesel());
assertThat(resultOptional)
.isNotEmpty();
var resultEntity = resultOptional.get();
assertThat(resultEntity.getCurrencies()
.stream()
.filter(c -> c.getSymbol().equalsIgnoreCase("PLN"))
.findFirst()).isNotEmpty().get().matches(currencyEntity -> currencyEntity.getAmount() < initialValue);
}
@Transactional
@Test
void insufficientFundsTest() {
var entity = EntityCreator.exchangeRequest()
var entity = EntityCreator.user().build();
userRepository.save(entity);
var request = EntityCreator.exchangeRequest()
.from(PLN_SYMBOL)
.to(USD_SYMBOL)
.toBuy(PLN)
.build();
assertThatThrownBy(() -> currencyService.exchange(entity))
assertThatThrownBy(() -> currencyService.exchange(request))
.isInstanceOf(InsufficientFundsException.class);
}