org.araneaframework.tests.FormConstraintTest.java Source code

Java tutorial

Introduction

Here is the source code for org.araneaframework.tests.FormConstraintTest.java

Source

/**
 * Copyright 2006 Webmedia Group Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
**/

package org.araneaframework.tests;

import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.Date;
import junit.framework.TestCase;
import org.apache.log4j.Logger;
import org.araneaframework.servlet.core.StandardServletInputData;
import org.araneaframework.tests.mock.MockEnviroment;
import org.araneaframework.tests.mock.MockUiLibUtil;
import org.araneaframework.uilib.form.FormElement;
import org.araneaframework.uilib.form.FormWidget;
import org.araneaframework.uilib.form.constraint.AfterTodayConstraint;
import org.araneaframework.uilib.form.constraint.ConstraintGroupHelper;
import org.araneaframework.uilib.form.constraint.NotEmptyConstraint;
import org.araneaframework.uilib.form.constraint.NumberInRangeConstraint;
import org.araneaframework.uilib.form.constraint.OptionalConstraint;
import org.araneaframework.uilib.form.constraint.RangeConstraint;
import org.araneaframework.uilib.form.control.ButtonControl;
import org.araneaframework.uilib.form.control.CheckboxControl;
import org.araneaframework.uilib.form.control.DateTimeControl;
import org.araneaframework.uilib.form.control.TextControl;
import org.araneaframework.uilib.form.data.BooleanData;
import org.araneaframework.uilib.form.data.DateData;
import org.araneaframework.uilib.form.data.LongData;
import org.springframework.mock.web.MockHttpServletRequest;

/**
 * @author <a href="mailto:ekabanov@webmedia.ee">Jevgeni Kabanov</a>
 * 
 */
public class FormConstraintTest extends TestCase {

    private static Logger log = Logger.getLogger(FormConstraintTest.class);

    boolean eventsWork = false;

    public FormConstraintTest(String name) {
        super(name);
    }

    private FormWidget makeUsualForm() throws Exception {

        //Creating form :-)
        FormWidget testForm = new FormWidget();
        testForm._getComponent().init(new MockEnviroment());

        //Adding elements to form
        testForm.addElement("myCheckBox", "my checkbox", new CheckboxControl(), new BooleanData(), true);
        testForm.addElement("myLongText", "my long text", new TextControl(), new LongData(), false);
        testForm.addElement("myDateTime", "my date and time", new DateTimeControl(), new DateData(), false);
        testForm.addElement("myButton", "my button", new ButtonControl(), null, false);

        return testForm;
    }

    /**
     * Testing reading from request with a primitive constraint set.
     */
    public void testFormPrimitiveConstraint() throws Exception {

        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest request = new MockHttpServletRequest();

        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myCheckBox", "true");
        request.addParameter("testForm.myLongText", "108");
        request.addParameter("testForm.myDateTime", (String) null);

        //Testing primitive constraint
        testForm.getElement("myDateTime").setConstraint(new NotEmptyConstraint());

        StandardServletInputData input = new StandardServletInputData(request);
        input.pushScope("testForm");
        testForm._getWidget().update(input);
        assertTrue("Test form must not be valid after reading from request", !testForm.convertAndValidate());
    }

    /**
     * Testing reading from request with a grouped constraint set.
     */
    public void testFormActiveGroupedConstraintInvalidates() throws Exception {

        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest request = new MockHttpServletRequest();

        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myCheckBox", "true");
        request.addParameter("testForm.myLongText", "108");
        request.addParameter("testForm.myDateTime", (String) null);

        // create helper
        ConstraintGroupHelper groupHelper = new ConstraintGroupHelper();
        testForm.getElement("myDateTime")
                .setConstraint(groupHelper.createGroupedConstraint(new NotEmptyConstraint(), "active"));

        StandardServletInputData input = new StandardServletInputData(request);
        input.pushScope("testForm");
        testForm._getWidget().update(input);

        groupHelper.setActiveGroup("active");
        assertTrue("Test form must not be valid after reading from request", !testForm.convertAndValidate());
    }

    /**
     * Testing reading from request with a grouped constraint set.
     */
    public void testFormActiveGroupedConstraintValidates() throws Exception {

        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest request = new MockHttpServletRequest();

        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myCheckBox", "true");
        request.addParameter("testForm.myLongText", "108");
        request.addParameter("testForm.myDateTime.date", "11.10.2015");
        request.addParameter("testForm.myDateTime.time", "01:01");

        // create helper
        ConstraintGroupHelper groupHelper = new ConstraintGroupHelper();
        testForm.getElement("myDateTime")
                .setConstraint(groupHelper.createGroupedConstraint(new NotEmptyConstraint(), "active"));

        StandardServletInputData input = new StandardServletInputData(request);
        input.pushScope("testForm");
        testForm._getWidget().update(input);

        groupHelper.setActiveGroup("active");
        assertTrue("Test form must be valid after reading from request", testForm.convertAndValidate());
    }

    /**
     * Testing reading from request with a grouped constraint set.
     */
    public void testFormInactiveGroupedConstraintValidates() throws Exception {

        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest request = new MockHttpServletRequest();

        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myCheckBox", "true");
        request.addParameter("testForm.myLongText", "108");
        request.addParameter("testForm.myDateTime.date", "11.10.2015");
        request.addParameter("testForm.myDateTime.time", "01:01");

        // create helper
        ConstraintGroupHelper groupHelper = new ConstraintGroupHelper();
        testForm.getElement("myDateTime")
                .setConstraint(groupHelper.createGroupedConstraint(new NotEmptyConstraint(), "active"));

        StandardServletInputData input = new StandardServletInputData(request);
        input.pushScope("testForm");
        testForm._getWidget().update(input);

        assertTrue("Test form must be valid after reading from request", testForm.convertAndValidate());
    }

    /**
     * Testing reading from request with a primitive constraint set.
     */
    public void testFormOptionalConstraint() throws Exception {

        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest request = new MockHttpServletRequest();

        //invalid

        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myCheckBox", "true");
        request.addParameter("testForm.myLongText", "12345");
        request.addParameter("testForm.myDateTime", (String) null);

        //Testing primitive constraint
        testForm.getElement("myLongText").setConstraint(
                new OptionalConstraint(new NumberInRangeConstraint(BigInteger.valueOf(20000), null)));

        StandardServletInputData input = new StandardServletInputData(request);
        input.pushScope("testForm");
        testForm._getWidget().update(input);
        input.popScope();

        assertTrue("Test form must not be valid after reading from request", !testForm.convertAndValidate());

        //valid

        request = new MockHttpServletRequest();

        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myCheckBox", "true");
        request.addParameter("testForm.myLongText", "40000");
        request.addParameter("testForm.myDateTime", (String) null);

        input = new StandardServletInputData(request);
        input.pushScope("testForm");
        testForm._getWidget().update(input);
        input.popScope();

        assertTrue("Test form must be valid after reading from request", testForm.convertAndValidate());

        //off

        request = new MockHttpServletRequest();

        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myCheckBox", "true");
        request.addParameter("testForm.myLongText", (String) null);
        request.addParameter("testForm.myDateTime", (String) null);

        input = new StandardServletInputData(request);
        input.pushScope("testForm");
        testForm._getWidget().update(input);
        input.popScope();

        assertTrue("Test form must be valid after reading from request", testForm.convertAndValidate());

    }

    public void testFormAfterTodayConstraint() throws Exception {

        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest request = new MockHttpServletRequest();

        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");

        //invalid

        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myDateTime.date", "11.10.1015");
        request.addParameter("testForm.myDateTime.time", "01:01");

        testForm.getElement("myDateTime").setConstraint(new AfterTodayConstraint(false));

        StandardServletInputData input = new StandardServletInputData(request);
        input.pushScope("testForm");
        testForm._getWidget().update(input);
        input.popScope();

        assertTrue("Test form must not be valid after reading from request", !testForm.convertAndValidate());

        request = new MockHttpServletRequest();

        //invalid
        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myDateTime.date", sdf.format(new Date()));
        request.addParameter("testForm.myDateTime.time", "00:00");

        testForm.getElement("myDateTime").setConstraint(new AfterTodayConstraint(false));

        input = new StandardServletInputData(request);
        input.pushScope("testForm");
        testForm._getWidget().update(input);
        input.popScope();

        assertTrue("Test form must not be valid after reading from request", !testForm.convertAndValidate());

        request = new MockHttpServletRequest();

        //invalid    
        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myDateTime.date", "11.10.2015");
        request.addParameter("testForm.myDateTime.time", "01:01");

        //Testing primitive constraint
        testForm.getElement("myDateTime").setConstraint(new AfterTodayConstraint(true));

        input = new StandardServletInputData(request);
        input.pushScope("testForm");
        testForm._getWidget().update(input);
        input.popScope();

        assertTrue("Test form must be valid after reading from request", testForm.convertAndValidate());

        request = new MockHttpServletRequest();

        //valid
        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myDateTime.date", sdf.format(new Date()));
        request.addParameter("testForm.myDateTime.time", "00:01");

        //Testing primitive constraint
        testForm.getElement("myDateTime").setConstraint(new AfterTodayConstraint(true));

        input = new StandardServletInputData(request);
        input.pushScope("testForm");
        testForm._getWidget().update(input);
        input.popScope();

        assertTrue("Test form must be valid after reading from request", testForm.convertAndValidate());
    }

    public void testFormRangeConstraint() throws Exception {

        FormWidget testForm = new FormWidget();
        testForm._getComponent().init(new MockEnviroment());

        //Adding elements to form
        FormElement lo = testForm.createElement("my date and time", new DateTimeControl(), new DateData(), false);
        FormElement hi = testForm.createElement("my date and time", new DateTimeControl(), new DateData(), false);
        FormWidget date = testForm.addSubForm("date");
        date.addElement("myDateLo", lo);
        date.addElement("myDateHi", hi);

        MockHttpServletRequest request = new MockHttpServletRequest();

        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");

        //valid

        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.date.myDateLo.date",
                sdf.format(new java.sql.Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24)));
        request.addParameter("testForm.date.myDateHi.date", sdf.format(new java.util.Date()));

        testForm.getElement("date").setConstraint(
                new RangeConstraint((FormElement) testForm.getGenericElementByFullName("date.myDateLo"),
                        (FormElement) testForm.getGenericElementByFullName("date.myDateHi"), true));

        StandardServletInputData input = new StandardServletInputData(request);
        input.pushScope("testForm");
        testForm._getWidget().update(input);
        input.popScope();

        assertTrue("Test form must be valid after reading from request", testForm.convertAndValidate());
    }

    /**
     * Test reading from request with a grouped constraint set, date is invalid.
     */
    public void testFormInactiveGroupedConstraintInValidates() throws Exception {
        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest request = new MockHttpServletRequest();

        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myCheckBox", "true");
        request.addParameter("testForm.myLongText", "108");
        request.addParameter("testForm.myDateTime.date", "11.10.20151");
        request.addParameter("testForm.myDateTime.time", "01:01");

        // create helper
        ConstraintGroupHelper groupHelper = new ConstraintGroupHelper();
        testForm.getElement("myDateTime")
                .setConstraint(groupHelper.createGroupedConstraint(new NotEmptyConstraint(), "active"));

        MockUiLibUtil.emulateHandleRequest(testForm, "testForm", request);

        assertFalse("Test form must be invalid after reading from request", testForm.convertAndValidate());
    }

    /**
     * Test reading from request with a grouped constraint set, date is invalid.
     */
    public void anotherTestFormInactiveGroupedConstraintInValidates() throws Exception {
        FormWidget testForm = makeUsualForm();

        MockHttpServletRequest request = new MockHttpServletRequest();

        request.addParameter("testForm.__present", "true");
        request.addParameter("testForm.myCheckBox", "true");
        request.addParameter("testForm.myLongText", "108");
        request.addParameter("testForm.myDateTime.date", "11.10.20151278901");
        request.addParameter("testForm.myDateTime.time", "01:01");

        // create helper
        ConstraintGroupHelper groupHelper = new ConstraintGroupHelper();
        testForm.getElement("myDateTime")
                .setConstraint(groupHelper.createGroupedConstraint(new NotEmptyConstraint(), "active"));

        MockUiLibUtil.emulateHandleRequest(testForm, "testForm", request);
        assertFalse("Test form must be invalid after reading from request", testForm.convertAndValidate());
    }
}