Package net.sourceforge.stripes.validation

Source Code of net.sourceforge.stripes.validation.ValidationAnnotationsTest

package net.sourceforge.stripes.validation;

import java.util.Locale;

import net.sourceforge.stripes.FilterEnabledTestBase;
import net.sourceforge.stripes.StripesTestFixture;
import net.sourceforge.stripes.action.ActionBean;
import net.sourceforge.stripes.action.ActionBeanContext;
import net.sourceforge.stripes.action.Resolution;
import net.sourceforge.stripes.controller.StripesFilter;
import net.sourceforge.stripes.extensions.MyIntegerTypeConverter;
import net.sourceforge.stripes.extensions.MyStringTypeConverter;
import net.sourceforge.stripes.mock.MockRoundtrip;
import net.sourceforge.stripes.mock.MockServletContext;
import net.sourceforge.stripes.util.CryptoUtil;

import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

/**
* Tests combinations of validation annotations.
*
* @author Freddy Daoud
*/
public class ValidationAnnotationsTest extends FilterEnabledTestBase implements ActionBean {
    private ActionBeanContext context;
    public ActionBeanContext getContext() { return context; }
    public void setContext(ActionBeanContext context) { this.context = context;}

    @Validate(required=true, on="validateRequiredAndIgnored", ignore=true)
    private String first;
    public String getFirst() { return first; }
    public void setFirst(String first) { this.first = first; }

    public Resolution validateRequiredAndIgnored() { return null; }

    /**
     * Tests that a required field that is also ignored, should be ignored and should not produce
     * a validation error.
     *
     * @see http://www.stripesframework.org/jira/browse/STS-600
     */
    @Test(groups="fast")
    public void testValidateRequiredAndIgnored() throws Exception {
        MockRoundtrip trip = new MockRoundtrip(getMockServletContext(), getClass());
        trip.execute("validateRequiredAndIgnored");
        ActionBean actionBean = trip.getActionBean(getClass());
        Assert.assertEquals(actionBean.getContext().getValidationErrors().size(), 0);
    }

    @Validate(required=true, on="validatePublicField")
    public String publicField;

    public Resolution validatePublicField() { return null; }

    /**
     * Tests that a validation annotation works on a public field.
     *
     * @see http://www.stripesframework.org/jira/browse/STS-604
     */
    @Test(groups="fast")
    public void testValidatePublicField() throws Exception {
        MockRoundtrip trip = new MockRoundtrip(getMockServletContext(), getClass());
        trip.execute("validatePublicField");
        ActionBean actionBean = trip.getActionBean(getClass());
        Assert.assertEquals(actionBean.getContext().getValidationErrors().size(), 1);
    }

    public Integer shouldBeDoubled;
    @Validate(converter=IntegerTypeConverter.class) public Integer shouldNotBeDoubled;

    public String shouldBeUpperCased;
    @Validate(converter=StringTypeConverter.class) public String shouldNotBeUpperCased;

    public Resolution validateTypeConverters() { return null; }

    /**
     * Tests the use of an auto-loaded type converter versus a type converter explicitly configured
     * via {@code @Validate(converter)}, where the auto-loaded type converter extends the stock
     * type converter.
     *
     * @see http://www.stripesframework.org/jira/browse/STS-610
     */
    @Test(groups="extensions")
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public void testValidateTypeConverterExtendsStock() throws Exception {
        MockRoundtrip trip = new MockRoundtrip(getMockServletContext(), getClass());
        Locale locale = trip.getRequest().getLocale();
        TypeConverterFactory factory = StripesFilter.getConfiguration().getTypeConverterFactory();
        TypeConverter<?> tc = factory.getTypeConverter(Integer.class, locale);
        try {
            factory.add(Integer.class, MyIntegerTypeConverter.class);
            trip.addParameter("shouldBeDoubled", "42");
            trip.addParameter("shouldNotBeDoubled", "42");
            trip.execute("validateTypeConverters");
            ValidationAnnotationsTest actionBean = trip.getActionBean(getClass());
            Assert.assertEquals(actionBean.shouldBeDoubled, new Integer(84));
            Assert.assertEquals(actionBean.shouldNotBeDoubled, new Integer(42));
        }
        finally {
            Class<? extends TypeConverter> tcType = tc == null ? null : tc.getClass();
            factory.add(Integer.class, (Class<? extends TypeConverter<?>>) tcType);
        }
    }

    /**
     * Tests the use of an auto-loaded type converter versus a type converter explicitly configured
     * via {@code @Validate(converter)}, where the auto-loaded type converter does not extend the
     * stock type converter.
     *
     * @see http://www.stripesframework.org/jira/browse/STS-610
     */
    @SuppressWarnings("unchecked")
    @Test(groups="extensions")
    public void testValidateTypeConverterDoesNotExtendStock() throws Exception {
        TypeConverterFactory factory = StripesFilter.getConfiguration().getTypeConverterFactory();
        Class<? extends TypeConverter> oldtc = factory.getTypeConverter(//
                String.class, Locale.getDefault()).getClass();
        try {
            MockRoundtrip trip = new MockRoundtrip(getMockServletContext(), getClass());
            factory.add(String.class, MyStringTypeConverter.class);
            trip.addParameter("shouldBeUpperCased", "test");
            trip.addParameter("shouldNotBeUpperCased", "test");
            trip.execute("validateTypeConverters");
            ValidationAnnotationsTest actionBean = trip.getActionBean(getClass());
            Assert.assertEquals(actionBean.shouldBeUpperCased, "TEST");
            Assert.assertEquals(actionBean.shouldNotBeUpperCased, "test");
        }
        finally {
            factory.add(String.class, (Class<? extends TypeConverter<?>>) oldtc);
        }
    }

    @Validate(encrypted=true)
    public String encryptedParam;

    public Resolution validateEncrypted() { return null; }

    /**
     * Tests that an empty string encrypted value is bound as null.
     *
     * @see http://www.stripesframework.org/jira/browse/STS-521
     */
    @Test(groups="fast")
    public void testValidateEncryptedEmptyString() throws Exception {
        MockRoundtrip trip = new MockRoundtrip(getMockServletContext(), getClass());
        trip.addParameter("encryptedParam", CryptoUtil.encrypt(""));
        trip.execute("validateEncrypted");
        ValidationAnnotationsTest actionBean = trip.getActionBean(getClass());
        Assert.assertNull(actionBean.encryptedParam);
    }
}
TOP

Related Classes of net.sourceforge.stripes.validation.ValidationAnnotationsTest

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.