com.qcadoo.model.integration.FieldModuleIntegrationTest.java Source code

Java tutorial

Introduction

Here is the source code for com.qcadoo.model.integration.FieldModuleIntegrationTest.java

Source

/**
 * ***************************************************************************
 * Copyright (c) 2010 Qcadoo Limited
 * Project: Qcadoo Framework
 * Version: 1.2.0
 *
 * This file is part of Qcadoo.
 *
 * Qcadoo is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published
 * by the Free Software Foundation; either version 3 of the License,
 * or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 * ***************************************************************************
 */
package com.qcadoo.model.integration;

import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;

import java.math.BigDecimal;

import junit.framework.Assert;

import org.apache.commons.lang.StringUtils;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;

import com.qcadoo.model.api.DataDefinition;
import com.qcadoo.model.api.Entity;
import com.qcadoo.plugin.api.PluginStateResolver;
import com.qcadoo.plugin.internal.PluginUtilsService;

public class FieldModuleIntegrationTest extends IntegrationTest {

    @Test
    public void shouldCallAdditinanalFieldValidators() throws Exception {
        // given
        DataDefinition productDao = dataDefinitionService.get(PLUGIN_PRODUCTS_NAME, ENTITY_NAME_PRODUCT);
        DataDefinition machineDao = dataDefinitionService.get(PLUGIN_MACHINES_NAME, ENTITY_NAME_MACHINE);
        DataDefinition componentDao = dataDefinitionService.get(PLUGIN_PRODUCTS_NAME, ENTITY_NAME_COMPONENT);

        PluginStateResolver pluginStateResolver = mock(PluginStateResolver.class);
        PluginUtilsService pluginUtil = new PluginUtilsService();
        ReflectionTestUtils.setField(pluginUtil, "pluginStateResolver", pluginStateResolver);
        pluginUtil.init();
        given(pluginStateResolver.isEnabled(PLUGIN_MACHINES_NAME)).willReturn(true);

        Entity machine = machineDao.save(createMachine("asd"));

        Entity product = createProduct("asd", "asd");
        product = productDao.save(product);

        Entity component = createComponent("name", product, machine);
        component.setField("machineDescription", "as");

        // when
        component = componentDao.save(component);

        // then
        Assert.assertFalse(component.isValid());
    }

    @Test
    public void shouldCallAndPassAdditinanalFieldValidators() throws Exception {
        // given
        DataDefinition productDao = dataDefinitionService.get(PLUGIN_PRODUCTS_NAME, ENTITY_NAME_PRODUCT);
        DataDefinition machineDao = dataDefinitionService.get(PLUGIN_MACHINES_NAME, ENTITY_NAME_MACHINE);
        DataDefinition componentDao = dataDefinitionService.get(PLUGIN_PRODUCTS_NAME, ENTITY_NAME_COMPONENT);

        PluginStateResolver pluginStateResolver = mock(PluginStateResolver.class);
        PluginUtilsService pluginUtil = new PluginUtilsService();
        ReflectionTestUtils.setField(pluginUtil, "pluginStateResolver", pluginStateResolver);
        pluginUtil.init();
        given(pluginStateResolver.isEnabled(PLUGIN_MACHINES_NAME)).willReturn(true);

        Entity machine = machineDao.save(createMachine("asd"));

        Entity product = createProduct("asd", "asd");
        product = productDao.save(product);

        Entity component = createComponent("name", product, machine);
        component.setField("machineDescription", "asdfghjkl");

        // when
        component = componentDao.save(component);

        // then
        Assert.assertTrue(component.isValid());
    }

    @Test
    public void shouldNotCallAdditinanalFieldValidatorsIfPluginIsSystemDisabled() throws Exception {
        // given
        DataDefinition machineDao = dataDefinitionService.get(PLUGIN_MACHINES_NAME, ENTITY_NAME_MACHINE);
        machineDao.save(createMachine("asd"));

        pluginManager.disablePlugin(PLUGIN_MACHINES_NAME);

        PluginStateResolver pluginStateResolver = mock(PluginStateResolver.class);
        PluginUtilsService pluginUtil = new PluginUtilsService();
        ReflectionTestUtils.setField(pluginUtil, "pluginStateResolver", pluginStateResolver);
        pluginUtil.init();
        given(pluginStateResolver.isEnabled(PLUGIN_MACHINES_NAME)).willReturn(false);

        DataDefinition productDao = dataDefinitionService.get(PLUGIN_PRODUCTS_NAME, ENTITY_NAME_PRODUCT);
        DataDefinition componentDao = dataDefinitionService.get(PLUGIN_PRODUCTS_NAME, ENTITY_NAME_COMPONENT);

        Entity product = createProduct("asd", "asd");
        product = productDao.save(product);

        Entity component = createComponent("name", product, null);
        component.setField("machineDescription", "as");

        // when
        component = componentDao.save(component);

        // then
        Assert.assertTrue(component.isValid());
    }

    @Test
    public void shouldNotCallAdditinanalFieldValidatorsIfPluginIsDisabledForCurrentUser() throws Exception {
        // given
        DataDefinition machineDao = dataDefinitionService.get(PLUGIN_MACHINES_NAME, ENTITY_NAME_MACHINE);
        machineDao.save(createMachine("asd"));

        PluginStateResolver pluginStateResolver = mock(PluginStateResolver.class);
        PluginUtilsService pluginUtil = new PluginUtilsService();
        ReflectionTestUtils.setField(pluginUtil, "pluginStateResolver", pluginStateResolver);
        pluginUtil.init();
        given(pluginStateResolver.isEnabled(PLUGIN_MACHINES_NAME)).willReturn(false);

        DataDefinition productDao = dataDefinitionService.get(PLUGIN_PRODUCTS_NAME, ENTITY_NAME_PRODUCT);
        DataDefinition componentDao = dataDefinitionService.get(PLUGIN_PRODUCTS_NAME, ENTITY_NAME_COMPONENT);

        Entity product = createProduct("asd", "asd");
        product = productDao.save(product);

        Entity component = createComponent("name", product, null);
        component.setField("machineDescription", "as");

        // when
        component = componentDao.save(component);

        // then
        Assert.assertTrue(component.isValid());
    }

    @Test
    public void shouldCallAndPassMaxStringLenFieldValidators() throws Exception {
        // given
        final String stringWith300Characters = StringUtils.repeat("a", 300);
        DataDefinition productDao = dataDefinitionService.get(PLUGIN_PRODUCTS_NAME, ENTITY_NAME_PRODUCT);

        PluginStateResolver pluginStateResolver = mock(PluginStateResolver.class);
        PluginUtilsService pluginUtil = new PluginUtilsService();
        ReflectionTestUtils.setField(pluginUtil, "pluginStateResolver", pluginStateResolver);
        pluginUtil.init();
        given(pluginStateResolver.isEnabled(PLUGIN_PRODUCTS_NAME)).willReturn(true);

        Entity product = createProduct(stringWith300Characters, "asd");

        // when
        Entity savedProduct = productDao.save(product);

        // then
        Assert.assertTrue(savedProduct.isValid());
        Assert.assertEquals(stringWith300Characters, savedProduct.getStringField("name"));
    }

    @Test
    public void shouldCallAndFailDefaultMaxStringLenFieldValidators() throws Exception {
        // given
        final String stringWith300Characters = StringUtils.repeat("a", 300);

        // when & then
        Entity savedPart = performFieldValidationTestOnPart("name", stringWith300Characters, false);
        Assert.assertEquals("qcadooView.validate.field.error.invalidLength",
                savedPart.getError("name").getMessage());
    }

    @Test
    public void shouldCallAndPassDefaultDecimalFieldValidators() throws Exception {
        // given
        BigDecimal decimal = new BigDecimal("0.5");

        // when & then
        performFieldValidationTestOnPart("price", decimal, true);
    }

    @Test
    public void shouldCallAndFailDefaultMaxScaleValueLenFieldValidators() throws Exception {
        // given
        BigDecimal tooPreciseDecimal = new BigDecimal("0." + StringUtils.repeat("9", 20));

        // when & then
        Entity savedPart = performFieldValidationTestOnPart("price", tooPreciseDecimal, false);
        Assert.assertEquals("qcadooView.validate.field.error.invalidScale.max",
                savedPart.getError("price").getMessage());
    }

    @Test
    public void shouldCallAndFailDefaultMaxUnscaledValueLenFieldValidators() throws Exception {
        // given
        BigDecimal tooPreciseDecimal = new BigDecimal(StringUtils.repeat("9", 20) + ".0");

        // when & then
        Entity savedPart = performFieldValidationTestOnPart("price", tooPreciseDecimal, false);
        Assert.assertEquals("qcadooView.validate.field.error.invalidPrecision.max",
                savedPart.getError("price").getMessage());
    }

    @Test
    public void shouldCallAndPassDefaultIntegerFieldValidators() throws Exception {
        // given
        Integer integer = Integer.parseInt(StringUtils.repeat("1", 10));

        // when & then
        performFieldValidationTestOnPart("weight", integer, true);
    }

    @Test
    public void shouldCallAndPassDefaultTextFieldValidators() throws Exception {
        // given
        String textValue = StringUtils.repeat("a", 2048);

        // when & then
        performFieldValidationTestOnPart("description", textValue, true);
    }

    @Test
    public void shouldCallAndFailDefaultTextFieldValidators() throws Exception {
        // given
        String textValue = StringUtils.repeat("a", 2049);

        // when & then
        performFieldValidationTestOnPart("description", textValue, false);
    }

    @Test
    public void shouldCallAndPassTextFieldMaxLenValidators() throws Exception {
        // given
        String textValue = StringUtils.repeat("a", 4096);

        // when & then
        performFieldValidationTestOnPart("longDescription", textValue, true);
    }

    @Test
    public void shouldCallAndFailTextFieldMaxLenValidators() throws Exception {
        // given
        String textValue = StringUtils.repeat("a", 4097);

        // when & then
        performFieldValidationTestOnPart("longDescription", textValue, false);
    }

    @Test
    public void shouldCallAndPassDefaultPasswordFieldValidators() throws Exception {
        // given
        String textValue = StringUtils.repeat("a", 255);

        // when & then
        performFieldValidationTestOnPart("discountCode", textValue, true);
    }

    @Test
    public void shouldCallAndFailDefaultPasswordFieldValidators() throws Exception {
        // given
        String textValue = StringUtils.repeat("a", 256);

        // when & then
        performFieldValidationTestOnPart("discountCode", textValue, false);
    }

    @Test
    public void shouldCallAndPassPasswordFieldMaxLenValidators() throws Exception {
        // given
        String textValue = StringUtils.repeat("a", 512);

        // when & then
        performFieldValidationTestOnPart("longDiscountCode", textValue, true);
    }

    @Test
    public void shouldCallAndFailPasswordFieldMaxLenValidators() throws Exception {
        // given
        String textValue = StringUtils.repeat("a", 513);

        // when & then
        performFieldValidationTestOnPart("longDiscountCode", textValue, false);
    }

    private Entity performFieldValidationTestOnPart(final String fieldName, final Object fieldValue,
            final boolean shouldPass) {
        DataDefinition partDao = dataDefinitionService.get(PLUGIN_PRODUCTS_NAME, ENTITY_NAME_PART);

        PluginStateResolver pluginStateResolver = mock(PluginStateResolver.class);
        PluginUtilsService pluginUtil = new PluginUtilsService();
        ReflectionTestUtils.setField(pluginUtil, "pluginStateResolver", pluginStateResolver);
        pluginUtil.init();
        given(pluginStateResolver.isEnabled(PLUGIN_PRODUCTS_NAME)).willReturn(true);

        Entity part = createPart("somePart", null);
        part.setField(fieldName, fieldValue);

        // when
        Entity savedPart = partDao.save(part);

        // then
        Assert.assertEquals(shouldPass, savedPart.isValid());

        return savedPart;
    }

}