package eu.ztsh.wymiana.validation; import eu.ztsh.wymiana.EntityCreator; import eu.ztsh.wymiana.web.model.CurrencyExchangeRequest; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import java.util.stream.Stream; import static eu.ztsh.wymiana.EntityCreator.Constants.*; class ValidExchangeRequestValidatorTest extends ValidatorTest { protected ValidExchangeRequestValidatorTest() { super(new ValidExchangeRequestValidator()); } @Test @DisplayName("Valid request with buy value specified") void validRequestWithBuyTest() { assertThatValidation(EntityCreator.exchangeRequest() .from(PLN_SYMBOL) .to(USD_SYMBOL) .toBuy(USD_BUY) .build()).isTrue(); } @Test @DisplayName("Valid request with sell value specified") void validRequestWithSellTest() { assertThatValidation(EntityCreator.exchangeRequest() .from(PLN_SYMBOL) .to(USD_SYMBOL) .toSell(USD_SELL) .build()).isTrue(); } @Disabled("Already validated (has field annotation)") @DisplayName("Invalid PESEL value") @ParameterizedTest @MethodSource void invalidPeselTest(String pesel) { assertThatValidation(EntityCreator.exchangeRequest() .pesel(pesel) .from(PLN_SYMBOL) .to(USD_SYMBOL) .toSell(USD_SELL) .build()).isFalse(); } @Test @DisplayName("From and To have same value") void sameFromToTest() { assertThatValidation(EntityCreator.exchangeRequest() .from(USD_SYMBOL) .to(USD_SYMBOL) .toSell(USD_SELL) .build()).isFalse(); } @Test @DisplayName("Empty amounts") void emptyBuySellTest() { assertThatValidation(EntityCreator.exchangeRequest() .from(PLN_SYMBOL) .to(USD_SYMBOL) .build()).isFalse(); } @Disabled("Already validated (has field annotation)") @Test @DisplayName("Empty 'from' value") void emptyFromTest() { assertThatValidation(EntityCreator.exchangeRequest() .to(USD_SYMBOL) .toSell(USD_SELL) .build()).isFalse(); } @Disabled("Already validated (has field annotation)") @Test @DisplayName("Empty 'to' value") void emptyToTest() { assertThatValidation(EntityCreator.exchangeRequest() .from(PLN_SYMBOL) .toSell(USD_SELL) .build()).isFalse(); } @Test @DisplayName("Both Buy and Sell params filled in") void bothFilledBuySellTest() { assertThatValidation(EntityCreator.exchangeRequest() .from(PLN_SYMBOL) .to(USD_SYMBOL) .toBuy(USD_BUY) .toSell(USD_SELL) .build()).isFalse(); } @Test @DisplayName("Negative buy amount value") void negativeBuyAmountTest() { assertThatValidation(EntityCreator.exchangeRequest() .from(PLN_SYMBOL) .to(USD_SYMBOL) .toBuy(-1.0) .build()).isFalse(); } @Test @DisplayName("Negative sell amount value") void negativeSellAmountTest() { assertThatValidation(EntityCreator.exchangeRequest() .from(PLN_SYMBOL) .to(USD_SYMBOL) .toSell(-1.0) .build()).isFalse(); } private static Stream invalidPeselTest() { return Stream.of("INVALID", PESEL.replace('6', '7')); } }