package org.resthub.web.validation.service;
import org.fest.assertions.api.Assertions;
import org.resthub.test.AbstractTest;
import org.resthub.web.validation.ModelConstraint;
import org.resthub.web.validation.ValidationService;
import org.resthub.web.validation.model.*;
import org.springframework.test.context.ActiveProfiles;
import org.testng.annotations.Test;
import javax.inject.Inject;
import javax.inject.Named;
import java.util.Locale;
@ActiveProfiles({"resthub-validation", "resthub-web-server", "resthub-jpa", "resthub-pool-bonecp"})
public class ValidationServiceTest extends AbstractTest {
@Inject
@Named("validationService")
private ValidationService validationService;
@Test(expectedExceptions = {ClassNotFoundException.class})
public void testNotNullValidationModelFromUnknownClassName() throws ClassNotFoundException {
this.validationService.getConstraintsForClassName("unknownClassName");
}
@Test
public void testNotNullValidationModelFromExistingClassName() {
ModelConstraint modelConstraint = null;
try {
modelConstraint =
this.validationService.getConstraintsForClassName("org.resthub.web.validation.model.NotNullValidationModel");
} catch (ClassNotFoundException e) {
Assertions.fail("Error: cannot find class !", e);
}
this.validateNotNullValidationModel(modelConstraint);
}
@Test
public void testNotNullValidationModelFromExistingClass() {
ModelConstraint modelConstraint =
this.validationService.getConstraintsForClass(NotNullValidationModel.class);
this.validateNotNullValidationModel(modelConstraint);
}
@Test
public void testNotNullValidationModelFromExistingClassAndLocales() {
ModelConstraint modelConstraint =
this.validationService.getConstraintsForClass(NotNullValidationModel.class, new Locale("fr"));
this.validateNotNullValidationModel(modelConstraint);
Assertions.assertThat(modelConstraint.getConstraints().get("field").get(0).getMessage()).isEqualTo("ne peut pas ĂȘtre nul");
modelConstraint =
this.validationService.getConstraintsForClass(NotNullValidationModel.class, new Locale("en", "us"));
this.validateNotNullValidationModel(modelConstraint);
Assertions.assertThat(modelConstraint.getConstraints().get("field").get(0).getMessage()).isEqualTo("may not be null");
}
private void validateNotNullValidationModel(ModelConstraint modelConstraint) {
Assertions.assertThat(modelConstraint).isNotNull();
Assertions.assertThat(modelConstraint.getModelRef()).isNotNull().isEqualTo("org.resthub.web.validation.model.NotNullValidationModel");
Assertions.assertThat(modelConstraint.getConstraints()).isNotNull().isNotEmpty().hasSize(1);
Assertions.assertThat(modelConstraint.getConstraints().containsKey("field"));
Assertions.assertThat(modelConstraint.getConstraints().get("field")).isNotNull().isNotEmpty().hasSize(1);
Assertions.assertThat(modelConstraint.getConstraints().get("field").get(0).getType()).isEqualTo("NotNull");
Assertions.assertThat(modelConstraint.getConstraints().get("field").get(0).getMessage()).isNotNull().isNotEmpty();
Assertions.assertThat(modelConstraint.getConstraints().get("field").get(0).getAttributes()).isNotNull().isEmpty();
}
@Test
public void testCompleteValidationModel() {
ModelConstraint modelConstraint =
this.validationService.getConstraintsForClass(CompleteValidationModel.class);
Assertions.assertThat(modelConstraint).isNotNull();
Assertions.assertThat(modelConstraint.getModelRef()).isNotNull().isEqualTo("org.resthub.web.validation.model.CompleteValidationModel");
Assertions.assertThat(modelConstraint.getConstraints()).isNotNull().isNotEmpty().hasSize(20);
Assertions.assertThat(modelConstraint.getConstraints()).containsKey("assertFalse").containsKey("digits").containsKey("ANull").containsKey("size");
Assertions.assertThat(modelConstraint.getConstraints().get("digits")).isNotNull().isNotEmpty().hasSize(1);
Assertions.assertThat(modelConstraint.getConstraints().get("digits").get(0).getType()).isEqualTo("Digits");
Assertions.assertThat(modelConstraint.getConstraints().get("digits").get(0).getMessage()).isNotNull().isNotEmpty();
Assertions.assertThat(modelConstraint.getConstraints().get("digits").get(0).getAttributes()).isNotNull().isNotEmpty().hasSize(2);
Assertions.assertThat(modelConstraint.getConstraints().get("digits").get(0).getAttributes()).containsKey("integer").containsKey("fraction");
Assertions.assertThat(modelConstraint.getConstraints().get("digits").get(0).getAttributes().get("integer")).isEqualTo(2);
Assertions.assertThat(modelConstraint.getConstraints().get("digits").get(0).getAttributes().get("fraction")).isEqualTo(3);
Assertions.assertThat(modelConstraint.getConstraints().get("size")).isNotNull().isNotEmpty().hasSize(1);
Assertions.assertThat(modelConstraint.getConstraints().get("size").get(0).getType()).isEqualTo("Size");
Assertions.assertThat(modelConstraint.getConstraints().get("size").get(0).getMessage()).isNotNull().isNotEmpty();
Assertions.assertThat(modelConstraint.getConstraints().get("size").get(0).getAttributes()).isNotNull().isNotEmpty().hasSize(2);
Assertions.assertThat(modelConstraint.getConstraints().get("size").get(0).getAttributes()).containsKey("min").containsKey("max");
Assertions.assertThat(modelConstraint.getConstraints().get("size").get(0).getAttributes().get("min")).isEqualTo(1);
Assertions.assertThat(modelConstraint.getConstraints().get("size").get(0).getAttributes().get("max")).isEqualTo(10);
Assertions.assertThat(modelConstraint.getConstraints()).containsKey("creditCardNumber").containsKey("email").containsKey("url").containsKey("notBlank").containsKey("notEmpty").containsKey("range").containsKey("length");
}
@Test
public void testCombinedValidationModel() {
ModelConstraint modelConstraint =
this.validationService.getConstraintsForClass(CombinedValidationModel.class);
Assertions.assertThat(modelConstraint).isNotNull();
Assertions.assertThat(modelConstraint.getModelRef()).isNotNull().isEqualTo("org.resthub.web.validation.model.CombinedValidationModel");
Assertions.assertThat(modelConstraint.getConstraints()).isNotNull().isNotEmpty().hasSize(2);
Assertions.assertThat(modelConstraint.getConstraints()).containsKey("login").containsKey("password");
Assertions.assertThat(modelConstraint.getConstraints().get("login")).isNotNull().isNotEmpty().hasSize(2);
Assertions.assertThat(modelConstraint.getConstraints().get("login").get(0).getType()).isEqualTo("NotNull");
Assertions.assertThat(modelConstraint.getConstraints().get("login").get(0).getMessage()).isNotNull().isNotEmpty();
Assertions.assertThat(modelConstraint.getConstraints().get("login").get(0).getAttributes()).isNotNull().isEmpty();
Assertions.assertThat(modelConstraint.getConstraints().get("login").get(1).getType()).isEqualTo("Pattern");
Assertions.assertThat(modelConstraint.getConstraints().get("login").get(1).getMessage()).isNotNull().isNotEmpty();
Assertions.assertThat(modelConstraint.getConstraints().get("login").get(1).getAttributes()).isNotNull().isNotEmpty().hasSize(2);
Assertions.assertThat(modelConstraint.getConstraints().get("login").get(1).getAttributes()).containsKey("flags").containsKey("regexp");
Assertions.assertThat(modelConstraint.getConstraints().get("login").get(1).getAttributes().get("regexp")).isNotNull();
Assertions.assertThat(modelConstraint.getConstraints().get("login").get(1).getAttributes().get("flags")).isNotNull();
Assertions.assertThat(modelConstraint.getConstraints().get("password")).isNotNull().isNotEmpty().hasSize(3);
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(0).getType()).isEqualTo("NotNull");
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(0).getMessage()).isNotNull().isNotEmpty();
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(0).getAttributes()).isNotNull().isEmpty();
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(1).getType()).isEqualTo("Size");
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(1).getMessage()).isNotNull().isNotEmpty();
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(1).getAttributes()).isNotNull().isNotEmpty().hasSize(2);
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(1).getAttributes()).containsKey("min").containsKey("max");
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(1).getAttributes().get("min")).isNotNull();
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(1).getAttributes().get("max")).isNotNull();
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(2).getType()).isEqualTo("Pattern");
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(2).getMessage()).isNotNull().isNotEmpty();
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(2).getAttributes()).isNotNull().isNotEmpty().hasSize(2);
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(2).getAttributes()).containsKey("flags").containsKey("regexp");
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(2).getAttributes().get("regexp")).isNotNull();
Assertions.assertThat(modelConstraint.getConstraints().get("password").get(2).getAttributes().get("flags")).isNotNull();
}
@Test
public void testInheritanceAndCompositionValidationModel() {
ModelConstraint modelConstraint =
this.validationService.getConstraintsForClass(AModel.class);
Assertions.assertThat(modelConstraint).isNotNull();
Assertions.assertThat(modelConstraint.getModelRef()).isNotNull().isEqualTo("org.resthub.web.validation.model.AModel");
Assertions.assertThat(modelConstraint.getConstraints()).isNotNull().isNotEmpty().hasSize(3);
Assertions.assertThat(modelConstraint.getConstraints()).containsKey("field1").containsKey("field2").containsKey("field5");
Assertions.assertThat(modelConstraint.getConstraints().get("field1")).isNotNull().isNotEmpty().hasSize(2);
Assertions.assertThat(modelConstraint.getConstraints().get("field1").get(0).getType()).isEqualTo("NotNull");
Assertions.assertThat(modelConstraint.getConstraints().get("field1").get(1).getType()).isEqualTo("Size");
Assertions.assertThat(modelConstraint.getConstraints().get("field2")).isNotNull().isNotEmpty().hasSize(1);
Assertions.assertThat(modelConstraint.getConstraints().get("field2").get(0).getType()).isEqualTo("Pattern");
Assertions.assertThat(modelConstraint.getConstraints().get("field5")).isNotNull().isNotEmpty().hasSize(2);
Assertions.assertThat(modelConstraint.getConstraints().get("field5").get(0).getType()).isEqualTo("NotNull");
Assertions.assertThat(modelConstraint.getConstraints().get("field5").get(1).getType()).isEqualTo("Valid");
Assertions.assertThat(modelConstraint.getConstraints().get("field5").get(1).getAttributes()).isNotNull().isNotEmpty().hasSize(1);
Assertions.assertThat(modelConstraint.getConstraints().get("field5").get(1).getAttributes()).containsKey("model");
Assertions.assertThat(modelConstraint.getConstraints().get("field5").get(1).getAttributes().get("model")).isNotNull().isEqualTo("org.resthub.web.validation.model.BModel");
modelConstraint =
this.validationService.getConstraintsForClass(BModel.class);
Assertions.assertThat(modelConstraint).isNotNull();
Assertions.assertThat(modelConstraint.getModelRef()).isNotNull().isEqualTo("org.resthub.web.validation.model.BModel");
Assertions.assertThat(modelConstraint.getConstraints()).isNotNull().isNotEmpty().hasSize(2);
Assertions.assertThat(modelConstraint.getConstraints()).containsKey("field3").containsKey("field4");
Assertions.assertThat(modelConstraint.getConstraints().get("field3")).isNotNull().isNotEmpty().hasSize(1);
Assertions.assertThat(modelConstraint.getConstraints().get("field3").get(0).getType()).isEqualTo("NotNull");
Assertions.assertThat(modelConstraint.getConstraints().get("field4")).isNotNull().isNotEmpty().hasSize(1);
Assertions.assertThat(modelConstraint.getConstraints().get("field4").get(0).getType()).isEqualTo("Size");
modelConstraint =
this.validationService.getConstraintsForClass(AbstractModel.class);
Assertions.assertThat(modelConstraint.getConstraints()).isNotNull();
Assertions.assertThat(modelConstraint.getConstraints()).isEmpty();
}
@Test
public void testNonSupportedClassLevelConstraint() {
ModelConstraint modelConstraint =
this.validationService.getConstraintsForClass(ClassLevelConstraintModel.class);
Assertions.assertThat(modelConstraint).isNotNull();
Assertions.assertThat(modelConstraint.getModelRef()).isNotNull().isEqualTo("org.resthub.web.validation.model.ClassLevelConstraintModel");
Assertions.assertThat(modelConstraint.getConstraints()).isNotNull().isEmpty();
}
@Test
public void testNonSupportedInheritedClassLevelConstraint() {
ModelConstraint modelConstraint =
this.validationService.getConstraintsForClass(InheritedClassLevelConstraintModel.class);
Assertions.assertThat(modelConstraint).isNotNull();
Assertions.assertThat(modelConstraint.getModelRef()).isNotNull().isEqualTo("org.resthub.web.validation.model.InheritedClassLevelConstraintModel");
Assertions.assertThat(modelConstraint.getConstraints()).isNotNull().isNotEmpty().hasSize(1);
Assertions.assertThat(modelConstraint.getConstraints()).containsKey("description");
}
@Test
public void testAbstractModel() {
ModelConstraint modelConstraint =
this.validationService.getConstraintsForClass(AbstractModel.class);
Assertions.assertThat(modelConstraint).isNotNull();
Assertions.assertThat(modelConstraint.getConstraints()).isNotNull();
Assertions.assertThat(modelConstraint.getConstraints()).isEmpty();
}
@Test
public void testNoConstraintsModel() {
ModelConstraint modelConstraint =
this.validationService.getConstraintsForClass(NoConstraintsModel.class);
Assertions.assertThat(modelConstraint).isNotNull();
Assertions.assertThat(modelConstraint.getConstraints()).isNotNull();
Assertions.assertThat(modelConstraint.getConstraints()).isEmpty();
}
}