/**
* 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.util;
import static org.mockito.Mockito.when;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import com.liferay.dynamic.data.mapping.form.field.type.DDMFormFieldTypeSettings;
import com.liferay.dynamic.data.mapping.form.field.type.DefaultDDMFormFieldTypeSettings;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.DDMFormRule;
import com.liferay.portal.kernel.language.Language;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.util.ResourceBundleUtil;
import com.liferay.portal.kernel.util.StringPool;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
/**
* @author Leonardo Barros
* @author Marcellus Tavares
*/
@PrepareForTest(ResourceBundleUtil.class)
@RunWith(PowerMockRunner.class)
public class DDMFormFactoryTest {
@Before
public void setUp() {
setUpLanguageUtil();
setUpResourceBundleUtil();
}
@Test
public void testCreateDDMFormFieldTypeSettingsDDMForm() {
DDMForm ddmForm = DDMFormFactory.create(DDMFormFieldTypeSettings.class);
Assert.assertNotNull(ddmForm);
assertRequiredDDMFormFieldTypeSettings(
ddmForm.getDDMFormFieldsMap(false));
}
@Test
public void testCreateDefaultDDMFormFieldTypeSettingsDDMForm() {
DDMForm ddmForm = DDMFormFactory.create(
DefaultDDMFormFieldTypeSettings.class);
Assert.assertNotNull(ddmForm);
Map<String, DDMFormField> ddmFormFieldsMap =
ddmForm.getDDMFormFieldsMap(false);
assertRequiredDDMFormFieldTypeSettings(ddmFormFieldsMap);
DDMFormField indexTypeDDMFormField = ddmFormFieldsMap.get("indexType");
Assert.assertNotNull(indexTypeDDMFormField);
Assert.assertEquals("string", indexTypeDDMFormField.getDataType());
Assert.assertEquals("select", indexTypeDDMFormField.getType());
DDMFormField labelDDMFormField = ddmFormFieldsMap.get("label");
Assert.assertNotNull(labelDDMFormField);
Assert.assertEquals("string", labelDDMFormField.getDataType());
Assert.assertEquals("key_value", labelDDMFormField.getType());
Assert.assertEquals(true, labelDDMFormField.isLocalizable());
DDMFormField localizableDDMFormField = ddmFormFieldsMap.get(
"localizable");
Assert.assertNotNull(localizableDDMFormField);
Assert.assertEquals("boolean", localizableDDMFormField.getDataType());
Assert.assertEquals("checkbox", localizableDDMFormField.getType());
DDMFormField predefinedValueDDMFormField = ddmFormFieldsMap.get(
"predefinedValue");
Assert.assertNotNull(predefinedValueDDMFormField);
Assert.assertEquals(
"string", predefinedValueDDMFormField.getDataType());
Assert.assertEquals("text", predefinedValueDDMFormField.getType());
Assert.assertEquals(true, predefinedValueDDMFormField.isLocalizable());
DDMFormField readOnlyDDMFormField = ddmFormFieldsMap.get("readOnly");
Assert.assertNotNull(readOnlyDDMFormField);
Assert.assertEquals("boolean", readOnlyDDMFormField.getDataType());
Assert.assertEquals("checkbox", readOnlyDDMFormField.getType());
DDMFormField repeatableDDMFormField = ddmFormFieldsMap.get(
"repeatable");
Assert.assertNotNull(repeatableDDMFormField);
Assert.assertEquals("boolean", repeatableDDMFormField.getDataType());
Assert.assertEquals("checkbox", repeatableDDMFormField.getType());
DDMFormField requiredDDMFormField = ddmFormFieldsMap.get("readOnly");
Assert.assertNotNull(requiredDDMFormField);
Assert.assertEquals("boolean", requiredDDMFormField.getDataType());
Assert.assertEquals("checkbox", requiredDDMFormField.getType());
DDMFormField showLabelDDMFormField = ddmFormFieldsMap.get("showLabel");
Assert.assertNotNull(showLabelDDMFormField);
Assert.assertEquals("boolean", showLabelDDMFormField.getDataType());
Assert.assertEquals("checkbox", showLabelDDMFormField.getType());
DDMFormField tipDDMFormField = ddmFormFieldsMap.get("tip");
Assert.assertNotNull(tipDDMFormField);
Assert.assertEquals("string", tipDDMFormField.getDataType());
Assert.assertEquals("text", tipDDMFormField.getType());
Assert.assertEquals(true, tipDDMFormField.isLocalizable());
}
@Test
public void testCreateDynamicFormWithoutRules() {
DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithoutRules.class);
List<DDMFormRule> ddmFormRules = ddmForm.getDDMFormRules();
Assert.assertEquals(ddmFormRules.toString(), 0, ddmFormRules.size());
}
@Test
public void testCreateDynamicFormWithRules() {
DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithRules.class);
List<DDMFormRule> ddmFormRules = ddmForm.getDDMFormRules();
Assert.assertEquals(ddmFormRules.toString(), 2, ddmFormRules.size());
DDMFormRule ddmFormRule = ddmFormRules.get(0);
Assert.assertEquals("condition1", ddmFormRule.getCondition());
List<String> ddmFormRuleActions = ddmFormRule.getActions();
Assert.assertEquals(
ddmFormRuleActions.toString(), 2, ddmFormRuleActions.size());
Assert.assertArrayEquals(
new String[] {"action1", "action2"}, ddmFormRuleActions.toArray());
ddmFormRule = ddmFormRules.get(1);
Assert.assertEquals("TRUE", ddmFormRule.getCondition());
ddmFormRuleActions = ddmFormRule.getActions();
Assert.assertEquals(
ddmFormRuleActions.toString(), 1, ddmFormRuleActions.size());
Assert.assertArrayEquals(
new String[] {"action1"}, ddmFormRuleActions.toArray());
}
@Test
public void testeCreateDynamicFormWithFieldSet() {
DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithFieldSet.class);
List<DDMFormField> ddmFormFields = ddmForm.getDDMFormFields();
Assert.assertEquals(ddmFormFields.toString(), 1, ddmFormFields.size());
DDMFormField ddmFormField = ddmFormFields.get(0);
Assert.assertEquals("parameters", ddmFormField.getName());
Assert.assertEquals("fieldset", ddmFormField.getType());
Assert.assertEquals(StringPool.BLANK, ddmFormField.getDataType());
Assert.assertTrue(ddmFormField.isRepeatable());
List<DDMFormField> nestedDDMFormFields =
ddmFormField.getNestedDDMFormFields();
Assert.assertEquals(
nestedDDMFormFields.toString(), 2, nestedDDMFormFields.size());
DDMFormField nestedDDMFormField1 = nestedDDMFormFields.get(0);
Assert.assertEquals("parameterName", nestedDDMFormField1.getName());
Assert.assertEquals("text", nestedDDMFormField1.getType());
DDMFormField nestedDDMFormField2 = nestedDDMFormFields.get(1);
Assert.assertEquals("parameterValue", nestedDDMFormField2.getName());
Assert.assertEquals("text", nestedDDMFormField2.getType());
}
protected void assertRequiredDDMFormFieldTypeSettings(
Map<String, DDMFormField> ddmFormFieldsMap) {
DDMFormField dataTypeDDMFormField = ddmFormFieldsMap.get("dataType");
Assert.assertNotNull(dataTypeDDMFormField);
Assert.assertEquals("string", dataTypeDDMFormField.getDataType());
Assert.assertEquals("text", dataTypeDDMFormField.getType());
Assert.assertEquals(true, dataTypeDDMFormField.isRequired());
Assert.assertEquals(false, dataTypeDDMFormField.isLocalizable());
DDMFormField nameDDMFormField = ddmFormFieldsMap.get("name");
Assert.assertNotNull(nameDDMFormField);
Assert.assertEquals("string", nameDDMFormField.getDataType());
Assert.assertEquals("text", nameDDMFormField.getType());
Assert.assertEquals(true, nameDDMFormField.isRequired());
Assert.assertEquals(false, nameDDMFormField.isLocalizable());
DDMFormField typeDDMFormField = ddmFormFieldsMap.get("type");
Assert.assertNotNull(typeDDMFormField);
Assert.assertEquals("string", typeDDMFormField.getDataType());
Assert.assertEquals("text", typeDDMFormField.getType());
Assert.assertEquals(true, typeDDMFormField.isRequired());
Assert.assertEquals(false, typeDDMFormField.isLocalizable());
}
protected void setUpLanguageUtil() {
LanguageUtil languageUtil = new LanguageUtil();
languageUtil.setLanguage(_language);
}
protected void setUpResourceBundleUtil() {
mockStatic(ResourceBundleUtil.class);
when(
ResourceBundleUtil.getBundle(
Matchers.anyString(), Matchers.any(Locale.class),
Matchers.any(ClassLoader.class))
).thenReturn(
ResourceBundleUtil.EMPTY_RESOURCE_BUNDLE
);
}
@Mock
private Language _language;
@com.liferay.dynamic.data.mapping.annotations.DDMForm
private interface DynamicFormWithFieldSet {
@com.liferay.dynamic.data.mapping.annotations.DDMFormField
public ParametersFieldSetSettings[] parameters();
}
@com.liferay.dynamic.data.mapping.annotations.DDMForm
private interface DynamicFormWithoutRules {
}
@com.liferay.dynamic.data.mapping.annotations.DDMForm(
rules = {
@com.liferay.dynamic.data.mapping.annotations.DDMFormRule(
actions = {"action1", "action2"}, condition = "condition1"
),
@com.liferay.dynamic.data.mapping.annotations.DDMFormRule(
actions = {"action1"}
)
}
)
private interface DynamicFormWithRules {
}
@com.liferay.dynamic.data.mapping.annotations.DDMForm
private interface ParametersFieldSetSettings {
@com.liferay.dynamic.data.mapping.annotations.DDMFormField
public String parameterName();
@com.liferay.dynamic.data.mapping.annotations.DDMFormField
public String parameterValue();
}
}