org.efaps.tests.ci.table.TableValidation.java Source code

Java tutorial

Introduction

Here is the source code for org.efaps.tests.ci.table.TableValidation.java

Source

/*
 * Copyright 2003 - 2016 The eFaps Team
 *
 * 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.efaps.tests.ci.table;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang3.EnumUtils;
import org.efaps.admin.ui.field.Field.Display;
import org.efaps.api.ui.UIType;
import org.efaps.tests.ci.AbstractCIDataProvider;
import org.efaps.tests.ci.CITableDataProvider;
import org.efaps.tests.ci.digester.CITable;
import org.efaps.tests.ci.digester.CITableDefinition;
import org.efaps.tests.ci.digester.CITableField;
import org.efaps.tests.ci.digester.CITableFieldProperty;
import org.testng.Assert;
import org.testng.ITestContext;
import org.testng.annotations.Test;

/**
 * TODO comment!
 *
 * @author The eFaps Team
 */
public class TableValidation {
    /**
     * @param _ciTable form to be checked.
     */
    @Test(dataProvider = "CITable", dataProviderClass = CITableDataProvider.class, description = "Properties must have a value")
    public void propertyValidateHasValue(final CITable _ciTable) {
        for (final CITableDefinition def : _ciTable.getDefinitions()) {
            for (final CITableField field : def.getFields()) {
                for (final CITableFieldProperty property : field.getProperties()) {
                    final String msg = String.format("Table: '%s', Field: '%s', Property: '%s' missing Value.",
                            def.getName(), field.getName(), property.getName());
                    Assert.assertNotEquals(property.getValue(), "", msg);
                    Assert.assertNotNull(property.getValue(), msg);
                }
            }
        }
    }

    /**
     * @param _ciTable form to be checked.
     */
    @Test(dataProvider = "CITable", dataProviderClass = CITableDataProvider.class, description = "Property 'ModeCreate', 'ModeEdit', 'ModeView', 'ModePrint', 'ModeSearch'"
            + " must have a value from ENUM org.efaps.admin.ui.field.Field.Display")
    public void fieldValidateMode(final CITable _ciTable) {
        for (final CITableDefinition def : _ciTable.getDefinitions()) {
            for (final CITableField field : def.getFields()) {
                for (final CITableFieldProperty property : field.getProperties()) {
                    switch (property.getName()) {
                    case "ModeCreate":
                    case "ModeEdit":
                    case "ModeView":
                    case "ModePrint":
                    case "ModeSearch":
                        final Display value = EnumUtils.getEnum(Display.class, property.getValue());
                        Assert.assertNotNull(value,
                                String.format("Table: '%s', Field: '%s' invalid Display Definition.", def.getName(),
                                        field.getName()));
                        break;
                    default:
                        break;
                    }
                }
            }
        }
    }

    /**
     * @param _ciForm form to be checked.
     */
    @Test(dataProvider = "CITable", dataProviderClass = CITableDataProvider.class, description = "Property 'Label' must have a value in the DBProperties")
    public void labelWithDBProperties(final ITestContext _context, final CITable _ciTable) {
        final String regex4FieldLabelExclude = _context.getCurrentXmlTest().getParameter("regex4FieldLabelExclude");
        Pattern pattern = null;
        if (regex4FieldLabelExclude != null) {
            pattern = Pattern.compile(regex4FieldLabelExclude);
        }
        for (final CITableDefinition def : _ciTable.getDefinitions()) {
            for (final CITableField field : def.getFields()) {
                for (final CITableFieldProperty property : field.getProperties()) {
                    if ("Label".equals(property.getName())) {
                        boolean exclude = false;
                        if (pattern != null) {
                            final Matcher matcher = pattern.matcher(property.getValue());
                            exclude = matcher.find();
                        }
                        if (!exclude) {
                            Assert.assertTrue(AbstractCIDataProvider.DBPROPERTIES.containsKey(property.getValue()),
                                    String.format("Table: '%s', Field: '%s' invalid Label: '%s'.", def.getName(),
                                            field.getName(), property.getValue()));
                        }
                    }
                }
            }
        }
    }

    /**
     * Does the fields of the form have all a data definition.
     * @param _ciForm form to be checked.
     */
    @Test(dataProvider = "CITable", dataProviderClass = CITableDataProvider.class, description = "Field must have one of this Properties 'UIType', 'UIProvider', 'Attribute', 'Select'")
    public void fieldHasDataConfiguration(final CITable _ciTable) {
        for (final CITableDefinition def : _ciTable.getDefinitions()) {
            for (final CITableField field : def.getFields()) {
                if (field.getCharacter() == null) {
                    boolean has = false;
                    boolean hasRef = false;
                    for (final CITableFieldProperty property : field.getProperties()) {
                        switch (property.getName()) {
                        case "UIType":
                        case "UIProvider":
                        case "Attribute":
                        case "Select":
                            has = true;
                            break;
                        case "HRef":
                            hasRef = true;
                            break;
                        default:
                            break;
                        }
                        if (has) {
                            break;
                        }
                    }
                    // if a href was set and no value it is a simple link and can be ignored
                    if (!has && hasRef) {
                        has = field.getTriggers().isEmpty();
                    }
                    Assert.assertEquals(has, true,
                            String.format("Table: '%s', Field: '%s' has no DataField Definition.", def.getName(),
                                    field.getName()));
                }
            }
        }
    }

    /**
     * Does the field attribute has valid values.
     * @param _ciTable form to be checked.
     */
    @Test(dataProvider = "CITable", dataProviderClass = CITableDataProvider.class, description = "Field Property 'UIType' must have a value from org.efaps.api.ui.UIType enum.")
    public void fieldPropertyUITypeValues(final CITable _ciTable) {
        for (final CITableDefinition def : _ciTable.getDefinitions()) {
            for (final CITableField field : def.getFields()) {
                if (field.getCharacter() == null) {
                    final CITableFieldProperty property = field.getProperty("UIType");
                    if (property != null) {
                        Assert.assertEquals(EnumUtils.isValidEnum(UIType.class, property.getValue()), true,
                                String.format("Table: '%s', Field: '%s', Property 'UIType' value '%s' invalid.",
                                        def.getName(), field.getName(), property.getValue()));
                    }
                }
            }
        }
    }

    /**
     * Does the field attribute has valid values.
     * @param _ciTable form to be checked.
     */
    @Test(dataProvider = "CITable", dataProviderClass = CITableDataProvider.class, description = "Field Property 'Phrase' and 'MsgPhrase' must be accompanied by 'UIProvider'.")
    public void fieldPropertyPhrase(final CITable _ciTable) {
        for (final CITableDefinition def : _ciTable.getDefinitions()) {
            for (final CITableField field : def.getFields()) {
                if (field.getCharacter() == null) {
                    final CITableFieldProperty phrase = field.getProperty("Phrase");
                    final CITableFieldProperty msgPhrase = field.getProperty("MsgPhrase");
                    if (phrase != null || msgPhrase != null) {
                        final CITableFieldProperty uiProvider = field.getProperty("UIProvider");
                        Assert.assertEquals(uiProvider != null, true,
                                String.format(
                                        "Table: '%s', Field: '%s', Property 'Phrase' and 'MsgPhrase' "
                                                + "must be accompanied by 'UIProvider'.",
                                        def.getName(), field.getName()));
                    }
                }
            }
        }
    }

    /**
     * Does the field attribute has valid values.
     * @param _ciTable Table to be checked.
     */
    @Test(dataProvider = "CITable", dataProviderClass = CITableDataProvider.class, description = "Field Property 'Select' that do not return an attribute must be accompanied by 'UIProvider' "
            + "or 'UIType'.")
    public void fieldPropertySelect(final CITable _ciTable) {
        for (final CITableDefinition def : _ciTable.getDefinitions()) {
            for (final CITableField field : def.getFields()) {
                if (field.getCharacter() == null) {
                    final CITableFieldProperty select = field.getProperty("Select");
                    if (select != null && !select.getValue().endsWith("]")) {
                        final CITableFieldProperty uiProvider = field.getProperty("UIProvider");
                        final CITableFieldProperty uiType = field.getProperty("UIType");
                        Assert.assertEquals(uiProvider != null || uiType != null, true,
                                String.format("Table: '%s', Field: '%s', Property 'Select' that do not "
                                        + "return an attribute must be accompanied by 'UIProvider' or 'UIType'.",
                                        def.getName(), field.getName()));
                    }
                }
            }
        }
    }

}