Package javango.contrib.hibernate.tests

Source Code of javango.contrib.hibernate.tests.TestHibernateValidator

package javango.contrib.hibernate.tests;

import java.util.HashMap;
import java.util.Map;

import javango.contrib.hibernate.HibernateFormHelper;
import javango.contrib.hibernate.HibernateModule;
import javango.contrib.hibernate.HibernateUtil;
import javango.contrib.hibernate.ModelForm;
import javango.contrib.hibernate.ValidatedForm;
import javango.db.Managers;
import javango.forms.Form;
import javango.forms.fields.CharField;
import javango.forms.fields.EmailField;
import javango.forms.fields.Field;
import javango.forms.fields.FieldFactory;
import javango.forms.fields.LongField;
import javango.forms.fields.annotations.FieldProperties;
import junit.framework.TestCase;

import javax.persistence.*;
import org.hibernate.validator.*;

import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;

public class TestHibernateValidator extends TestCase {

  @Entity
  @Table(name="contact_us")
  public static class ContactBean {
   
    @Id @GeneratedValue
    @Column(name = "id")
    private Long id;
   
    @Column
    @Length(max = 20)
    private String subject;
   
    @Column
    private String message;
   
    @Column
    private String sender;
   
    @Column
    @Range(min=4, max=10,message="value must be between 4 and 10")
    private Long value;
   
    @Column
    private Boolean ccMyself;
   
    public String getSubject() {
      return subject;
    }
    public void setSubject(String subject) {
      this.subject = subject;
    }
    public String getMessage() {
      return message;
    }
    public void setMessage(String message) {
      this.message = message;
    }
    public String getSender() {
      return sender;
    }
    public void setSender(String sender) {
      this.sender = sender;
    }
    public Long getValue() {
      return value;
    }
    public void setValue(Long value) {
      this.value = value;
    }
    public Boolean getCcMyself() {
      return ccMyself;
    }
    public void setCcMyself(Boolean ccMyself) {
      this.ccMyself = ccMyself;
    }
    public Long getId() {
      return id;
    }
    public void setId(Long id) {
      this.id = id;
    }
  }

  public static class ContactForm extends ModelForm {

    @Length(max=20)
    public EmailField sender;
    public LongField value;

    public ContactForm(FieldFactory fieldFactory, HibernateUtil hibernateUtil, Managers managers) {
      super(fieldFactory, hibernateUtil, managers);
      setModel(ContactBean.class);
    }   
  }
 
  Injector injector;
  FieldFactory fieldFactory;
  HibernateUtil hibernateUtil;
  Managers managers;
 
  @Override
  protected void setUp() throws Exception {
    super.setUp();
    injector = Guice.createInjector(new HibernateModule());
    this.fieldFactory = injector.getInstance(FieldFactory.class);
    this.hibernateUtil = injector.getInstance(HibernateUtil.class);
    this.managers = injector.getInstance(Managers.class);
  }

  public void testSimpleValidation() throws Exception {
    ContactBean bean = new ContactBean();
    bean.setValue(new Long(100));
    ClassValidator<ContactBean> v = new ClassValidator<ContactBean>(ContactBean.class);
   
    InvalidValue[] invalids = v.getInvalidValues(bean);
    InvalidValue invalid = invalids[0];
    assertEquals("value must be between 4 and 10",invalid.getMessage());
   
    invalids = v.getPotentialInvalidValues("value", new Integer(50));   
    invalid = invalids[0];
    assertEquals("value must be between 4 and 10",invalid.getMessage());
  }
 
  public void testFormHelperValidation() throws Exception {
    Map<String, String[]> m = new HashMap<String, String[]>();
    m.put("value", new String[] {"200"});
    m.put("id", new String[] {"100"});
    m.put("message", new String[] {"100"});
    m.put("subject", new String[] {"1234567890123456789012"});
    m.put("sender", new String[] {"100"});
    m.put("ccMyself", new String[] {"false"});
       
    ModelForm contactForm = new ModelForm(fieldFactory, hibernateUtil, managers);
    contactForm.setModel(ContactBean.class);
    contactForm.bind(m);
    assertFalse(HibernateFormHelper.isValid(contactForm, ContactBean.class));
    Map<String, String> errors = contactForm.getErrors();
    assertTrue(errors.containsKey("value"));
    assertEquals("value must be between 4 and 10", errors.get("value"));
    assertTrue(errors.containsKey("subject"));
    assertEquals("length must be between 0 and 20", errors.get("subject"));   
  }
 
  public void testValidatorInFormAndBean() throws Exception {
    Map<String, String[]> m = new HashMap<String, String[]>();
    m.put("value", new String[] {"200"});
    m.put("id", new String[] {"100"});
    m.put("message", new String[] {"100"});
    m.put("subject", new String[] {"1234567890123456789012"});
    m.put("sender", new String[] {"100"});
    m.put("ccMyself", new String[] {"false"});
       
    ModelForm contactForm = new ContactForm(fieldFactory, hibernateUtil, managers);
    contactForm.bind(m);
    assertFalse(contactForm.isValid());
    Map<String, String> errors = contactForm.getErrors();
    assertTrue(errors.containsKey("sender"));
   
    m.put("sender", new String[] {"foo@example.com"});
    contactForm = new ContactForm(fieldFactory, hibernateUtil, managers);
    contactForm.bind(m);
    assertFalse(contactForm.isValid());
    errors = contactForm.getErrors();
    assertTrue(errors.containsKey("value"));
    assertEquals("value must be between 4 and 10", errors.get("value"));
    assertTrue(errors.containsKey("subject"));
    assertEquals("length must be between 0 and 20", errors.get("subject"));
   
    m.put("sender", new String[] {"12345678901234567890foo@example.com"});
    contactForm = new ContactForm(fieldFactory, hibernateUtil, managers);
    contactForm.bind(m);
    assertFalse(contactForm.isValid());
    errors = contactForm.getErrors();
    assertTrue(errors.containsKey("sender"));
    assertEquals("length must be between 0 and 20", errors.get("sender"));
  }
 
  public static class RequiredTestForm extends ValidatedForm {
   
    @Inject
    public RequiredTestForm(FieldFactory fieldFactory) {
      super(fieldFactory);
    }

    @NotEmpty
    @FieldProperties(required=false)
    public CharField myField;

  }
 
  public void testValidatorNotEmpty() throws Exception {
    Form form = injector.getInstance(RequiredTestForm.class).bind(new HashMap<String, String[]>());
    assertFalse(form.isValid());
    Map<String, String>errors = form.getErrors();
    assertTrue(errors.containsKey("myField"));
    assertEquals("may not be null or empty", errors.get("myField"));
  }
}
TOP

Related Classes of javango.contrib.hibernate.tests.TestHibernateValidator

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.