ch.rasc.extclassgenerator.ModelGeneratorBeanWithValidationTest.java Source code

Java tutorial

Introduction

Here is the source code for ch.rasc.extclassgenerator.ModelGeneratorBeanWithValidationTest.java

Source

/**
 * Copyright 2013-2014 Ralph Schaer <ralphschaer@gmail.com>
 *
 * 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 ch.rasc.extclassgenerator;

import static org.fest.assertions.api.Assertions.assertThat;

import java.io.IOException;
import java.math.BigDecimal;

import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;

import ch.rasc.extclassgenerator.bean.BeanWithValidation;
import ch.rasc.extclassgenerator.validation.CreditCardNumberValidation;
import ch.rasc.extclassgenerator.validation.DigitsValidation;
import ch.rasc.extclassgenerator.validation.EmailValidation;
import ch.rasc.extclassgenerator.validation.FormatValidation;
import ch.rasc.extclassgenerator.validation.FutureValidation;
import ch.rasc.extclassgenerator.validation.LengthValidation;
import ch.rasc.extclassgenerator.validation.NotBlankValidation;
import ch.rasc.extclassgenerator.validation.PastValidation;
import ch.rasc.extclassgenerator.validation.PresenceValidation;
import ch.rasc.extclassgenerator.validation.RangeValidation;

public class ModelGeneratorBeanWithValidationTest {

    @Before
    public void clearCaches() {
        ModelGenerator.clearCaches();
    }

    @Test
    public void testWriteModelHttpServletRequestHttpServletResponseClassOfQOutputFormatBoolean()
            throws IOException {
        MockHttpServletResponse response = new MockHttpServletResponse();
        ModelGenerator.writeModel(new MockHttpServletRequest(), response, BeanWithValidation.class,
                OutputFormat.EXTJS4, IncludeValidation.ALL, true);
        GeneratorTestUtil.compareExtJs4Code("BeanWithValidation", response.getContentAsString(), true, false);

        response = new MockHttpServletResponse();
        ModelGenerator.writeModel(new MockHttpServletRequest(), response, BeanWithValidation.class,
                OutputFormat.TOUCH2, IncludeValidation.ALL, false);
        GeneratorTestUtil.compareTouch2Code("BeanWithValidation", response.getContentAsString(), false, false);

        response = new MockHttpServletResponse();
        ModelGenerator.writeModel(new MockHttpServletRequest(), response, BeanWithValidation.class,
                OutputFormat.EXTJS4, IncludeValidation.ALL, true);
        GeneratorTestUtil.compareExtJs4Code("BeanWithValidation", response.getContentAsString(), true, false);

        response = new MockHttpServletResponse();
        ModelGenerator.writeModel(new MockHttpServletRequest(), response, BeanWithValidation.class,
                OutputFormat.TOUCH2, IncludeValidation.ALL, true);
        GeneratorTestUtil.compareTouch2Code("BeanWithValidation", response.getContentAsString(), true, false);
    }

    @Test
    public void testWriteModelHttpServletRequestHttpServletResponseModelBeanOutputFormat() throws IOException {
        MockHttpServletResponse response = new MockHttpServletResponse();
        ModelBean model = ModelGenerator.createModel(BeanWithValidation.class, IncludeValidation.ALL);
        ModelGenerator.writeModel(new MockHttpServletRequest(), response, model, OutputFormat.EXTJS4);
        GeneratorTestUtil.compareExtJs4Code("BeanWithValidation", response.getContentAsString(), false, false);

        response = new MockHttpServletResponse();
        ModelGenerator.writeModel(new MockHttpServletRequest(), response, model, OutputFormat.TOUCH2);
        GeneratorTestUtil.compareTouch2Code("BeanWithValidation", response.getContentAsString(), false, false);
    }

    @Test
    public void testWriteModelHttpServletRequestHttpServletResponseModelBeanOutputFormatBoolean()
            throws IOException {
        MockHttpServletResponse response = new MockHttpServletResponse();
        ModelBean model = ModelGenerator.createModel(BeanWithValidation.class, IncludeValidation.ALL);
        ModelGenerator.writeModel(new MockHttpServletRequest(), response, model, OutputFormat.EXTJS4, false);
        GeneratorTestUtil.compareExtJs4Code("BeanWithValidation", response.getContentAsString(), false, false);

        response = new MockHttpServletResponse();
        ModelGenerator.writeModel(new MockHttpServletRequest(), response, model, OutputFormat.TOUCH2, false);
        GeneratorTestUtil.compareTouch2Code("BeanWithValidation", response.getContentAsString(), false, false);

        response = new MockHttpServletResponse();
        ModelGenerator.writeModel(new MockHttpServletRequest(), response, model, OutputFormat.EXTJS4, true);
        GeneratorTestUtil.compareExtJs4Code("BeanWithValidation", response.getContentAsString(), true, false);

        response = new MockHttpServletResponse();
        ModelGenerator.writeModel(new MockHttpServletRequest(), response, model, OutputFormat.TOUCH2, true);
        GeneratorTestUtil.compareTouch2Code("BeanWithValidation", response.getContentAsString(), true, false);
    }

    @Test
    public void testGenerateJavascriptClassOfQOutputFormatBoolean() {
        GeneratorTestUtil.compareExtJs4Code("BeanWithValidation", ModelGenerator.generateJavascript(
                BeanWithValidation.class, OutputFormat.EXTJS4, IncludeValidation.ALL, true), true, false);
        GeneratorTestUtil.compareExtJs4Code("BeanWithValidation", ModelGenerator.generateJavascript(
                BeanWithValidation.class, OutputFormat.EXTJS4, IncludeValidation.ALL, false), false, false);

        GeneratorTestUtil.compareTouch2Code("BeanWithValidation", ModelGenerator.generateJavascript(
                BeanWithValidation.class, OutputFormat.TOUCH2, IncludeValidation.ALL, true), true, false);
        GeneratorTestUtil.compareTouch2Code("BeanWithValidation", ModelGenerator.generateJavascript(
                BeanWithValidation.class, OutputFormat.TOUCH2, IncludeValidation.ALL, false), false, false);
    }

    @Test
    public void testCreateModel() {
        ModelBean modelBean = ModelGenerator.createModel(BeanWithValidation.class, IncludeValidation.ALL);
        assertThat(modelBean.getReadMethod()).isNull();
        assertThat(modelBean.getCreateMethod()).isNull();
        assertThat(modelBean.getUpdateMethod()).isNull();
        assertThat(modelBean.getDestroyMethod()).isNull();
        assertThat(modelBean.getIdProperty()).isNull();
        assertThat(modelBean.getVersionProperty()).isNull();
        assertThat(modelBean.isPaging()).isFalse();
        assertThat(modelBean.getName()).isEqualTo("ch.rasc.extclassgenerator.bean.BeanWithValidation");
        assertThat(modelBean.getFields()).hasSize(10);
        assertThat(BeanWithValidation.expectedFields).hasSize(10);

        for (ModelFieldBean expectedField : BeanWithValidation.expectedFields) {
            ModelFieldBean field = modelBean.getFields().get(expectedField.getName());
            assertThat(field).isEqualsToByComparingFields(expectedField);
        }

        assertThat(modelBean.getValidations()).hasSize(13);

        assertThat(modelBean.getValidations().get(0)).isInstanceOf(PresenceValidation.class);
        PresenceValidation presenceValidation = (PresenceValidation) modelBean.getValidations().get(0);
        assertThat(presenceValidation.getType()).isEqualTo("presence");

        assertThat(modelBean.getValidations().get(1)).isInstanceOf(EmailValidation.class);
        EmailValidation emailValidation = (EmailValidation) modelBean.getValidations().get(1);
        assertThat(emailValidation.getType()).isEqualTo("email");
        assertThat(emailValidation.getField()).isEqualTo("email");

        assertThat(modelBean.getValidations().get(2)).isInstanceOf(FormatValidation.class);
        FormatValidation formatValidation = (FormatValidation) modelBean.getValidations().get(2);
        assertThat(formatValidation.getType()).isEqualTo("format");
        assertThat(formatValidation.getField()).isEqualTo("url");
        assertThat(formatValidation.getMatcher()).isEqualTo("/^\\/\\w.*\\.\\w.*/");

        assertThat(modelBean.getValidations().get(3)).isInstanceOf(RangeValidation.class);
        RangeValidation rangeValidation = (RangeValidation) modelBean.getValidations().get(3);
        assertThat(rangeValidation.getType()).isEqualTo("range");
        assertThat(rangeValidation.getField()).isEqualTo("minMax1");
        assertThat(rangeValidation.getMin()).isNull();
        assertThat(rangeValidation.getMax()).isEqualTo(new BigDecimal("100"));

        assertThat(modelBean.getValidations().get(4)).isInstanceOf(RangeValidation.class);
        rangeValidation = (RangeValidation) modelBean.getValidations().get(4);
        assertThat(rangeValidation.getType()).isEqualTo("range");
        assertThat(rangeValidation.getField()).isEqualTo("minMax1");
        assertThat(rangeValidation.getMax()).isNull();
        assertThat(rangeValidation.getMin()).isEqualByComparingTo(new BigDecimal("1"));

        assertThat(modelBean.getValidations().get(5)).isInstanceOf(RangeValidation.class);
        rangeValidation = (RangeValidation) modelBean.getValidations().get(5);
        assertThat(rangeValidation.getType()).isEqualTo("range");
        assertThat(rangeValidation.getField()).isEqualTo("minMax2");
        assertThat(rangeValidation.getMin()).isNull();
        assertThat(rangeValidation.getMax()).isEqualTo(new BigDecimal(10000));

        assertThat(modelBean.getValidations().get(6)).isInstanceOf(RangeValidation.class);
        rangeValidation = (RangeValidation) modelBean.getValidations().get(6);
        assertThat(rangeValidation.getType()).isEqualTo("range");
        assertThat(rangeValidation.getField()).isEqualTo("minMax2");
        assertThat(rangeValidation.getMax()).isNull();
        assertThat(rangeValidation.getMin()).isEqualTo(new BigDecimal(20));

        assertThat(modelBean.getValidations().get(7)).isInstanceOf(RangeValidation.class);
        rangeValidation = (RangeValidation) modelBean.getValidations().get(7);
        assertThat(rangeValidation.getType()).isEqualTo("range");
        assertThat(rangeValidation.getField()).isEqualTo("minMax3");
        assertThat(rangeValidation.getMin()).isEqualTo(new BigDecimal(20));
        assertThat(rangeValidation.getMax()).isEqualTo(new BigDecimal(50));

        assertThat(modelBean.getValidations().get(8)).isInstanceOf(DigitsValidation.class);
        DigitsValidation digitsValidation = (DigitsValidation) modelBean.getValidations().get(8);
        assertThat(digitsValidation.getType()).isEqualTo("digits");
        assertThat(digitsValidation.getField()).isEqualTo("digits");
        assertThat(digitsValidation.getInteger()).isEqualTo(10);
        assertThat(digitsValidation.getFraction()).isEqualTo(2);

        assertThat(modelBean.getValidations().get(9)).isInstanceOf(FutureValidation.class);
        assertThat(modelBean.getValidations().get(9).getType()).isEqualTo("future");
        assertThat(modelBean.getValidations().get(9).getField()).isEqualTo("future");

        assertThat(modelBean.getValidations().get(10)).isInstanceOf(PastValidation.class);
        assertThat(modelBean.getValidations().get(10).getType()).isEqualTo("past");
        assertThat(modelBean.getValidations().get(10).getField()).isEqualTo("past");

        assertThat(modelBean.getValidations().get(11)).isInstanceOf(NotBlankValidation.class);
        assertThat(modelBean.getValidations().get(11).getType()).isEqualTo("notBlank");
        assertThat(modelBean.getValidations().get(11).getField()).isEqualTo("notBlank");

        assertThat(modelBean.getValidations().get(12)).isInstanceOf(CreditCardNumberValidation.class);
        assertThat(modelBean.getValidations().get(12).getType()).isEqualTo("creditCardNumber");
        assertThat(modelBean.getValidations().get(12).getField()).isEqualTo("creditCardNumber");

    }

    @Test
    public void testGenerateJavascriptModelBeanOutputFormatBoolean() {
        ModelBean model = ModelGenerator.createModel(BeanWithValidation.class, IncludeValidation.ALL);
        GeneratorTestUtil.compareExtJs4Code("BeanWithValidation",
                ModelGenerator.generateJavascript(model, OutputFormat.EXTJS4, true), true, false);
        GeneratorTestUtil.compareExtJs4Code("BeanWithValidation",
                ModelGenerator.generateJavascript(model, OutputFormat.EXTJS4, false), false, false);

        GeneratorTestUtil.compareTouch2Code("BeanWithValidation",
                ModelGenerator.generateJavascript(model, OutputFormat.TOUCH2, true), true, false);
        GeneratorTestUtil.compareTouch2Code("BeanWithValidation",
                ModelGenerator.generateJavascript(model, OutputFormat.TOUCH2, false), false, false);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testLengthValidation() {
        @SuppressWarnings("unused")
        LengthValidation lv = new LengthValidation("name", (Integer) null, (Integer) null);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testRangeValidation() {
        @SuppressWarnings("unused")
        RangeValidation rv = new RangeValidation("name", (Long) null, (Long) null);
    }

}