/**
* 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.model.impl;
import com.liferay.dynamic.data.mapping.BaseDDMTestCase;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.model.LocalizedValue;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.util.PropsValues;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
import org.powermock.modules.junit4.PowerMockRunner;
/**
* @author Miguel Angelo Caldas Gallindo
* @author Marcellus Tavares
*/
@PrepareForTest(PropsValues.class)
@RunWith(PowerMockRunner.class)
@SuppressStaticInitializationFor(
{
"com.liferay.portal.kernel.xml.SAXReaderUtil",
"com.liferay.portal.util.PropsValues"
}
)
public class DDMStructureImplTest extends BaseDDMTestCase {
@Before
@Override
public void setUp() throws Exception {
super.setUp();
setUpConfigurationFactoryUtil();
setUpDDMFormJSONDeserializer();
setUpDDMFormJSONSerializer();
setUpDDMStructureLocalServiceUtil();
setUpDDMTemplateLocalServiceUtil();
setUpHtmlUtil();
setUpJSONFactoryUtil();
setUpLanguageUtil();
setUpLocaleUtil();
setUpPropsValues();
setUpSAXReaderUtil();
}
@Test
public void testGetAvailableLanguageIds() throws Exception {
Set<Locale> availableLocales = createAvailableLocales(
LocaleUtil.BRAZIL, LocaleUtil.US);
DDMForm ddmForm = createDDMForm(availableLocales, LocaleUtil.US);
DDMStructure structure = createStructure("Test Structure", ddmForm);
String[] actualAvailableLanguageIds =
structure.getAvailableLanguageIds();
Assert.assertEquals(
Arrays.toString(actualAvailableLanguageIds), 2,
actualAvailableLanguageIds.length);
for (String actualAvailableLanguageId : actualAvailableLanguageIds) {
Locale actualAvailableLocale = LocaleUtil.fromLanguageId(
actualAvailableLanguageId);
Assert.assertTrue(availableLocales.contains(actualAvailableLocale));
}
}
@Test
public void testGetChildrenFieldNames() throws Exception {
DDMForm ddmForm = createDDMForm();
DDMFormField field1 = createTextDDMFormField("field1");
addNestedTextDDMFormFields(field1, "child1Field1", "child2Field1");
DDMFormField field2 = createTextDDMFormField("field2");
DDMFormField field3 = createTextDDMFormField("field3");
addDDMFormFields(ddmForm, field1, field2, field3);
DDMStructure structure = createStructure("Test Structure", ddmForm);
List<String> actualChildrenFieldNames = structure.getChildrenFieldNames(
"field1");
Assert.assertEquals(
actualChildrenFieldNames.toString(), 2,
actualChildrenFieldNames.size());
Assert.assertTrue(actualChildrenFieldNames.contains("child1Field1"));
Assert.assertTrue(actualChildrenFieldNames.contains("child2Field1"));
}
@Test
public void testGetDDMForm() throws Exception {
DDMForm ddmForm = createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
ddmForm.addDDMFormField(createTextDDMFormField("field1"));
DDMStructure structure = createStructure("Test Structure", ddmForm);
DDMForm ddmForm1 = structure.getDDMForm();
ddmForm1.addDDMFormField(createTextDDMFormField("field2"));
DDMForm ddmForm2 = structure.getDDMForm();
Map<String, DDMFormField> ddmForm2FieldsMap =
ddmForm2.getDDMFormFieldsMap(false);
Assert.assertFalse(ddmForm2FieldsMap.containsKey("field2"));
}
@Test
public void testGetDefaultLanguageId() throws Exception {
DDMForm ddmForm = createDDMForm(
createAvailableLocales(LocaleUtil.BRAZIL, LocaleUtil.US),
LocaleUtil.BRAZIL);
DDMStructure structure = createStructure("Test Structure", ddmForm);
Assert.assertEquals(
LocaleUtil.toLanguageId(LocaleUtil.BRAZIL),
structure.getDefaultLanguageId());
}
@Test
public void testGetFieldLabel() throws Exception {
DDMForm ddmForm = createDDMForm(
createAvailableLocales(LocaleUtil.BRAZIL, LocaleUtil.US),
LocaleUtil.US);
DDMFormField field = createTextDDMFormField("field");
LocalizedValue label = field.getLabel();
label.addString(LocaleUtil.BRAZIL, "Campo de Texto");
label.addString(LocaleUtil.US, "Text Field");
List<DDMFormField> ddmFormFields = ddmForm.getDDMFormFields();
ddmFormFields.add(field);
DDMStructure structure = createStructure("Test Structure", ddmForm);
Assert.assertEquals(
"Campo de Texto",
structure.getFieldLabel("field", LocaleUtil.BRAZIL));
Assert.assertEquals(
"Text Field", structure.getFieldLabel("field", LocaleUtil.US));
}
@Test
public void testGetFieldNames() throws Exception {
DDMForm ddmForm = createDDMForm();
DDMFormField field1 = createTextDDMFormField("field1");
addNestedTextDDMFormFields(field1, "child1Field1", "child2Field1");
DDMFormField field2 = createTextDDMFormField("field2");
DDMFormField field3 = createTextDDMFormField("field3");
addDDMFormFields(ddmForm, field1, field2, field3);
DDMStructure structure = createStructure("Test Structure", ddmForm);
Set<String> expectedFieldNames = new HashSet<>();
expectedFieldNames.add("child1Field1");
expectedFieldNames.add("child2Field1");
expectedFieldNames.add("field1");
expectedFieldNames.add("field2");
expectedFieldNames.add("field3");
Assert.assertEquals(expectedFieldNames, structure.getFieldNames());
}
@Test
public void testGetFieldNamesWithParentStructure() throws Exception {
DDMForm ddmForm = createDDMForm();
DDMFormField field1 = createTextDDMFormField("field1");
addNestedTextDDMFormFields(field1, "child1Field1", "child2Field1");
DDMFormField field2 = createTextDDMFormField("field2");
DDMFormField field3 = createTextDDMFormField("field3");
addDDMFormFields(ddmForm, field1, field2, field3);
DDMStructure parentStructure = createStructure(
"Parent Structure", ddmForm);
DDMStructure childStructure = createStructure(
"Child Structure", "field4", "field5");
childStructure.setParentStructureId(parentStructure.getStructureId());
Set<String> expectedFieldNames = new HashSet<>();
expectedFieldNames.add("child1Field1");
expectedFieldNames.add("child2Field1");
expectedFieldNames.add("field1");
expectedFieldNames.add("field2");
expectedFieldNames.add("field3");
expectedFieldNames.add("field4");
expectedFieldNames.add("field5");
Assert.assertEquals(expectedFieldNames, childStructure.getFieldNames());
}
@Test
public void testGetFieldTip() throws Exception {
DDMForm ddmForm = createDDMForm(
createAvailableLocales(LocaleUtil.BRAZIL, LocaleUtil.US),
LocaleUtil.US);
DDMFormField field = createTextDDMFormField("field");
LocalizedValue tip = field.getTip();
tip.addString(LocaleUtil.BRAZIL, "Dica para campo de texto.");
tip.addString(LocaleUtil.US, "Tip for text field");
List<DDMFormField> ddmFormFields = ddmForm.getDDMFormFields();
ddmFormFields.add(field);
DDMStructure structure = createStructure("Test Structure", ddmForm);
Assert.assertEquals(
"Dica para campo de texto.",
structure.getFieldTip("field", LocaleUtil.BRAZIL));
Assert.assertEquals(
"Tip for text field",
structure.getFieldTip("field", LocaleUtil.US));
}
@Test
public void testGetFieldType() throws Exception {
DDMForm ddmForm = createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
addTextDDMFormFields(ddmForm, "field1");
DDMStructure structure = createStructure("Test Structure", ddmForm);
Assert.assertEquals("text", structure.getFieldType("field1"));
}
@Test
public void testGetGetFieldDataType() throws Exception {
DDMStructure structure = createStructure(
"TestStructure", createDDMForm("field1"));
Assert.assertEquals("string", structure.getFieldDataType("field1"));
}
@Test
public void testGetRootFieldNames() throws Exception {
DDMForm ddmForm = createDDMForm();
DDMFormField field1 = createTextDDMFormField("field1");
addNestedTextDDMFormFields(field1, "child1Field1", "child2Field1");
DDMFormField field2 = createTextDDMFormField("field2");
DDMFormField field3 = createTextDDMFormField("field3");
addDDMFormFields(ddmForm, field1, field2, field3);
DDMStructure structure = createStructure("Test Structure", ddmForm);
List<String> expectedFieldNames = new ArrayList<>();
expectedFieldNames.add("field1");
expectedFieldNames.add("field2");
expectedFieldNames.add("field3");
Assert.assertEquals(expectedFieldNames, structure.getRootFieldNames());
}
@Test
public void testHasField() throws Exception {
DDMStructure parentStructure = createStructure(
"Parent Structure", "field1", "field2");
Assert.assertTrue(parentStructure.hasField("field1"));
Assert.assertTrue(parentStructure.hasField("field2"));
DDMStructure childStructure = createStructure(
"Child Structure", "field3", "field4");
childStructure.setParentStructureId(parentStructure.getStructureId());
Assert.assertTrue(childStructure.hasField("field1"));
Assert.assertTrue(childStructure.hasField("field2"));
Assert.assertTrue(childStructure.hasField("field3"));
Assert.assertTrue(childStructure.hasField("field4"));
Assert.assertFalse(childStructure.hasField("fieldNotFound"));
}
@Test
public void testIsFieldRepeatable() throws Exception {
DDMForm ddmForm = createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField field1 = createTextDDMFormField(
"field1", "label", false, true, false);
addDDMFormFields(ddmForm, field1);
DDMStructure structure = createStructure("Test Structure", ddmForm);
Assert.assertTrue(structure.getFieldRepeatable("field1"));
}
@Test
public void testIsFieldRequired() throws Exception {
DDMForm ddmForm = createDDMForm(
createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormField field1 = createTextDDMFormField(
"field1", "label", false, false, true);
addDDMFormFields(ddmForm, field1);
DDMStructure structure = createStructure("Test Structure", ddmForm);
Assert.assertTrue(structure.getFieldRequired("field1"));
}
}