test: CurrencyServiceTest completed?

This commit is contained in:
Piotr Dec 2024-05-24 16:25:19 +02:00
parent 6d8a2093b9
commit c87bcc8b54
Signed by: stawros
GPG key ID: F89F27AD8F881A91
6 changed files with 128 additions and 9 deletions

View file

@ -3,9 +3,11 @@ package eu.ztsh.wymiana.service;
import eu.ztsh.wymiana.EntityCreator;
import eu.ztsh.wymiana.RepositoryBasedTest;
import eu.ztsh.wymiana.data.repository.UserRepository;
import eu.ztsh.wymiana.exception.ExchangeFailedException;
import eu.ztsh.wymiana.exception.InsufficientFundsException;
import eu.ztsh.wymiana.validation.InstanceValidator;
import eu.ztsh.wymiana.validation.ValidationFailedException;
import jakarta.transaction.Transactional;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
@ -32,8 +34,11 @@ class CurrencyServiceTest extends RepositoryBasedTest {
currencyService = new CurrencyService(new UserService(userRepository, instanceValidator), nbp, instanceValidator);
}
@Transactional
@Test
void toSellSuccessTest() {
void plnToUsdToSellSuccessTest() {
var entity = EntityCreator.user().build();
userRepository.save(entity);
var result = currencyService.exchange(EntityCreator.exchangeRequest()
.from(PLN_SYMBOL)
.to(USD_SYMBOL)
@ -45,8 +50,11 @@ class CurrencyServiceTest extends RepositoryBasedTest {
expect(expected);
}
@Transactional
@Test
void toBuySuccessTest() {
void plnToUsdToBuySuccessTest() {
var entity = EntityCreator.user().build();
userRepository.save(entity);
var result = currencyService.exchange(EntityCreator.exchangeRequest()
.from(PLN_SYMBOL)
.to(USD_SYMBOL)
@ -57,6 +65,37 @@ 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();
userRepository.save(entity);
var result = currencyService.exchange(EntityCreator.exchangeRequest()
.from(USD_SYMBOL)
.to(PLN_SYMBOL)
.toSell(USD_SELL)
.build());
assertThat(result.currencies())
.matches(map -> map.get(PLN_SYMBOL).amount() == PLN && map.get(USD_SYMBOL).amount() == 0);
var expected = EntityCreator.user().pln(PLN).usd(0).build();
expect(expected);
}
@Transactional
@Test
void usdToPlnToBuySuccessTest() {
var entity = EntityCreator.user().build();
userRepository.save(entity);
var result = currencyService.exchange(EntityCreator.exchangeRequest()
.from(USD_SYMBOL)
.to(PLN_SYMBOL)
.toBuy(PLN)
.build());
assertThat(result.currencies())
.matches(map -> map.get(PLN_SYMBOL).amount() == PLN && map.get(USD_SYMBOL).amount() == 0);
var expected = EntityCreator.user().pln(PLN).usd(0).build();
expect(expected);
}
@Test
void insufficientFundsTest() {
@ -80,7 +119,19 @@ class CurrencyServiceTest extends RepositoryBasedTest {
.toSell(USD_SELL)
.build();
assertThatThrownBy(() -> currencyService.exchange(entity))
.isInstanceOf(ValidationFailedException.class);
.isInstanceOf(ValidationFailedException.class)
.hasMessageContaining("PESEL");
}
@Test
void notExistingUserTest() {
var entity = EntityCreator.exchangeRequest()
.from(PLN_SYMBOL)
.to(USD_SYMBOL)
.toSell(USD_SELL)
.build();
assertThatThrownBy(() -> currencyService.exchange(entity))
.isInstanceOf(ExchangeFailedException.class);
}
@Test
@ -91,7 +142,8 @@ class CurrencyServiceTest extends RepositoryBasedTest {
.toSell(USD_SELL)
.build();
assertThatThrownBy(() -> currencyService.exchange(entity))
.isInstanceOf(ValidationFailedException.class);
.isInstanceOf(ValidationFailedException.class)
.hasMessageContaining("null");
}
@Test
@ -102,7 +154,8 @@ class CurrencyServiceTest extends RepositoryBasedTest {
.toSell(USD_SELL)
.build();
assertThatThrownBy(() -> currencyService.exchange(entity))
.isInstanceOf(ValidationFailedException.class);
.isInstanceOf(ValidationFailedException.class)
.hasMessageContaining("null");
}
private static Stream<String> invalidPeselTest() {