-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #38 from avaje/feature/avaje-decimalMaxMin
Add support for avaje DecimalMax DecimalMin
- Loading branch information
Showing
5 changed files
with
301 additions
and
0 deletions.
There are no files selected for viewing
55 changes: 55 additions & 0 deletions
55
blackbox-test/src/test/java/example/avaje/AMyMinNumbers.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
package example.avaje; | ||
|
||
import jakarta.validation.Valid; | ||
import io.avaje.validation.constraints.DecimalMin; | ||
|
||
import java.math.BigDecimal; | ||
|
||
@Valid | ||
public class AMyMinNumbers { | ||
|
||
private static final BigDecimal VALID = new BigDecimal("20"); | ||
|
||
@DecimalMin("10.50") | ||
final BigDecimal price; | ||
|
||
@DecimalMin(value = "9.30", inclusive = false) | ||
final BigDecimal priceInc; | ||
|
||
@DecimalMin("9.50") | ||
final double dmin; | ||
|
||
@DecimalMin(value = "8.30", inclusive = false) | ||
final double dminInc; | ||
|
||
public AMyMinNumbers(BigDecimal price, BigDecimal priceInc) { | ||
this.price = price; | ||
this.priceInc = priceInc; | ||
this.dmin = 20; | ||
this.dminInc = 20; | ||
} | ||
|
||
public AMyMinNumbers(double dmin, double dminInc) { | ||
this.price = VALID; | ||
this.priceInc = VALID; | ||
this.dmin = dmin; | ||
this.dminInc = dminInc; | ||
} | ||
|
||
public BigDecimal price() { | ||
return price; | ||
} | ||
|
||
public BigDecimal priceInc() { | ||
return priceInc; | ||
} | ||
|
||
|
||
public double dmin() { | ||
return dmin; | ||
} | ||
|
||
public double dminInc() { | ||
return dminInc; | ||
} | ||
} |
97 changes: 97 additions & 0 deletions
97
blackbox-test/src/test/java/example/avaje/AMyMinNumbersTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
package example.avaje; | ||
|
||
import io.avaje.validation.ConstraintViolation; | ||
import io.avaje.validation.ConstraintViolationException; | ||
import io.avaje.validation.Validator; | ||
import org.junit.jupiter.api.Test; | ||
|
||
import java.math.BigDecimal; | ||
import java.util.ArrayList; | ||
import java.util.Locale; | ||
|
||
import static java.math.BigDecimal.ONE; | ||
import static org.assertj.core.api.Assertions.assertThat; | ||
import static org.assertj.core.api.Assertions.fail; | ||
|
||
class AMyMinNumbersTest { | ||
|
||
final Validator validator = Validator.builder().build(); | ||
|
||
final BigDecimal valid = new BigDecimal("20"); | ||
|
||
@Test | ||
void valid() { | ||
var bean = new AMyMinNumbers(valid, valid); | ||
validator.validate(bean); | ||
} | ||
|
||
@Test | ||
void validDouble() { | ||
var bean = new AMyMinNumbers(20d, 20d); | ||
validator.validate(bean); | ||
} | ||
|
||
@Test | ||
void decimalMin() { | ||
var violation = one(new AMyMinNumbers(ONE, valid)); | ||
assertThat(violation.message()).isEqualTo("must be greater than or equal to 10.50"); | ||
} | ||
|
||
@Test | ||
void decimalMinDE() { | ||
var violation = one(new AMyMinNumbers(ONE, valid), Locale.GERMAN); | ||
assertThat(violation.message()).isEqualTo("muss größer oder gleich 10.50 sein"); | ||
} | ||
|
||
@Test | ||
void decimalMinExclusive() { | ||
var violation = one(new AMyMinNumbers(valid, ONE)); | ||
assertThat(violation.message()).isEqualTo("must be greater than 9.30"); | ||
} | ||
|
||
@Test | ||
void decimalMaxExclusiveDE() { | ||
var violation = one(new AMyMinNumbers(valid, ONE), Locale.GERMAN); | ||
assertThat(violation.message()).isEqualTo("muss größer 9.30 sein"); | ||
} | ||
|
||
@Test | ||
void doubleDecimalMin() { | ||
var violation = one(new AMyMinNumbers(1d, 20d)); | ||
assertThat(violation.message()).isEqualTo("must be greater than or equal to 9.50"); | ||
} | ||
|
||
@Test | ||
void doubleDecimalMinDE() { | ||
var violation = one(new AMyMinNumbers(1d, 20d), Locale.GERMAN); | ||
assertThat(violation.message()).isEqualTo("muss größer oder gleich 9.50 sein"); | ||
} | ||
|
||
@Test | ||
void doubleDecimalMinExclusive() { | ||
var violation = one(new AMyMinNumbers(20d, 1d)); | ||
assertThat(violation.message()).isEqualTo("must be greater than 8.30"); | ||
} | ||
|
||
@Test | ||
void doubleDecimalMaxExclusiveDE() { | ||
var violation = one(new AMyMinNumbers(20d, 1d), Locale.GERMAN); | ||
assertThat(violation.message()).isEqualTo("muss größer 8.30 sein"); | ||
} | ||
|
||
ConstraintViolation one(Object any) { | ||
return one(any, Locale.ENGLISH); | ||
} | ||
|
||
ConstraintViolation one(Object any, Locale locale) { | ||
try { | ||
validator.validate(any, locale); | ||
fail("not expected"); | ||
return null; | ||
} catch (ConstraintViolationException e) { | ||
var violations = new ArrayList<>(e.violations()); | ||
assertThat(violations).hasSize(1); | ||
return violations.get(0); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
package example.avaje; | ||
|
||
import io.avaje.validation.ValidPojo; | ||
import io.avaje.validation.constraints.DecimalMax; | ||
|
||
import java.math.BigDecimal; | ||
|
||
@ValidPojo | ||
public class AMyNumbers { | ||
|
||
@DecimalMax("10.50") | ||
final BigDecimal price; | ||
|
||
@DecimalMax(value = "9.30", inclusive = false) | ||
final BigDecimal priceInc; | ||
|
||
@DecimalMax("9.50") | ||
final double dprice; | ||
|
||
@DecimalMax(value = "8.30", inclusive = false) | ||
final double dpriceInc; | ||
|
||
public AMyNumbers(BigDecimal price, BigDecimal priceInc) { | ||
this.price = price; | ||
this.priceInc = priceInc; | ||
this.dprice = 1d; | ||
this.dpriceInc = 1d; | ||
} | ||
|
||
public AMyNumbers(double dprice, double dpriceInc) { | ||
this.price = BigDecimal.ONE; | ||
this.priceInc = BigDecimal.ONE; | ||
this.dprice = dprice; | ||
this.dpriceInc = dpriceInc; | ||
} | ||
|
||
public BigDecimal price() { | ||
return price; | ||
} | ||
|
||
public BigDecimal priceInc() { | ||
return priceInc; | ||
} | ||
|
||
public double dprice() { | ||
return dprice; | ||
} | ||
|
||
public double dpriceInc() { | ||
return dpriceInc; | ||
} | ||
} |
95 changes: 95 additions & 0 deletions
95
blackbox-test/src/test/java/example/avaje/AMyNumbersTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
package example.avaje; | ||
|
||
import io.avaje.validation.ConstraintViolation; | ||
import io.avaje.validation.ConstraintViolationException; | ||
import io.avaje.validation.Validator; | ||
import org.junit.jupiter.api.Test; | ||
|
||
import java.math.BigDecimal; | ||
import java.util.ArrayList; | ||
import java.util.Locale; | ||
|
||
import static java.math.BigDecimal.ONE; | ||
import static org.assertj.core.api.Assertions.assertThat; | ||
import static org.assertj.core.api.Assertions.fail; | ||
|
||
class AMyNumbersTest { | ||
|
||
final Validator validator = Validator.builder().build(); | ||
|
||
@Test | ||
void valid() { | ||
var bean = new AMyNumbers(ONE, ONE); | ||
validator.validate(bean); | ||
} | ||
|
||
@Test | ||
void validDouble() { | ||
var bean = new AMyNumbers(1d, 1d); | ||
validator.validate(bean); | ||
} | ||
|
||
@Test | ||
void decimalMax() { | ||
var violation = one(new AMyNumbers(new BigDecimal("11"), ONE)); | ||
assertThat(violation.message()).isEqualTo("must be less than or equal to 10.50"); | ||
} | ||
|
||
@Test | ||
void decimalMaxDE() { | ||
var violation = one(new AMyNumbers(new BigDecimal("11"), ONE), Locale.GERMAN); | ||
assertThat(violation.message()).isEqualTo("muss kleiner oder gleich 10.50 sein"); | ||
} | ||
|
||
@Test | ||
void decimalMaxExclusive() { | ||
var violation = one(new AMyNumbers(ONE, new BigDecimal("11"))); | ||
assertThat(violation.message()).isEqualTo("must be less than 9.30"); | ||
} | ||
|
||
@Test | ||
void decimalMaxExclusiveDE() { | ||
var violation = one(new AMyNumbers(ONE, new BigDecimal("11")), Locale.GERMAN); | ||
assertThat(violation.message()).isEqualTo("muss kleiner 9.30 sein"); | ||
} | ||
|
||
@Test | ||
void doubleDecimalMax() { | ||
var violation = one(new AMyNumbers(11d, 1d)); | ||
assertThat(violation.message()).isEqualTo("must be less than or equal to 9.50"); | ||
} | ||
|
||
@Test | ||
void doubleDecimalMaxDE() { | ||
var violation = one(new AMyNumbers(11d, 1d), Locale.GERMAN); | ||
assertThat(violation.message()).isEqualTo("muss kleiner oder gleich 9.50 sein"); | ||
} | ||
|
||
@Test | ||
void doubleDecimalMaxExclusive() { | ||
var violation = one(new AMyNumbers(1d, 11d)); | ||
assertThat(violation.message()).isEqualTo("must be less than 8.30"); | ||
} | ||
|
||
@Test | ||
void doubleDecimalMaxExclusiveDE() { | ||
var violation = one(new AMyNumbers(1d, 11d), Locale.GERMAN); | ||
assertThat(violation.message()).isEqualTo("muss kleiner 8.30 sein"); | ||
} | ||
|
||
ConstraintViolation one(Object any) { | ||
return one(any, Locale.ENGLISH); | ||
} | ||
|
||
ConstraintViolation one(Object any, Locale locale) { | ||
try { | ||
validator.validate(any, locale); | ||
fail("not expected"); | ||
return null; | ||
} catch (ConstraintViolationException e) { | ||
var violations = new ArrayList<>(e.violations()); | ||
assertThat(violations).hasSize(1); | ||
return violations.get(0); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters