/**
* 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 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.UnlocalizedValue;
import com.liferay.dynamic.data.mapping.model.Value;
import com.liferay.dynamic.data.mapping.storage.DDMFormFieldValue;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
import com.liferay.portal.kernel.util.StringPool;
import java.util.List;
import java.util.Locale;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
* @author Marcellus Tavares
*/
public class DDMFormValuesTransformerTest extends BaseDDMTestCase {
@Before
@Override
public void setUp() throws Exception {
super.setUp();
setUpJSONFactoryUtil();
}
@Test
public void testTransformNestedRepeatableTextFormFieldValue()
throws Exception {
DDMForm ddmForm = createDDMForm();
DDMFormField nameDDMFormField = new DDMFormField("Name", "textarea");
DDMFormField phoneDDMFormField = new DDMFormField("Phone", "text");
phoneDDMFormField.setRepeatable(true);
nameDDMFormField.addNestedDDMFormField(phoneDDMFormField);
ddmForm.addDDMFormField(nameDDMFormField);
DDMFormValues ddmFormValues = createDDMFormValues(ddmForm);
DDMFormFieldValue nameDDMFormFieldValue = createDDMFormFieldValue(
"Name", new UnlocalizedValue("Joe Smith"));
nameDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue("Phone", new UnlocalizedValue("123")));
nameDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue("Phone", new UnlocalizedValue("456")));
nameDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue("Phone", new UnlocalizedValue("789")));
ddmFormValues.addDDMFormFieldValue(nameDDMFormFieldValue);
DDMFormValuesTransformer ddmFormValuesTransformer =
new DDMFormValuesTransformer(ddmFormValues);
String prefix = "+1";
ddmFormValuesTransformer.addTransformer(
new DDMFormFieldValuePrefixAppender(prefix));
ddmFormValuesTransformer.transform();
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
nameDDMFormFieldValue = ddmFormFieldValues.get(0);
testDDMFormFieldValue(ddmFormFieldValues.get(0), "Joe Smith");
List<DDMFormFieldValue> phoneDDMFormFieldValues =
nameDDMFormFieldValue.getNestedDDMFormFieldValues();
testDDMFormFieldValue(
phoneDDMFormFieldValues.get(0), prefix.concat("123"));
testDDMFormFieldValue(
phoneDDMFormFieldValues.get(1), prefix.concat("456"));
testDDMFormFieldValue(
phoneDDMFormFieldValues.get(2), prefix.concat("789"));
}
@Test
public void testTransformTextFormFieldValue() throws Exception {
DDMForm ddmForm = createDDMForm();
addTextDDMFormFields(ddmForm, "FirstName", "LastName");
DDMFormField ddmFormField = new DDMFormField("Description", "textarea");
ddmForm.addDDMFormField(ddmFormField);
DDMFormValues ddmFormValues = createDDMFormValues(ddmForm);
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue("FirstName", new UnlocalizedValue("Joe")));
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue("LastName", new UnlocalizedValue("Smith")));
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"Description", new UnlocalizedValue("Description Value")));
DDMFormValuesTransformer ddmFormValuesTransformer =
new DDMFormValuesTransformer(ddmFormValues);
String prefix = StringPool.UNDERLINE;
ddmFormValuesTransformer.addTransformer(
new DDMFormFieldValuePrefixAppender(prefix));
ddmFormValuesTransformer.transform();
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
testDDMFormFieldValue(ddmFormFieldValues.get(0), prefix.concat("Joe"));
testDDMFormFieldValue(
ddmFormFieldValues.get(1), prefix.concat("Smith"));
testDDMFormFieldValue(ddmFormFieldValues.get(2), "Description Value");
}
@Override
protected DDMFormField createTextDDMFormField(String name) {
return createTextDDMFormField(name, name, false, false, false);
}
protected void testDDMFormFieldValue(
DDMFormFieldValue ddmFormFieldValue, String expectedValue) {
Value value = ddmFormFieldValue.getValue();
Locale defaultLocale = value.getDefaultLocale();
Assert.assertEquals(expectedValue, value.getString(defaultLocale));
}
private static class DDMFormFieldValuePrefixAppender
implements DDMFormFieldValueTransformer {
@Override
public String getFieldType() {
return "text";
}
@Override
public void transform(DDMFormFieldValue ddmFormFieldValue) {
Value value = ddmFormFieldValue.getValue();
for (Locale locale : value.getAvailableLocales()) {
value.addString(
locale, _prefix.concat(value.getString(locale)));
}
}
private DDMFormFieldValuePrefixAppender(String prefix) {
_prefix = prefix;
}
private final String _prefix;
}
}