/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library 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 Lesser General Public License for more
* details.
*/
package com.liferay.dynamic.data.mapping.validator.internal;
import com.liferay.dynamic.data.mapping.expression.internal.DDMExpressionFactoryImpl;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.DDMFormFieldOptions;
import com.liferay.dynamic.data.mapping.model.DDMFormFieldType;
import com.liferay.dynamic.data.mapping.model.DDMFormFieldValidation;
import com.liferay.dynamic.data.mapping.model.DDMFormRule;
import com.liferay.dynamic.data.mapping.model.LocalizedValue;
import com.liferay.dynamic.data.mapping.test.util.DDMFormTestUtil;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustNotDuplicateFieldName;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetAvailableLocales;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetDefaultLocale;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetDefaultLocaleAsAvailableLocale;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetFieldsForForm;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetOptionsForField;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetValidAvailableLocalesForProperty;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetValidCharactersForFieldName;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetValidCharactersForFieldType;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetValidDefaultLocaleForProperty;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetValidFormRuleExpression;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetValidIndexType;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetValidValidationExpression;
import com.liferay.dynamic.data.mapping.validator.DDMFormValidationException.MustSetValidVisibilityExpression;
import com.liferay.portal.bean.BeanPropertiesImpl;
import com.liferay.portal.kernel.bean.BeanPropertiesUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import java.util.Arrays;
import java.util.Locale;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
/**
* @author Marcellus Tavares
*/
public class DDMFormValidatorTest {
@Before
public void setUp() {
setUpBeanPropertiesUtil();
setUpDDMFormValidator();
}
@Test(expected = MustSetValidCharactersForFieldType.class)
public void testCaretInFieldType() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField("Name", "html-text_@");
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidCharactersForFieldName.class)
public void testDashInFieldName() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
ddmForm.addDDMFormField(
new DDMFormField("text-dash", DDMFormFieldType.TEXT));
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetDefaultLocaleAsAvailableLocale.class)
public void testDefaultLocaleMissingAsAvailableLocale() throws Exception {
DDMForm ddmForm = new DDMForm();
ddmForm.setAvailableLocales(createAvailableLocales(LocaleUtil.BRAZIL));
ddmForm.setDefaultLocale(LocaleUtil.US);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidCharactersForFieldName.class)
public void testDollarInFieldName() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
ddmForm.addDDMFormField(
new DDMFormField("$text", DDMFormFieldType.TEXT));
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustNotDuplicateFieldName.class)
public void testDuplicateCaseInsensitiveFieldName() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
ddmForm.addDDMFormField(
new DDMFormField("Name1", DDMFormFieldType.TEXT));
DDMFormField name2DDMFormField = new DDMFormField(
"Name2", DDMFormFieldType.TEXT);
name2DDMFormField.addNestedDDMFormField(
new DDMFormField("name1", DDMFormFieldType.TEXT));
ddmForm.addDDMFormField(name2DDMFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustNotDuplicateFieldName.class)
public void testDuplicateFieldName() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
ddmForm.addDDMFormField(
new DDMFormField("Name1", DDMFormFieldType.TEXT));
DDMFormField name2DDMFormField = new DDMFormField(
"Name2", DDMFormFieldType.TEXT);
name2DDMFormField.addNestedDDMFormField(
new DDMFormField("Name1", DDMFormFieldType.TEXT));
ddmForm.addDDMFormField(name2DDMFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test
public void testFormRuleEmptyCondition() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm("Name");
ddmForm.addDDMFormRule(new DDMFormRule("", Arrays.asList("true")));
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidIndexType.class)
public void testInvalidFieldIndexType() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"Text", DDMFormFieldType.TEXT);
ddmFormField.setIndexType("Invalid");
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidCharactersForFieldName.class)
public void testInvalidFieldName() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"*", DDMFormFieldType.TEXT);
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidCharactersForFieldType.class)
public void testInvalidFieldType() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField("Name", "html-text_*");
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidValidationExpression.class)
public void testInvalidFieldValidationExpression() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"Name", DDMFormFieldType.TEXT);
DDMFormFieldValidation ddmFormFieldValidation =
new DDMFormFieldValidation();
ddmFormFieldValidation.setExpression("*/+");
ddmFormField.setDDMFormFieldValidation(ddmFormFieldValidation);
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidVisibilityExpression.class)
public void testInvalidFieldVisibilityExpression() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"Name", DDMFormFieldType.TEXT);
ddmFormField.setVisibilityExpression("1 -< 2");
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidFormRuleExpression.class)
public void testInvalidFormRuleAction() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm("Name");
ddmForm.addDDMFormRule(new DDMFormRule("true", Arrays.asList("*/?")));
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidFormRuleExpression.class)
public void testInvalidFormRuleCondition() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm("Name");
ddmForm.addDDMFormRule(new DDMFormRule("*/?", Arrays.asList("true")));
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetFieldsForForm.class)
public void testNoFieldsSetForForm() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetOptionsForField.class)
public void testNoOptionsSetForFieldOptions() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"Select", DDMFormFieldType.SELECT);
ddmFormField.setProperty("dataSourceType", "manual");
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetOptionsForField.class)
public void testNoOptionsSetForMultipleCheckbox() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"MultipleCheckbox", DDMFormFieldType.CHECKBOX_MULTIPLE);
ddmFormField.setProperty("dataSourceType", "manual");
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetAvailableLocales.class)
public void testNullAvailableLocales() throws Exception {
DDMForm ddmForm = new DDMForm();
ddmForm.setAvailableLocales(null);
ddmForm.setDefaultLocale(LocaleUtil.US);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetDefaultLocale.class)
public void testNullDefaultLocale() throws Exception {
DDMForm ddmForm = new DDMForm();
ddmForm.setDefaultLocale(null);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test
public void testOptionsSetForMultipleCheckbox() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"MultipleCheckbox", DDMFormFieldType.CHECKBOX_MULTIPLE);
ddmFormField.setProperty("dataSourceType", "manual");
DDMFormFieldOptions ddmFormFieldOptions =
ddmFormField.getDDMFormFieldOptions();
ddmFormFieldOptions.addOptionLabel("1", LocaleUtil.US, "Option 1");
ddmFormFieldOptions.addOptionLabel("2", LocaleUtil.US, "Option 2");
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidCharactersForFieldName.class)
public void testSpaceInFieldName() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
ddmForm.addDDMFormField(
new DDMFormField("Text with Space", DDMFormFieldType.TEXT));
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test
public void testSpecialCharactersInFieldName() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
ddmForm.addDDMFormField(new DDMFormField("和ó", DDMFormFieldType.TEXT));
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test
public void testSpecialCharactersInFieldType() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField("Name", "html-çê的Ü");
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test
public void testValidFieldType() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField("Name", "html-text_1");
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test
public void testValidFieldValidationExpression() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"Name", DDMFormFieldType.TEXT);
DDMFormFieldValidation ddmFormFieldValidation =
new DDMFormFieldValidation();
ddmFormFieldValidation.setExpression("false");
ddmFormField.setDDMFormFieldValidation(ddmFormFieldValidation);
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test
public void testValidFieldVisibilityExpression() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"Name", DDMFormFieldType.TEXT);
ddmFormField.setVisibilityExpression("1 < 2");
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidAvailableLocalesForProperty.class)
public void testWrongAvailableLocalesSetForFieldOptions() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"Select", DDMFormFieldType.SELECT);
ddmFormField.setProperty("dataSourceType", "manual");
DDMFormFieldOptions ddmFormFieldOptions =
ddmFormField.getDDMFormFieldOptions();
ddmFormFieldOptions.addOptionLabel(
"Value", LocaleUtil.BRAZIL, "Portuguese Label");
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidAvailableLocalesForProperty.class)
public void testWrongAvailableLocalesSetForLabel() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"Text", DDMFormFieldType.TEXT);
LocalizedValue label = ddmFormField.getLabel();
label.addString(LocaleUtil.BRAZIL, "Portuguese Label");
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidDefaultLocaleForProperty.class)
public void testWrongDefaultLocaleSetForFieldOptions() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"Select", DDMFormFieldType.SELECT);
ddmFormField.setProperty("dataSourceType", "manual");
DDMFormFieldOptions ddmFormFieldOptions =
ddmFormField.getDDMFormFieldOptions();
ddmFormFieldOptions.addOptionLabel(
"Value", LocaleUtil.US, "Value Label");
ddmFormFieldOptions.setDefaultLocale(LocaleUtil.BRAZIL);
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
@Test(expected = MustSetValidDefaultLocaleForProperty.class)
public void testWrongDefaultLocaleSetForLabel() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"Text", DDMFormFieldType.TEXT);
LocalizedValue label = ddmFormField.getLabel();
label.addString(LocaleUtil.US, "Label");
label.setDefaultLocale(LocaleUtil.BRAZIL);
ddmForm.addDDMFormField(ddmFormField);
_ddmFormValidatorImpl.validate(ddmForm);
}
protected Set<Locale> createAvailableLocales(Locale... locales) {
return DDMFormTestUtil.createAvailableLocales(locales);
}
protected void setUpBeanPropertiesUtil() {
BeanPropertiesUtil beanPropertiesUtil = new BeanPropertiesUtil();
beanPropertiesUtil.setBeanProperties(new BeanPropertiesImpl());
}
protected void setUpDDMFormValidator() {
_ddmFormValidatorImpl.setDDMExpressionFactory(
new DDMExpressionFactoryImpl());
}
private final DDMFormValidatorImpl _ddmFormValidatorImpl =
new DDMFormValidatorImpl();
}