Package org.strecks.form.controller

Source Code of org.strecks.form.controller.TestDelegatingFormValidation

package org.strecks.form.controller;

import static org.easymock.EasyMock.expect;
import static org.easymock.classextension.EasyMock.createStrictMock;
import static org.easymock.classextension.EasyMock.replay;
import static org.easymock.classextension.EasyMock.verify;

import java.sql.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.strecks.converter.ConversionState;
import org.strecks.converter.Converter;
import org.strecks.converter.handler.DefaultConversionHandler;
import org.strecks.exceptions.ApplicationConfigurationException;
import org.strecks.exceptions.ConversionException;
import org.strecks.exceptions.ConversionRuntimeException;
import org.strecks.form.impl.SimpleStrutsForm;
import org.strecks.validator.internal.MethodValidators;
import org.strecks.validator.internal.OrderedProperty;
import org.strecks.validator.internal.ValidationInfo;
import org.strecks.validator.strategy.ValidationHandler;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

/**
* @author Phil Zoio
*/
public class TestDelegatingFormValidation
{

  private SimpleStrutsForm simpleForm;

  private ValidationHandler handler;

  private DelegatingForm form;

  @BeforeMethod
  public void setUp()
  {

    simpleForm = new SimpleStrutsForm();
    handler = createStrictMock(ValidationHandler.class);

  }

  @SuppressWarnings("unchecked")
  @Test
  public void testValidate() throws ConversionException
  {

    Map validators = createStrictMock(Map.class);
    Set keys = createStrictMock(Set.class);
    Iterator iterator = createStrictMock(Iterator.class);
    OrderedProperty op = createStrictMock(OrderedProperty.class);
    MethodValidators methodValidators = createStrictMock(MethodValidators.class);
    Converter converter = createStrictMock(Converter.class);

    Date sqlDate = Date.valueOf("1999-12-12");
    simpleForm.setDateValue("1999-12-12");
    ValidationInfo vi = new ValidationInfo(validators, handler, new DefaultConversionHandler());

    expect(validators.keySet()).andReturn(keys);
    expect(keys.iterator()).andReturn(iterator);
    expect(iterator.hasNext()).andReturn(true);
    expect(iterator.next()).andReturn(op);
    expect(validators.get(op)).andReturn(methodValidators);
    expect(methodValidators.getRequiresConversion()).andReturn(true);
    expect(methodValidators.getConverter()).andReturn(converter);
    expect(op.getPropertyName()).andReturn("dateValue");
    expect(converter.toTargetType("1999-12-12")).andReturn(sqlDate);
    expect(methodValidators.getConverterType()).andReturn(sqlDate.getClass());
    expect(iterator.hasNext()).andReturn(false);

    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("dateValue", sqlDate);

    // expect validationStrategy to be called
    expect(handler.validate(vi, simpleForm, null, null, map)).andReturn(null);

    replay(handler);
    replay(validators);
    replay(keys);
    replay(iterator);
    replay(op);
    replay(methodValidators);
    replay(converter);

    form = new DelegatingForm(simpleForm);
    form.setValidationInfo(vi);
    form.validate(null, null);

    verify(handler);
    verify(validators);
    verify(keys);
    verify(iterator);
    verify(op);
    verify(methodValidators);
    verify(converter);

  }

  @SuppressWarnings("unchecked")
  @Test
  public void testBadType() throws ConversionException
  {

    Map validators = createStrictMock(Map.class);
    Set keys = createStrictMock(Set.class);
    Iterator iterator = createStrictMock(Iterator.class);
    OrderedProperty op = createStrictMock(OrderedProperty.class);
    MethodValidators methodValidators = createStrictMock(MethodValidators.class);
    Converter converter = createStrictMock(Converter.class);

    Date sqlDate = Date.valueOf("1999-12-12");
    simpleForm.setDateValue("1999-12-12");
    ValidationInfo vi = new ValidationInfo(validators, handler, new DefaultConversionHandler());

    expect(validators.keySet()).andReturn(keys);
    expect(keys.iterator()).andReturn(iterator);
    expect(iterator.hasNext()).andReturn(true);
    expect(iterator.next()).andReturn(op);
    expect(validators.get(op)).andReturn(methodValidators);
    expect(methodValidators.getRequiresConversion()).andReturn(true);
    expect(methodValidators.getConverter()).andReturn(converter);
    expect(op.getPropertyName()).andReturn("dateValue");
    expect(converter.toTargetType("1999-12-12")).andReturn(sqlDate);
    expect(methodValidators.getConverterType()).andReturn(String.class);

    replay(handler);
    replay(validators);
    replay(keys);
    replay(iterator);
    replay(op);
    replay(methodValidators);
    replay(converter);

    form = new DelegatingForm(simpleForm);
    form.setValidationInfo(vi);

    try
    {
      form.validate(null, null);
    }
    catch (ApplicationConfigurationException e)
    {
      Assert.assertEquals(e.getMessage(), "Supplied value of dateValue in class " +
          "org.strecks.form.impl.SimpleStrutsForm converted to class java.sql.Date " +
          "and not the class java.lang.String expected by one or more validators. " +
          "Check that the property contains an appropriate converter in its getter method");
    }

    verify(handler);
    verify(validators);
    verify(keys);
    verify(iterator);
    verify(op);
    verify(methodValidators);
    verify(converter);

  }

  @SuppressWarnings("unchecked")
  @Test
  public void testValidateNull() throws ConversionException
  {

    Map validators = createStrictMock(Map.class);
    Set keys = createStrictMock(Set.class);
    Iterator iterator = createStrictMock(Iterator.class);
    OrderedProperty op = createStrictMock(OrderedProperty.class);
    MethodValidators methodValidators = createStrictMock(MethodValidators.class);
    Converter converter = createStrictMock(Converter.class);

    ValidationInfo vi = new ValidationInfo(validators, handler, new DefaultConversionHandler());

    expect(validators.keySet()).andReturn(keys);
    expect(keys.iterator()).andReturn(iterator);
    expect(iterator.hasNext()).andReturn(true);
    expect(iterator.next()).andReturn(op);
    expect(validators.get(op)).andReturn(methodValidators);
    expect(methodValidators.getRequiresConversion()).andReturn(true);
    expect(methodValidators.getConverter()).andReturn(converter);
    expect(op.getPropertyName()).andReturn("dateValue");
    expect(converter.toTargetType(null)).andReturn(null);
    expect(iterator.hasNext()).andReturn(false);

    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("dateValue", ConversionState.NULL);

    // expect validationStrategy to be called
    expect(handler.validate(vi, simpleForm, null, null, map)).andReturn(null);

    replay(handler);
    replay(validators);
    replay(keys);
    replay(iterator);
    replay(op);
    replay(methodValidators);
    replay(converter);

    form = new DelegatingForm(simpleForm);
    form.setValidationInfo(vi);
    form.validate(null, null);

    verify(handler);
    verify(validators);
    verify(keys);
    verify(iterator);
    verify(op);
    verify(methodValidators);
    verify(converter);

  }

  @SuppressWarnings("unchecked")
  @Test
  public void testConversionFailure() throws ConversionException
  {

    Map validators = createStrictMock(Map.class);
    Set keys = createStrictMock(Set.class);
    Iterator iterator = createStrictMock(Iterator.class);
    OrderedProperty op = createStrictMock(OrderedProperty.class);
    MethodValidators methodValidators = createStrictMock(MethodValidators.class);
    Converter converter = createStrictMock(Converter.class);

    ValidationInfo vi = new ValidationInfo(validators, handler, new DefaultConversionHandler());

    expect(validators.keySet()).andReturn(keys);
    expect(keys.iterator()).andReturn(iterator);
    expect(iterator.hasNext()).andReturn(true);
    expect(iterator.next()).andReturn(op);
    expect(validators.get(op)).andReturn(methodValidators);
    expect(methodValidators.getRequiresConversion()).andReturn(true);
    expect(methodValidators.getConverter()).andReturn(converter);
    expect(op.getPropertyName()).andReturn("dateValue");
    expect(converter.toTargetType(null)).andThrow(new ConversionRuntimeException(null));
    expect(iterator.hasNext()).andReturn(false);

    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("dateValue", ConversionState.FAILURE);

    // expect validationStrategy to be called
    expect(handler.validate(vi, simpleForm, null, null, map)).andReturn(null);

    replay(handler);
    replay(validators);
    replay(keys);
    replay(iterator);
    replay(op);
    replay(methodValidators);
    replay(converter);

    form = new DelegatingForm(simpleForm);
    form.setValidationInfo(vi);
    form.validate(null, null);

    verify(handler);
    verify(validators);
    verify(keys);
    verify(iterator);
    verify(op);
    verify(methodValidators);
    verify(converter);

  }

}
TOP

Related Classes of org.strecks.form.controller.TestDelegatingFormValidation

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.