diff --git a/src/main/java/eu/ztsh/wymiana/validation/ValidExchangeRequest.java b/src/main/java/eu/ztsh/wymiana/validation/ValidExchangeRequest.java new file mode 100644 index 0000000..608bc3c --- /dev/null +++ b/src/main/java/eu/ztsh/wymiana/validation/ValidExchangeRequest.java @@ -0,0 +1,24 @@ +package eu.ztsh.wymiana.validation; + +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.TYPE_USE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + + +@Retention(RUNTIME) +@Target({ TYPE_USE }) +@Documented +@Constraint(validatedBy = {ValidExchangeRequestValidator.class }) +public @interface ValidExchangeRequest { + + String message() default "Exchange request is not valid"; + Class[] groups() default { }; + Class[] payload() default { }; + +} diff --git a/src/main/java/eu/ztsh/wymiana/validation/ValidExchangeRequestValidator.java b/src/main/java/eu/ztsh/wymiana/validation/ValidExchangeRequestValidator.java new file mode 100644 index 0000000..43d4f1f --- /dev/null +++ b/src/main/java/eu/ztsh/wymiana/validation/ValidExchangeRequestValidator.java @@ -0,0 +1,15 @@ +package eu.ztsh.wymiana.validation; + +import eu.ztsh.wymiana.web.model.CurrencyExchangeRequest; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +public class ValidExchangeRequestValidator implements ConstraintValidator { + + @Override + public boolean isValid(CurrencyExchangeRequest currencyExchangeRequest, + ConstraintValidatorContext constraintValidatorContext) { + return false; + } + +} diff --git a/src/main/java/eu/ztsh/wymiana/web/model/CurrencyExchangeRequest.java b/src/main/java/eu/ztsh/wymiana/web/model/CurrencyExchangeRequest.java new file mode 100644 index 0000000..54f192e --- /dev/null +++ b/src/main/java/eu/ztsh/wymiana/web/model/CurrencyExchangeRequest.java @@ -0,0 +1,18 @@ +package eu.ztsh.wymiana.web.model; + +import eu.ztsh.wymiana.validation.ValidExchangeRequest; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import org.hibernate.validator.constraints.pl.PESEL; + +@Builder +@ValidExchangeRequest +public record CurrencyExchangeRequest( + @PESEL String pesel, + @NotNull String from, + @NotNull String to, + Double toBuy, + Double toSell +) { + +} diff --git a/src/test/java/eu/ztsh/wymiana/validation/ValidExchangeRequestValidatorTest.java b/src/test/java/eu/ztsh/wymiana/validation/ValidExchangeRequestValidatorTest.java new file mode 100644 index 0000000..e990658 --- /dev/null +++ b/src/test/java/eu/ztsh/wymiana/validation/ValidExchangeRequestValidatorTest.java @@ -0,0 +1,54 @@ +package eu.ztsh.wymiana.validation; + +import eu.ztsh.wymiana.web.model.CurrencyExchangeRequest; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class ValidExchangeRequestValidatorTest extends ValidatorTest { + + protected ValidExchangeRequestValidatorTest() { + super(new ValidExchangeRequestValidator()); + } + + @Test + @DisplayName("Valid request with buy value specified") + void validRequestWithBuyTest() { + + } + + @Test + @DisplayName("Valid request with sell value specified") + void validRequestWithSellTest() { + + } + + @Test + @DisplayName("Invalid PESEL value") + void invalidPeselTest() { + + } + + @Test + @DisplayName("From and To have same value") + void sameFromToTest() { + + } + + @Test + @DisplayName("Empty amounts") + void emptyBuySellTest() { + + } + + @Test + @DisplayName("Both Buy and Sell params filled in") + void bothFilledBuySellTest() { + + } + @Test + @DisplayName("Negative amount value") + void negativeAmountTest() { + + } + +}