Skip to content

Commit f9d5704

Browse files
authored
Enhance decimal validation to match actual Jakarta Validation behavior and fix related issues (#1131)
1 parent fdbecc3 commit f9d5704

File tree

9 files changed

+447
-632
lines changed

9 files changed

+447
-632
lines changed

Diff for: fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/constraint/JavaDecimalConstraint.java

+20-60
Original file line numberDiff line numberDiff line change
@@ -28,92 +28,52 @@
2828
@API(since = "0.6.8", status = Status.MAINTAINED)
2929
public final class JavaDecimalConstraint {
3030
@Nullable
31-
private final BigDecimal positiveMin;
31+
private final BigDecimal min;
3232

3333
@Nullable
34-
private final Boolean positiveMinInclusive;
34+
private final Boolean minInclusive;
3535

3636
@Nullable
37-
private final BigDecimal positiveMax;
37+
private final BigDecimal max;
3838

3939
@Nullable
40-
private final Boolean positiveMaxInclusive;
41-
42-
@Nullable
43-
private final BigDecimal negativeMin;
44-
45-
@Nullable
46-
private final Boolean negativeMinInclusive;
47-
48-
@Nullable
49-
private final BigDecimal negativeMax;
50-
51-
@Nullable
52-
private final Boolean negativeMaxInclusive;
40+
private final Boolean maxInclusive;
5341

5442
@Nullable
5543
private final Integer scale;
5644

5745
public JavaDecimalConstraint(
58-
@Nullable BigDecimal positiveMin,
59-
@Nullable Boolean positiveMinInclusive,
60-
@Nullable BigDecimal positiveMax,
61-
@Nullable Boolean positiveMaxInclusive,
62-
@Nullable BigDecimal negativeMin,
63-
@Nullable Boolean negativeMinInclusive,
64-
@Nullable BigDecimal negativeMax,
65-
@Nullable Boolean negativeMaxInclusive,
46+
@Nullable BigDecimal min,
47+
@Nullable Boolean minInclusive,
48+
@Nullable BigDecimal max,
49+
@Nullable Boolean maxInclusive,
6650
@Nullable Integer scale
6751
) {
68-
this.positiveMin = positiveMin;
69-
this.positiveMinInclusive = positiveMinInclusive;
70-
this.positiveMax = positiveMax;
71-
this.positiveMaxInclusive = positiveMaxInclusive;
72-
this.negativeMin = negativeMin;
73-
this.negativeMinInclusive = negativeMinInclusive;
74-
this.negativeMax = negativeMax;
75-
this.negativeMaxInclusive = negativeMaxInclusive;
52+
this.min = min;
53+
this.minInclusive = minInclusive;
54+
this.max = max;
55+
this.maxInclusive = maxInclusive;
7656
this.scale = scale;
7757
}
7858

7959
@Nullable
80-
public BigDecimal getPositiveMin() {
81-
return positiveMin;
82-
}
83-
84-
@Nullable
85-
public Boolean getPositiveMinInclusive() {
86-
return positiveMinInclusive;
87-
}
88-
89-
@Nullable
90-
public BigDecimal getPositiveMax() {
91-
return positiveMax;
92-
}
93-
94-
@Nullable
95-
public Boolean getPositiveMaxInclusive() {
96-
return positiveMaxInclusive;
97-
}
98-
99-
@Nullable
100-
public BigDecimal getNegativeMin() {
101-
return negativeMin;
60+
public BigDecimal getMin() {
61+
return min;
10262
}
10363

10464
@Nullable
105-
public Boolean getNegativeMinInclusive() {
106-
return negativeMinInclusive;
65+
public Boolean getMinInclusive() {
66+
return minInclusive;
10767
}
10868

10969
@Nullable
110-
public BigDecimal getNegativeMax() {
111-
return negativeMax;
70+
public BigDecimal getMax() {
71+
return max;
11272
}
11373

11474
@Nullable
115-
public Boolean getNegativeMaxInclusive() {
116-
return negativeMaxInclusive;
75+
public Boolean getMaxInclusive() {
76+
return maxInclusive;
11777
}
11878

11979
@Nullable

Diff for: fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/generator/ValidateArbitraryGenerator.java

+10-40
Original file line numberDiff line numberDiff line change
@@ -133,52 +133,22 @@ public CombinableArbitrary<?> generate(ArbitraryGeneratorContext context) {
133133

134134
BigDecimal value = toBigDecimal(it);
135135

136-
if (value.compareTo(BigDecimal.ZERO) < 0) {
137-
if (javaDecimalConstraint.getNegativeMin() != null) {
138-
if (value.compareTo(javaDecimalConstraint.getNegativeMin()) == 0
139-
&& Boolean.FALSE.equals(javaDecimalConstraint.getNegativeMinInclusive())) {
140-
return false;
141-
}
142-
143-
if (value.compareTo(javaDecimalConstraint.getNegativeMin()) < 0) {
144-
return false;
145-
}
136+
if (javaDecimalConstraint.getMin() != null) {
137+
if (value.compareTo(javaDecimalConstraint.getMin()) == 0
138+
&& Boolean.FALSE.equals(javaDecimalConstraint.getMinInclusive())) {
139+
return false;
146140
}
147141

148-
if (javaDecimalConstraint.getNegativeMax() != null) {
149-
if (value.compareTo(javaDecimalConstraint.getNegativeMax()) == 0
150-
&& Boolean.FALSE.equals(javaDecimalConstraint.getNegativeMaxInclusive())) {
151-
return false;
152-
}
153-
154-
if (value.compareTo(javaDecimalConstraint.getNegativeMax()) > 0) {
155-
return false;
156-
}
157-
}
142+
return value.compareTo(javaDecimalConstraint.getMin()) >= 0;
158143
}
159144

160-
if (value.compareTo(BigDecimal.ZERO) > 0) {
161-
if (javaDecimalConstraint.getPositiveMin() != null) {
162-
if (value.compareTo(javaDecimalConstraint.getPositiveMin()) == 0
163-
&& Boolean.FALSE.equals(javaDecimalConstraint.getPositiveMinInclusive())) {
164-
return false;
165-
}
166-
167-
if (value.compareTo(javaDecimalConstraint.getPositiveMin()) < 0) {
168-
return false;
169-
}
145+
if (javaDecimalConstraint.getMax() != null) {
146+
if (value.compareTo(javaDecimalConstraint.getMax()) == 0
147+
&& Boolean.FALSE.equals(javaDecimalConstraint.getMaxInclusive())) {
148+
return false;
170149
}
171150

172-
if (javaDecimalConstraint.getPositiveMax() != null) {
173-
if (value.compareTo(javaDecimalConstraint.getPositiveMax()) == 0
174-
&& Boolean.FALSE.equals(javaDecimalConstraint.getPositiveMaxInclusive())) {
175-
return false;
176-
}
177-
178-
if (value.compareTo(javaDecimalConstraint.getPositiveMax()) > 0) {
179-
return false;
180-
}
181-
}
151+
return value.compareTo(javaDecimalConstraint.getMax()) <= 0;
182152
}
183153

184154
return true;

0 commit comments

Comments
 (0)