Skip to content

Commit 0426dcd

Browse files
committed
Refine contribution j-easy#448
* Update tests with BV constraints on methods * Add test to cover BV constraints precedence * Add murdos to contributors list
1 parent 0e56afa commit 0426dcd

File tree

4 files changed

+67
-0
lines changed

4 files changed

+67
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ If you believe you found a bug or have any question, please use the [issue track
215215
* [Adriano Machado](https://github.com/ammachado)
216216
* [Alberto Lagna](https://github.com/alagna)
217217
* [Andrew Neal](https://github.com/aeneal)
218+
* [Aurélien Mino](https://github.com/murdos)
218219
* [Arne Zelasko](https://github.com/arnzel)
219220
* [dadiyang](https://github.com/dadiyang)
220221
* [Dovid Kopel](https://github.com/dovidkopel)

easy-random-bean-validation/src/test/java/org/jeasy/random/validation/BeanValidationMethodAnnotatedBean.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ class BeanValidationMethodAnnotatedBean {
8787

8888
private List<String> sizedList;
8989

90+
private List<EmbeddedBean> sizedListEmbeddedBean;
91+
9092
private Set<String> sizedSet;
9193

9294
private Map<String, Integer> sizedMap;
@@ -369,6 +371,15 @@ public void setSizedList(List<String> sizedList) {
369371
this.sizedList = sizedList;
370372
}
371373

374+
@Size(min = 2, max = 10)
375+
public List<EmbeddedBean> getSizedListEmbeddedBean() {
376+
return sizedListEmbeddedBean;
377+
}
378+
379+
public void setSizedListEmbeddedBean(List<EmbeddedBean> sizedListEmbeddedBean) {
380+
this.sizedListEmbeddedBean = sizedListEmbeddedBean;
381+
}
382+
372383
@Size(min=2, max=10)
373384
public Set<String> getSizedSet() {
374385
return sizedSet;

easy-random-bean-validation/src/test/java/org/jeasy/random/validation/BeanValidationTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,23 @@ void sizeConstraintShouldNotBePropagatedToEmbeddedBeans() {
7474
});
7575
}
7676

77+
@Test
78+
void sizeConstraintShouldTakePrecedenceOverCollectionSizeRangeInEmbeddedBeans() {
79+
EasyRandomParameters parameters = new EasyRandomParameters()
80+
.collectionSizeRange(11, 15)
81+
.stringLengthRange(16, 20);
82+
easyRandom = new EasyRandom(parameters);
83+
BeanValidationAnnotatedBean bean = easyRandom.nextObject(BeanValidationAnnotatedBean.class);
84+
85+
assertThat(bean.getSizedListEmbeddedBean().size()).isBetween(2, 10); // @Size constraint
86+
assertThat(bean.getSizedListEmbeddedBean()).allSatisfy(embeddedBean -> {
87+
assertThat(embeddedBean.getItems().size()).isBetween(11, 15);
88+
assertThat(embeddedBean.getOtherItems().size()).isBetween(3, 5); // @Size(min = 3, max = 5) constraint should take precedence over collectionSizeRange(11, 15)
89+
assertThat(embeddedBean.getItems()).allSatisfy(stringItem -> assertThat(stringItem.length()).isBetween(16, 20));
90+
assertThat(embeddedBean.getOtherItems()).allSatisfy(stringItem -> assertThat(stringItem.length()).isBetween(16, 20));
91+
});
92+
}
93+
7794
@Test
7895
void generatedValuesShouldBeValidAccordingToValidationConstraints() {
7996
BeanValidationAnnotatedBean bean = easyRandom.nextObject(BeanValidationAnnotatedBean.class);
@@ -136,6 +153,7 @@ void generatedValuesShouldBeValidAccordingToValidationConstraints() {
136153
assertThat(bean.getBriefMessage().length()).isBetween(2, 10);// @Size(min=2, max=10) String briefMessage;
137154
assertThat(bean.getSizedCollection().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedCollection;
138155
assertThat(bean.getSizedList().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedList;
156+
assertThat(bean.getSizedListEmbeddedBean().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedListEmbeddedBean;
139157
assertThat(bean.getSizedSet().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedSet;
140158
assertThat(bean.getSizedMap().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedMap;
141159
assertThat(bean.getSizedArray().length).isBetween(2, 10);// @Size(min=2, max=10) String sizedArray;
@@ -206,6 +224,7 @@ void generatedValuesShouldBeValidAccordingToValidationConstraintsOnMethod() {
206224
assertThat(bean.getBriefMessage().length()).isBetween(2, 10);// @Size(min=2, max=10) String briefMessage;
207225
assertThat(bean.getSizedCollection().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedCollection;
208226
assertThat(bean.getSizedList().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedList;
227+
assertThat(bean.getSizedListEmbeddedBean().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedListEmbeddedBean;
209228
assertThat(bean.getSizedSet().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedSet;
210229
assertThat(bean.getSizedMap().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedMap;
211230
assertThat(bean.getSizedArray().length).isBetween(2, 10);// @Size(min=2, max=10) String sizedArray;
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,52 @@
1+
/*
2+
* The MIT License
3+
*
4+
* Copyright (c) 2020, Mahmoud Ben Hassine (mahmoud.benhassine@icloud.com)
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in
14+
* all copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+
* THE SOFTWARE.
23+
*/
124
package org.jeasy.random.validation;
225

326
import java.util.List;
427

28+
import javax.validation.constraints.Size;
29+
530
public class EmbeddedBean {
631

732
private List<String> items;
833

34+
@Size(min = 3, max = 5)
35+
private List<String> otherItems;
36+
937
public List<String> getItems() {
1038
return items;
1139
}
1240

41+
public List<String> getOtherItems() {
42+
return otherItems;
43+
}
44+
1345
public void setItems(List<String> items) {
1446
this.items = items;
1547
}
48+
49+
public void setOtherItems(List<String> otherItems) {
50+
this.otherItems = otherItems;
51+
}
1652
}

0 commit comments

Comments
 (0)