Skip to content

Commit

Permalink
Refine contribution #448
Browse files Browse the repository at this point in the history
* Update tests with BV constraints on methods
* Add test to cover BV constraints precedence
* Add murdos to contributors list
  • Loading branch information
fmbenhassine committed Mar 20, 2021
1 parent 0e56afa commit 0426dcd
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Expand Up @@ -215,6 +215,7 @@ If you believe you found a bug or have any question, please use the [issue track
* [Adriano Machado](https://github.com/ammachado)
* [Alberto Lagna](https://github.com/alagna)
* [Andrew Neal](https://github.com/aeneal)
* [Aurélien Mino](https://github.com/murdos)
* [Arne Zelasko](https://github.com/arnzel)
* [dadiyang](https://github.com/dadiyang)
* [Dovid Kopel](https://github.com/dovidkopel)
Expand Down
Expand Up @@ -87,6 +87,8 @@ class BeanValidationMethodAnnotatedBean {

private List<String> sizedList;

private List<EmbeddedBean> sizedListEmbeddedBean;

private Set<String> sizedSet;

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

@Size(min = 2, max = 10)
public List<EmbeddedBean> getSizedListEmbeddedBean() {
return sizedListEmbeddedBean;
}

public void setSizedListEmbeddedBean(List<EmbeddedBean> sizedListEmbeddedBean) {
this.sizedListEmbeddedBean = sizedListEmbeddedBean;
}

@Size(min=2, max=10)
public Set<String> getSizedSet() {
return sizedSet;
Expand Down
Expand Up @@ -74,6 +74,23 @@ void sizeConstraintShouldNotBePropagatedToEmbeddedBeans() {
});
}

@Test
void sizeConstraintShouldTakePrecedenceOverCollectionSizeRangeInEmbeddedBeans() {
EasyRandomParameters parameters = new EasyRandomParameters()
.collectionSizeRange(11, 15)
.stringLengthRange(16, 20);
easyRandom = new EasyRandom(parameters);
BeanValidationAnnotatedBean bean = easyRandom.nextObject(BeanValidationAnnotatedBean.class);

assertThat(bean.getSizedListEmbeddedBean().size()).isBetween(2, 10); // @Size constraint
assertThat(bean.getSizedListEmbeddedBean()).allSatisfy(embeddedBean -> {
assertThat(embeddedBean.getItems().size()).isBetween(11, 15);
assertThat(embeddedBean.getOtherItems().size()).isBetween(3, 5); // @Size(min = 3, max = 5) constraint should take precedence over collectionSizeRange(11, 15)
assertThat(embeddedBean.getItems()).allSatisfy(stringItem -> assertThat(stringItem.length()).isBetween(16, 20));
assertThat(embeddedBean.getOtherItems()).allSatisfy(stringItem -> assertThat(stringItem.length()).isBetween(16, 20));
});
}

@Test
void generatedValuesShouldBeValidAccordingToValidationConstraints() {
BeanValidationAnnotatedBean bean = easyRandom.nextObject(BeanValidationAnnotatedBean.class);
Expand Down Expand Up @@ -136,6 +153,7 @@ void generatedValuesShouldBeValidAccordingToValidationConstraints() {
assertThat(bean.getBriefMessage().length()).isBetween(2, 10);// @Size(min=2, max=10) String briefMessage;
assertThat(bean.getSizedCollection().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedCollection;
assertThat(bean.getSizedList().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedList;
assertThat(bean.getSizedListEmbeddedBean().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedListEmbeddedBean;
assertThat(bean.getSizedSet().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedSet;
assertThat(bean.getSizedMap().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedMap;
assertThat(bean.getSizedArray().length).isBetween(2, 10);// @Size(min=2, max=10) String sizedArray;
Expand Down Expand Up @@ -206,6 +224,7 @@ void generatedValuesShouldBeValidAccordingToValidationConstraintsOnMethod() {
assertThat(bean.getBriefMessage().length()).isBetween(2, 10);// @Size(min=2, max=10) String briefMessage;
assertThat(bean.getSizedCollection().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedCollection;
assertThat(bean.getSizedList().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedList;
assertThat(bean.getSizedListEmbeddedBean().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedListEmbeddedBean;
assertThat(bean.getSizedSet().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedSet;
assertThat(bean.getSizedMap().size()).isBetween(2, 10);// @Size(min=2, max=10) String sizedMap;
assertThat(bean.getSizedArray().length).isBetween(2, 10);// @Size(min=2, max=10) String sizedArray;
Expand Down
@@ -1,16 +1,52 @@
/*
* The MIT License
*
* Copyright (c) 2020, Mahmoud Ben Hassine (mahmoud.benhassine@icloud.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package org.jeasy.random.validation;

import java.util.List;

import javax.validation.constraints.Size;

public class EmbeddedBean {

private List<String> items;

@Size(min = 3, max = 5)
private List<String> otherItems;

public List<String> getItems() {
return items;
}

public List<String> getOtherItems() {
return otherItems;
}

public void setItems(List<String> items) {
this.items = items;
}

public void setOtherItems(List<String> otherItems) {
this.otherItems = otherItems;
}
}

0 comments on commit 0426dcd

Please sign in to comment.