Package org.agoncal.book.javaee7.chapter03.ex21

Source Code of org.agoncal.book.javaee7.chapter03.ex21.CD21Test

package org.agoncal.book.javaee7.chapter03.ex21;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

import javax.validation.*;
import javax.validation.executable.ExecutableValidator;
import javax.validation.groups.Default;
import java.lang.reflect.Method;
import java.util.Set;

import static org.junit.Assert.assertEquals;

/**
* @author Antonio Goncalves
*         APress Book - Beginning Java EE 7 with Glassfish 4
*         http://www.apress.com/
*         http://www.antoniogoncalves.org
*         --
*/
public class CD21Test {

  // ======================================
  // =             Attributes             =
  // ======================================

  protected static ValidatorFactory vf;
  protected static Validator validator;

  // ======================================
  // =          Lifecycle Methods         =
  // ======================================

  @BeforeClass
  public static void init() {
    vf = Validation.buildDefaultValidatorFactory();
    validator = vf.getValidator();
  }

  @AfterClass
  public static void close() {
    vf.close();
  }

  // ======================================
  // =              Methods               =
  // ======================================

  @Test
  public void shouldRaiseNoConstraintViolation() {

    CD21 cd = new CD21("Kind of Blue", 12.5f);

    Set<ConstraintViolation<CD21>> violations = validator.validate(cd);
    assertEquals(0, violations.size());
  }

  @Test
  public void shouldRaiseConstraintViolationCauseTitleAndPriceAreNull() {

    CD21 cd = new CD21();

    Set<ConstraintViolation<CD21>> violations = validator.validate(cd);
    displayContraintViolations(violations);
    assertEquals(2, violations.size());
  }

  @Test
  public void shouldRaiseNoConstraintViolationValidatingNumberOfCDsProperty() {

    CD21 cd = new CD21();
    cd.setNumberOfCDs(2);

    Set<ConstraintViolation<CD21>> violations = validator.validateProperty(cd, "numberOfCDs");
    assertEquals(0, violations.size());
  }

  @Test //@Ignore("Make sure your local is EN, if not use the following JVM parameters : -Duser.language=en -Duser.country=EN")
  public void shouldRaiseConstraintViolationValidatingNumberOfCDsProperty() {

    CD21 cd = new CD21();
    cd.setNumberOfCDs(7);

    Set<ConstraintViolation<CD21>> violations = validator.validateProperty(cd, "numberOfCDs");
    displayContraintViolations(violations);
    assertEquals(1, violations.size());
    assertEquals("must be less than or equal to 5", violations.iterator().next().getMessage());
    assertEquals(7, violations.iterator().next().getInvalidValue());
    assertEquals("{javax.validation.constraints.Max.message}", violations.iterator().next().getMessageTemplate());
  }

  @Test
  public void shouldRaiseNoConstraintViolationValidatingNumberOfCDsPropertyValue() {

    Set<ConstraintViolation<CD21>> violations = validator.validateValue(CD21.class, "numberOfCDs", 2);
    displayContraintViolations(violations);
    assertEquals(0, violations.size());
  }

  @Test
  public void shouldRaiseConstraintViolationValidatingNumberOfCDsPropertyValue() {

    Set<ConstraintViolation<CD21>> violations = validator.validateValue(CD21.class, "numberOfCDs", 7);
    displayContraintViolations(violations);
    assertEquals(1, violations.size());
  }

  @Test
  public void shouldRaiseNoMethodParameterConstraintViolation() throws NoSuchMethodException {

    CD21 cd = new CD21("Kind of Blue", 12.5f);

    ExecutableValidator methodValidator = validator.forExecutables();
    Method method = CD21.class.getMethod("calculatePrice", Float.class);
    Set<ConstraintViolation<CD21>> violations = methodValidator.validateParameters(cd, method, new Object[]{new Float(2.2)});
    assertEquals(0, violations.size());
  }

  @Test //@Ignore("Make sure your local is EN, if not use the following JVM parameters : -Duser.language=en -Duser.country=EN")
  public void shouldRaiseMethodParameterConstraintViolationCauseRateIsLow() throws NoSuchMethodException {

    CD21 cd = new CD21("Kind of Blue", 12.5f);

    ExecutableValidator methodValidator = validator.forExecutables();
    Method method = CD21.class.getMethod("calculatePrice", Float.class);
    Set<ConstraintViolation<CD21>> violations = methodValidator.validateParameters(cd, method, new Object[]{new Float(1.2)});
    displayContraintViolations(violations);
    assertEquals(1, violations.size());
    assertEquals("must be greater than or equal to 1.4", violations.iterator().next().getMessage());
    assertEquals(new Float(1.2), violations.iterator().next().getInvalidValue());
    assertEquals("{javax.validation.constraints.DecimalMin.message}", violations.iterator().next().getMessageTemplate());
  }

  @Test
  public void shouldRaiseNoConstraintViolationWithGroup() {

    CD21 cd = new CD21("Kind of Blue", 12.5f);
    cd.setDescription("Best Jazz CD ever");

    Set<ConstraintViolation<CD21>> violations = validator.validate(cd, PrintingCatalog.class);
    assertEquals(0, violations.size());
  }

  @Test
  public void shouldRaiseNoConstraintViolationWithGroupEvenWithNullTitleAndPrice() {

    CD21 cd = new CD21();
    cd.setDescription("Best Jazz CD ever");

    Set<ConstraintViolation<CD21>> violations = validator.validate(cd, PrintingCatalog.class);
    assertEquals(0, violations.size());
  }

  @Test
  public void shouldRaiseConstraintViolationWithTwoGroupsCauseNullTitleAndPrice() {

    CD21 cd = new CD21();
    cd.setDescription("Best Jazz CD ever");

    Set<ConstraintViolation<CD21>> violations = validator.validate(cd, Default.class, PrintingCatalog.class);
    assertEquals(2, violations.size());
  }

  @Test
  public void shouldRaiseConstraintViolationWithNoGroupsCauseNullTitleAndPrice() {

    CD21 cd = new CD21();
    cd.setDescription("Best Jazz CD ever");

    Set<ConstraintViolation<CD21>> violations = validator.validate(cd);
    assertEquals(2, violations.size());
  }

  @Test
  public void shouldRaiseConstraintViolationWithDefaultGroupCauseNullTitleAndPrice() {

    CD21 cd = new CD21();
    cd.setDescription("Best Jazz CD ever");

    Set<ConstraintViolation<CD21>> violations = validator.validate(cd, Default.class);
    assertEquals(2, violations.size());
  }

  @Test
  public void shouldRaiseConstraintViolationWithTwoGroupsCauseNullTitlePriceAndSize() {

    CD21 cd = new CD21();
    cd.setDescription("Jazz");

    Set<ConstraintViolation<CD21>> violations = validator.validate(cd, Default.class, PrintingCatalog.class);
    assertEquals(3, violations.size());
  }

  @Test
  public void shouldRaiseConstraintViolationWithOneGroupCauseSize() {

    CD21 cd = new CD21();
    cd.setDescription("Too short");

    Set<ConstraintViolation<CD21>> violations = validator.validate(cd, PrintingCatalog.class);
    assertEquals(1, violations.size());
  }

  @Test
  public void shouldRaiseConstraintViolationWithGroupCauseSizeIsShort() {

    CD21 cd = new CD21("Kind of Blue", 12.5f);
    cd.setDescription("Jazz");

    Set<ConstraintViolation<CD21>> violations = validator.validate(cd, PrintingCatalog.class);
    assertEquals(1, violations.size());
  }


  private void displayContraintViolations(Set<ConstraintViolation<CD21>> constraintViolations) {
    for (ConstraintViolation constraintViolation : constraintViolations) {
      System.out.println("### " + constraintViolation.getRootBeanClass().getSimpleName() +
              "." + constraintViolation.getPropertyPath() + " - Invalid Value = " + constraintViolation.getInvalidValue() + " - Error Msg = " + constraintViolation.getMessage());

    }
  }
}
TOP

Related Classes of org.agoncal.book.javaee7.chapter03.ex21.CD21Test

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.