/**
* 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.form.values.factory;
import com.liferay.dynamic.data.mapping.form.field.type.DDMFormFieldValueRequestParameterRetriever;
import com.liferay.dynamic.data.mapping.form.values.factory.internal.DDMFormValuesFactoryImpl;
import com.liferay.dynamic.data.mapping.io.DDMFormValuesJSONSerializer;
import com.liferay.dynamic.data.mapping.io.internal.DDMFormValuesJSONSerializerImpl;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.LocalizedValue;
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.dynamic.data.mapping.test.util.DDMFormTestUtil;
import com.liferay.dynamic.data.mapping.test.util.DDMFormValuesTestUtil;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMap;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMapFactory;
import com.liferay.portal.json.JSONFactoryImpl;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.util.LocaleThreadLocal;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.ReflectionUtil;
import com.liferay.portal.kernel.util.StringPool;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import org.junit.After;
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.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.skyscreamer.jsonassert.JSONAssert;
import org.springframework.mock.web.MockHttpServletRequest;
/**
* @author Marcellus Tavares
*/
@PrepareForTest(LocaleUtil.class)
@RunWith(PowerMockRunner.class)
public class DDMFormValuesFactoryTest extends PowerMockito {
@Before
public void setUp() throws Exception {
setUpDDMFormValuesFactoryServiceTrackerMap();
setUpDDMFormValuesJSONSerializer();
setUpJSONFactoryUtil();
setUpLocaleThreadLocal();
setUpLocaleUtil();
}
@After
public void tearDown() {
LocaleThreadLocal.setSiteDefaultLocale(_originalSiteDefaultLocale);
}
@Test
public void testCreateDefaultWithEmptyRequest() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
DDMFormField nameDDMFormField = DDMFormTestUtil.createTextDDMFormField(
"Name", true, false, false);
LocalizedValue namePredefinedValue = createLocalizedValue(
"Joe", LocaleUtil.US);
nameDDMFormField.setPredefinedValue(namePredefinedValue);
DDMFormField phoneDDMFormField = DDMFormTestUtil.createTextDDMFormField(
"Phone", true, false, false);
LocalizedValue phonePredefinedValue = createLocalizedValue(
"123", LocaleUtil.US);
phoneDDMFormField.setPredefinedValue(phonePredefinedValue);
nameDDMFormField.addNestedDDMFormField(phoneDDMFormField);
ddmForm.addDDMFormField(nameDDMFormField);
DDMFormValues expectedDDMFormValues = createDDMFormValues(
ddmForm, createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
DDMFormFieldValue nameDDMFormFieldValue = createDDMFormFieldValue(
"gatu", "Name", namePredefinedValue);
nameDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue("waht", "Phone", phonePredefinedValue));
expectedDDMFormValues.addDDMFormFieldValue(nameDDMFormFieldValue);
DDMFormValues actualDDMFormValues = _ddmFormValuesFactory.create(
new MockHttpServletRequest(), ddmForm);
List<DDMFormFieldValue> actualDDMFormFieldValues =
actualDDMFormValues.getDDMFormFieldValues();
// Name
DDMFormFieldValue actualNameDDMFormFieldValue =
actualDDMFormFieldValues.get(0);
Value actualNameDDMFormFieldValueValue =
actualNameDDMFormFieldValue.getValue();
Assert.assertEquals(
LocaleUtil.US, actualNameDDMFormFieldValueValue.getDefaultLocale());
Assert.assertEquals(
"Joe", actualNameDDMFormFieldValueValue.getString(LocaleUtil.US));
// Phone
List<DDMFormFieldValue> actualPhoneDDMFormFieldValues =
actualNameDDMFormFieldValue.getNestedDDMFormFieldValues();
DDMFormFieldValue actualPhoneDDMFormFieldValue =
actualPhoneDDMFormFieldValues.get(0);
Value actualPhoneDDMFormFieldValueValue =
actualPhoneDDMFormFieldValue.getValue();
Assert.assertEquals(
LocaleUtil.US,
actualPhoneDDMFormFieldValueValue.getDefaultLocale());
Assert.assertEquals(
"123", actualPhoneDDMFormFieldValueValue.getString(LocaleUtil.US));
}
@Test
public void testCreateWithLocalizableFields() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm("Title", "Content");
DDMFormValues expectedDDMFormValues = createDDMFormValues(
ddmForm, createAvailableLocales(LocaleUtil.BRAZIL, LocaleUtil.US),
LocaleUtil.US);
expectedDDMFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"wqer", "Title",
createLocalizedValue("Title", "Titulo", LocaleUtil.US)));
expectedDDMFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"thsy", "Content",
createLocalizedValue("Content", "Conteudo", LocaleUtil.US)));
MockHttpServletRequest mockHttpServletRequest =
new MockHttpServletRequest();
mockHttpServletRequest.addParameter(
"availableLanguageIds", "en_US,pt_BR");
mockHttpServletRequest.addParameter(
"defaultLanguageId", LocaleUtil.toLanguageId(LocaleUtil.US));
// Title
mockHttpServletRequest.addParameter(
"ddm$$Title$wqer$0$$en_US", "Title");
mockHttpServletRequest.addParameter(
"ddm$$Title$wqer$0$$pt_BR", "Titulo");
// Content
mockHttpServletRequest.addParameter(
"ddm$$Content$thsy$0$$en_US", "Content");
mockHttpServletRequest.addParameter(
"ddm$$Content$thsy$0$$pt_BR", "Conteudo");
DDMFormValues actualDDMFormValues = _ddmFormValuesFactory.create(
mockHttpServletRequest, ddmForm);
assertEquals(expectedDDMFormValues, actualDDMFormValues);
}
@Test
public void testCreateWithRepeatableAndLocalizableField() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
DDMFormField ddmFormField = DDMFormTestUtil.createTextDDMFormField(
"Title", true, true, false);
ddmForm.addDDMFormField(ddmFormField);
DDMFormValues expectedDDMFormValues = createDDMFormValues(
ddmForm, createAvailableLocales(LocaleUtil.BRAZIL, LocaleUtil.US),
LocaleUtil.US);
expectedDDMFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"wqer", "Title",
createLocalizedValue("Title 1", "Titulo 1", LocaleUtil.US)));
expectedDDMFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"fahu", "Title",
createLocalizedValue("Title 2", "Titulo 2", LocaleUtil.US)));
MockHttpServletRequest mockHttpServletRequest =
new MockHttpServletRequest();
mockHttpServletRequest.addParameter(
"availableLanguageIds", "en_US,pt_BR");
mockHttpServletRequest.addParameter(
"defaultLanguageId", LocaleUtil.toLanguageId(LocaleUtil.US));
// Title
mockHttpServletRequest.addParameter(
"ddm$$Title$wqer$0$$en_US", "Title 1");
mockHttpServletRequest.addParameter(
"ddm$$Title$wqer$0$$pt_BR", "Titulo 1");
mockHttpServletRequest.addParameter(
"ddm$$Title$fahu$1$$en_US", "Title 2");
mockHttpServletRequest.addParameter(
"ddm$$Title$fahu$1$$pt_BR", "Titulo 2");
DDMFormValues actualDDMFormValues = _ddmFormValuesFactory.create(
mockHttpServletRequest, ddmForm);
assertEquals(expectedDDMFormValues, actualDDMFormValues);
}
@Test
public void testCreateWithRepeatableAndLocalizableNestedField()
throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
DDMFormField nameDDMFormField = DDMFormTestUtil.createTextDDMFormField(
"Name", true, true, false);
DDMFormField phoneDDMFormField = DDMFormTestUtil.createTextDDMFormField(
"Phone", true, true, false);
nameDDMFormField.addNestedDDMFormField(phoneDDMFormField);
ddmForm.addDDMFormField(nameDDMFormField);
DDMFormValues expectedDDMFormValues = createDDMFormValues(
ddmForm, createAvailableLocales(LocaleUtil.BRAZIL, LocaleUtil.US),
LocaleUtil.US);
DDMFormFieldValue paulDDMFormFieldValue = createDDMFormFieldValue(
"wqer", "Name",
createLocalizedValue("Paul", "Paulo", LocaleUtil.US));
paulDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"gatu", "Phone",
createLocalizedValue("12", "34", LocaleUtil.US)));
paulDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"hato", "Phone",
createLocalizedValue("56", "78", LocaleUtil.US)));
expectedDDMFormValues.addDDMFormFieldValue(paulDDMFormFieldValue);
DDMFormFieldValue joeDDMFormFieldValue = createDDMFormFieldValue(
"fahu", "Name", createLocalizedValue("Joe", "Joao", LocaleUtil.US));
joeDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"jamh", "Phone",
createLocalizedValue("90", "01", LocaleUtil.US)));
expectedDDMFormValues.addDDMFormFieldValue(joeDDMFormFieldValue);
MockHttpServletRequest mockHttpServletRequest =
new MockHttpServletRequest();
mockHttpServletRequest.addParameter(
"availableLanguageIds", "en_US,pt_BR");
mockHttpServletRequest.addParameter(
"defaultLanguageId", LocaleUtil.toLanguageId(LocaleUtil.US));
// Name
mockHttpServletRequest.addParameter("ddm$$Name$wqer$0$$en_US", "Paul");
mockHttpServletRequest.addParameter("ddm$$Name$wqer$0$$pt_BR", "Paulo");
mockHttpServletRequest.addParameter("ddm$$Name$fahu$1$$en_US", "Joe");
mockHttpServletRequest.addParameter("ddm$$Name$fahu$1$$pt_BR", "Joao");
// Phone
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Phone$gatu$0$$en_US", "12");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Phone$gatu$0$$pt_BR", "34");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Phone$hato$1$$en_US", "56");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Phone$hato$1$$pt_BR", "78");
mockHttpServletRequest.addParameter(
"ddm$$Name$fahu$1#Phone$jamh$0$$en_US", "90");
mockHttpServletRequest.addParameter(
"ddm$$Name$fahu$1#Phone$jamh$0$$pt_BR", "01");
DDMFormValues actualDDMFormValues = _ddmFormValuesFactory.create(
mockHttpServletRequest, ddmForm);
assertEquals(expectedDDMFormValues, actualDDMFormValues);
}
@Test
public void testCreateWithRepeatableAndLocalizableNestedFields()
throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
DDMFormField nameDDMFormField = DDMFormTestUtil.createTextDDMFormField(
"Name", true, true, false);
DDMFormField text1DDMFormField = DDMFormTestUtil.createTextDDMFormField(
"Text1", true, true, false);
nameDDMFormField.addNestedDDMFormField(text1DDMFormField);
DDMFormField text2DDMFormField = DDMFormTestUtil.createTextDDMFormField(
"Text2", true, true, false);
nameDDMFormField.addNestedDDMFormField(text2DDMFormField);
ddmForm.addDDMFormField(nameDDMFormField);
DDMFormValues expectedDDMFormValues = createDDMFormValues(
ddmForm, createAvailableLocales(LocaleUtil.BRAZIL, LocaleUtil.US),
LocaleUtil.US);
DDMFormFieldValue paulDDMFormFieldValue = createDDMFormFieldValue(
"wqer", "Name",
createLocalizedValue("Paul", "Paulo", LocaleUtil.US));
paulDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"gatu", "Text1",
createLocalizedValue(
"Text1 Paul One", "Text1 Paulo Um", LocaleUtil.US)));
paulDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"hayt", "Text1",
createLocalizedValue(
"Text1 Paul Two", "Text1 Paulo Dois", LocaleUtil.US)));
paulDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"haby", "Text2",
createLocalizedValue(
"Text2 Paul One", "Text2 Paulo Um", LocaleUtil.US)));
paulDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"makp", "Text2",
createLocalizedValue(
"Text2 Paul Two", "Text2 Paulo Dois", LocaleUtil.US)));
expectedDDMFormValues.addDDMFormFieldValue(paulDDMFormFieldValue);
DDMFormFieldValue joeDDMFormFieldValue = createDDMFormFieldValue(
"fahu", "Name", createLocalizedValue("Joe", "Joao", LocaleUtil.US));
joeDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"banm", "Text1",
createLocalizedValue(
"Text1 Joe One", "Text1 Joao Um", LocaleUtil.US)));
joeDDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"bagj", "Text2",
createLocalizedValue(
"Text2 Joe One", "Text2 Joao Um", LocaleUtil.US)));
expectedDDMFormValues.addDDMFormFieldValue(joeDDMFormFieldValue);
MockHttpServletRequest mockHttpServletRequest =
new MockHttpServletRequest();
mockHttpServletRequest.addParameter(
"availableLanguageIds", "en_US,pt_BR");
mockHttpServletRequest.addParameter(
"defaultLanguageId", LocaleUtil.toLanguageId(LocaleUtil.US));
// Name
mockHttpServletRequest.addParameter("ddm$$Name$wqer$0$$en_US", "Paul");
mockHttpServletRequest.addParameter("ddm$$Name$wqer$0$$pt_BR", "Paulo");
mockHttpServletRequest.addParameter("ddm$$Name$fahu$1$$en_US", "Joe");
mockHttpServletRequest.addParameter("ddm$$Name$fahu$1$$pt_BR", "Joao");
// Text 1
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Text1$gatu$0$$en_US", "Text1 Paul One");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Text1$gatu$0$$pt_BR", "Text1 Paulo Um");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Text1$hayt$1$$en_US", "Text1 Paul Two");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Text1$hayt$1$$pt_BR", "Text1 Paulo Dois");
mockHttpServletRequest.addParameter(
"ddm$$Name$fahu$1#Text1$banm$0$$en_US", "Text1 Joe One");
mockHttpServletRequest.addParameter(
"ddm$$Name$fahu$1#Text1$banm$0$$pt_BR", "Text1 Joao Um");
// Text 2
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Text2$haby$0$$en_US", "Text2 Paul One");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Text2$haby$0$$pt_BR", "Text2 Paulo Um");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Text2$makp$1$$en_US", "Text2 Paul Two");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Text2$makp$1$$pt_BR", "Text2 Paulo Dois");
mockHttpServletRequest.addParameter(
"ddm$$Name$fahu$1#Text2$bagj$0$$en_US", "Text2 Joe One");
mockHttpServletRequest.addParameter(
"ddm$$Name$fahu$1#Text2$bagj$0$$pt_BR", "Text2 Joao Um");
DDMFormValues actualDDMFormValues = _ddmFormValuesFactory.create(
mockHttpServletRequest, ddmForm);
assertEquals(expectedDDMFormValues, actualDDMFormValues);
}
@Test
public void testCreateWithRepeatableAndUnlocalizableNestedFields()
throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
DDMFormField nameDDMFormField = DDMFormTestUtil.createTextDDMFormField(
"Name", false, true, false);
DDMFormField phoneDDMFormField = DDMFormTestUtil.createTextDDMFormField(
"Phone", false, true, false);
DDMFormField extDDMFormField = DDMFormTestUtil.createTextDDMFormField(
"Ext", false, true, false);
phoneDDMFormField.addNestedDDMFormField(extDDMFormField);
nameDDMFormField.addNestedDDMFormField(phoneDDMFormField);
ddmForm.addDDMFormField(nameDDMFormField);
DDMFormValues expectedDDMFormValues = createDDMFormValues(ddmForm);
DDMFormFieldValue paulDDMFormFieldValue = createDDMFormFieldValue(
"wqer", "Name", new UnlocalizedValue("Paul"));
DDMFormFieldValue paulPhone1DDMFormFieldValue = createDDMFormFieldValue(
"gatu", "Phone", new UnlocalizedValue("1"));
paulPhone1DDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"jkau", "Ext", new UnlocalizedValue("1.1")));
paulPhone1DDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"amat", "Ext", new UnlocalizedValue("1.2")));
paulDDMFormFieldValue.addNestedDDMFormFieldValue(
paulPhone1DDMFormFieldValue);
DDMFormFieldValue paulPhone2DDMFormFieldValue = createDDMFormFieldValue(
"hato", "Phone", new UnlocalizedValue("2"));
paulPhone2DDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"hamp", "Ext", new UnlocalizedValue("2.1")));
paulPhone2DDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"xzal", "Ext", new UnlocalizedValue("2.2")));
paulPhone2DDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"kaly", "Ext", new UnlocalizedValue("2.3")));
paulDDMFormFieldValue.addNestedDDMFormFieldValue(
paulPhone2DDMFormFieldValue);
expectedDDMFormValues.addDDMFormFieldValue(paulDDMFormFieldValue);
DDMFormFieldValue joeDDMFormFieldValue = createDDMFormFieldValue(
"fahu", "Name", new UnlocalizedValue("Joe"));
DDMFormFieldValue joePhone1DDMFormFieldValue = createDDMFormFieldValue(
"jakl", "Phone", new UnlocalizedValue("3"));
joePhone1DDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"bagt", "Ext", new UnlocalizedValue("3.1")));
joeDDMFormFieldValue.addNestedDDMFormFieldValue(
joePhone1DDMFormFieldValue);
expectedDDMFormValues.addDDMFormFieldValue(joeDDMFormFieldValue);
MockHttpServletRequest mockHttpServletRequest =
new MockHttpServletRequest();
mockHttpServletRequest.addParameter("availableLanguageIds", "en_US");
mockHttpServletRequest.addParameter(
"defaultLanguageId", LocaleUtil.toLanguageId(LocaleUtil.US));
// Name
mockHttpServletRequest.addParameter("ddm$$Name$wqer$0$$en_US", "Paul");
mockHttpServletRequest.addParameter("ddm$$Name$fahu$1$$en_US", "Joe");
// Phone
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Phone$gatu$0$$en_US", "1");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Phone$hato$1$$en_US", "2");
mockHttpServletRequest.addParameter(
"ddm$$Name$fahu$1#Phone$jakl$0$$en_US", "3");
// Ext
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Phone$gatu$0#Ext$jkau$0$$en_US", "1.1");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Phone$gatu$0#Ext$amat$1$$en_US", "1.2");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Phone$hato$1#Ext$hamp$0$$en_US", "2.1");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Phone$hato$1#Ext$xzal$1$$en_US", "2.2");
mockHttpServletRequest.addParameter(
"ddm$$Name$wqer$0#Phone$hato$1#Ext$kaly$2$$en_US", "2.3");
mockHttpServletRequest.addParameter(
"ddm$$Name$fahu$1#Phone$jakl$0#Ext$bagt$0$$en_US", "3.1");
DDMFormValues actualDDMFormValues = _ddmFormValuesFactory.create(
mockHttpServletRequest, ddmForm);
assertEquals(expectedDDMFormValues, actualDDMFormValues);
}
@Test
public void testCreateWithRepeatableFieldSetAndNestedCheckbox()
throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
DDMFormField fieldSetDDMFormField = DDMFormTestUtil.createDDMFormField(
"fieldset", "FieldSet", "fieldset", "", false, true, false);
fieldSetDDMFormField.addNestedDDMFormField(
DDMFormTestUtil.createDDMFormField(
"text", "Text", "text", "string", false, false, false));
DDMFormField checkboxDDMFormField = DDMFormTestUtil.createDDMFormField(
"checkbox", "Checkbox", "checkbox", "boolean", false, false, false);
LocalizedValue predefinedValue =
checkboxDDMFormField.getPredefinedValue();
predefinedValue.addString(LocaleUtil.US, "false");
fieldSetDDMFormField.addNestedDDMFormField(checkboxDDMFormField);
ddmForm.addDDMFormField(fieldSetDDMFormField);
MockHttpServletRequest mockHttpServletRequest =
new MockHttpServletRequest();
mockHttpServletRequest.addParameter("availableLanguageIds", "en_US");
mockHttpServletRequest.addParameter("defaultLanguageId", "en_US");
// Parameters
mockHttpServletRequest.addParameter(
"ddm$$fieldset$amay$0#text$mahy$0$$en_US", "Joe");
mockHttpServletRequest.addParameter(
"ddm$$fieldset$amay$0#checkbox$wqer$0$$en_US", "true");
mockHttpServletRequest.addParameter(
"ddm$$fieldset$mah7$1#text$kamy$0$$en_US", "Bob");
DDMFormValues actualDDMFormValues = _ddmFormValuesFactory.create(
mockHttpServletRequest, ddmForm);
List<DDMFormFieldValue> actualDDMFormFieldValues =
actualDDMFormValues.getDDMFormFieldValues();
Assert.assertEquals(
actualDDMFormFieldValues.toString(), 2,
actualDDMFormFieldValues.size());
DDMFormFieldValue fieldset1DDMFormFieldValue =
actualDDMFormFieldValues.get(0);
List<DDMFormFieldValue> fieldset1NestedDDMFormFieldValues =
fieldset1DDMFormFieldValue.getNestedDDMFormFieldValues();
assertEquals(
"Joe", fieldset1NestedDDMFormFieldValues.get(0), LocaleUtil.US);
assertEquals(
"true", fieldset1NestedDDMFormFieldValues.get(1), LocaleUtil.US);
DDMFormFieldValue fieldset2DDMFormFieldValue =
actualDDMFormFieldValues.get(1);
List<DDMFormFieldValue> fieldset2NestedDDMFormFieldValues =
fieldset2DDMFormFieldValue.getNestedDDMFormFieldValues();
assertEquals(
"Bob", fieldset2NestedDDMFormFieldValues.get(0), LocaleUtil.US);
assertEquals(
"false", fieldset2NestedDDMFormFieldValues.get(1), LocaleUtil.US);
}
@Test
public void testCreateWithRepeatableTransientParent() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
DDMFormField separatorDDMFormField = DDMFormTestUtil.createDDMFormField(
"Separator", "Separator", "ddm-separator", StringPool.BLANK, false,
true, false);
DDMFormField nameDDMFormField = DDMFormTestUtil.createTextDDMFormField(
"Name", true, false, false);
separatorDDMFormField.addNestedDDMFormField(nameDDMFormField);
ddmForm.addDDMFormField(separatorDDMFormField);
DDMFormValues expectedDDMFormValues = createDDMFormValues(
ddmForm, createAvailableLocales(LocaleUtil.BRAZIL, LocaleUtil.US),
LocaleUtil.US);
DDMFormFieldValue separator1DDMFormFieldValue = createDDMFormFieldValue(
"wqer", "Separator", null);
separator1DDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"gatu", "Name",
createLocalizedValue("Joe", "Joao", LocaleUtil.US)));
expectedDDMFormValues.addDDMFormFieldValue(separator1DDMFormFieldValue);
DDMFormFieldValue separator2DDMFormFieldValue = createDDMFormFieldValue(
"haby", "Separator", null);
separator2DDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"hato", "Name",
createLocalizedValue("Paul", "Paulo", LocaleUtil.US)));
expectedDDMFormValues.addDDMFormFieldValue(separator2DDMFormFieldValue);
DDMFormFieldValue separator3DDMFormFieldValue = createDDMFormFieldValue(
"bajk", "Separator", null);
separator3DDMFormFieldValue.addNestedDDMFormFieldValue(
createDDMFormFieldValue(
"fahu", "Name",
createLocalizedValue("Claude", "Claudio", LocaleUtil.US)));
expectedDDMFormValues.addDDMFormFieldValue(separator3DDMFormFieldValue);
MockHttpServletRequest mockHttpServletRequest =
new MockHttpServletRequest();
mockHttpServletRequest.addParameter(
"availableLanguageIds", "en_US,pt_BR");
mockHttpServletRequest.addParameter(
"defaultLanguageId", LocaleUtil.toLanguageId(LocaleUtil.US));
// Name
mockHttpServletRequest.addParameter(
"ddm$$Separator$wqer$0#Name$gatu$0$$en_US", "Joe");
mockHttpServletRequest.addParameter(
"ddm$$Separator$wqer$0#Name$gatu$0$$pt_BR", "Joao");
mockHttpServletRequest.addParameter(
"ddm$$Separator$haby$1#Name$hato$0$$en_US", "Paul");
mockHttpServletRequest.addParameter(
"ddm$$Separator$haby$1#Name$hato$0$$pt_BR", "Paulo");
mockHttpServletRequest.addParameter(
"ddm$$Separator$bajk$2#Name$fahu$0$$en_US", "Claude");
mockHttpServletRequest.addParameter(
"ddm$$Separator$bajk$2#Name$fahu$0$$pt_BR", "Claudio");
DDMFormValues actualDDMFormValues = _ddmFormValuesFactory.create(
mockHttpServletRequest, ddmForm);
assertEquals(expectedDDMFormValues, actualDDMFormValues);
}
@Test
public void testCreateWithTextAndUncheckedCheckboxField() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
ddmForm.addDDMFormField(
DDMFormTestUtil.createTextDDMFormField(
"Name", false, false, false));
DDMFormField checkboxDDMFormField = DDMFormTestUtil.createDDMFormField(
"Boolean", "Boolean", "checkbox", "boolean", false, false, false);
LocalizedValue predefinedValue =
checkboxDDMFormField.getPredefinedValue();
predefinedValue.addString(LocaleUtil.US, "false");
ddmForm.addDDMFormField(checkboxDDMFormField);
DDMFormValues expectedDDMFormValues = createDDMFormValues(
ddmForm, createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
expectedDDMFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"amay", "Name", new UnlocalizedValue("Joe")));
expectedDDMFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"wqer", "Boolean", new UnlocalizedValue("false")));
MockHttpServletRequest mockHttpServletRequest =
new MockHttpServletRequest();
mockHttpServletRequest.addParameter("availableLanguageIds", "en_US");
mockHttpServletRequest.addParameter("defaultLanguageId", "en_US");
// Name
mockHttpServletRequest.addParameter("ddm$$Name$wqer$0$$en_US", "Joe");
DDMFormValues actualDDMFormValues = _ddmFormValuesFactory.create(
mockHttpServletRequest, ddmForm);
List<DDMFormFieldValue> actualDDMFormFieldValues =
actualDDMFormValues.getDDMFormFieldValues();
Assert.assertEquals(
actualDDMFormFieldValues.toString(), 2,
actualDDMFormFieldValues.size());
assertEquals("Joe", actualDDMFormFieldValues.get(0), LocaleUtil.US);
assertEquals("false", actualDDMFormFieldValues.get(1), LocaleUtil.US);
}
@Test
public void testCreateWithTransientField() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
ddmForm.addDDMFormField(
DDMFormTestUtil.createDDMFormField(
"Paragraph", "Paragraph", "paragraph", StringPool.BLANK, false,
false, false));
MockHttpServletRequest mockHttpServletRequest =
new MockHttpServletRequest();
mockHttpServletRequest.addParameter(
"availableLanguageIds", LocaleUtil.toLanguageId(LocaleUtil.US));
mockHttpServletRequest.addParameter(
"defaultLanguageId", LocaleUtil.toLanguageId(LocaleUtil.US));
DDMFormValues ddmFormValues = _ddmFormValuesFactory.create(
mockHttpServletRequest, ddmForm);
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
Assert.assertEquals(
ddmFormFieldValues.toString(), 1, ddmFormFieldValues.size());
DDMFormFieldValue ddmFormFieldValue = ddmFormFieldValues.get(0);
Assert.assertEquals("Paragraph", ddmFormFieldValue.getName());
}
@Test
public void testCreateWithUncheckedCheckboxAndTextFieldWithSimilarNames()
throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
DDMFormField checkboxDDMFormField = DDMFormTestUtil.createDDMFormField(
"foo", "Foo", "checkbox", "boolean", false, false, false);
LocalizedValue predefinedValue =
checkboxDDMFormField.getPredefinedValue();
predefinedValue.addString(LocaleUtil.US, "false");
ddmForm.addDDMFormField(checkboxDDMFormField);
ddmForm.addDDMFormField(
DDMFormTestUtil.createTextDDMFormField(
"fooBar", "Foo Bar", false, false, false));
DDMFormValues expectedDDMFormValues = createDDMFormValues(
ddmForm, createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
expectedDDMFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"amay", "foo", new UnlocalizedValue("false")));
expectedDDMFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"wqer", "fooBar", new UnlocalizedValue("Baz")));
MockHttpServletRequest mockHttpServletRequest =
new MockHttpServletRequest();
mockHttpServletRequest.addParameter("availableLanguageIds", "en_US");
mockHttpServletRequest.addParameter("defaultLanguageId", "en_US");
// FooBar
mockHttpServletRequest.addParameter("ddm$$fooBar$wqer$0$$en_US", "Baz");
DDMFormValues actualDDMFormValues = _ddmFormValuesFactory.create(
mockHttpServletRequest, ddmForm);
List<DDMFormFieldValue> actualDDMFormFieldValues =
actualDDMFormValues.getDDMFormFieldValues();
Assert.assertEquals(
actualDDMFormFieldValues.toString(), 2,
actualDDMFormFieldValues.size());
assertEquals("false", actualDDMFormFieldValues.get(0), LocaleUtil.US);
assertEquals("Baz", actualDDMFormFieldValues.get(1), LocaleUtil.US);
}
protected void assertEquals(
DDMFormValues expectedDDMFormValues,
DDMFormValues actualDDMFormValues)
throws Exception {
String serializedExpectedDDMFormValues =
_ddmFormValuesJSONSerializer.serialize(expectedDDMFormValues);
String serializedActualDDMFormValues =
_ddmFormValuesJSONSerializer.serialize(actualDDMFormValues);
JSONAssert.assertEquals(
serializedExpectedDDMFormValues, serializedActualDDMFormValues,
false);
}
protected void assertEquals(
String expectedValueString, DDMFormFieldValue actualDDMFormFieldValue,
Locale locale) {
Value actualValue = actualDDMFormFieldValue.getValue();
Assert.assertEquals(expectedValueString, actualValue.getString(locale));
}
protected Set<Locale> createAvailableLocales(Locale... locales) {
return DDMFormValuesTestUtil.createAvailableLocales(locales);
}
protected DDMFormFieldValue createDDMFormFieldValue(
String instanceId, String name, Value value) {
return DDMFormValuesTestUtil.createDDMFormFieldValue(
instanceId, name, value);
}
protected DDMFormValues createDDMFormValues(DDMForm ddmForm) {
DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);
ddmFormValues.addAvailableLocale(LocaleUtil.US);
ddmFormValues.setDefaultLocale(LocaleUtil.US);
return ddmFormValues;
}
protected DDMFormValues createDDMFormValues(
DDMForm ddmForm, Set<Locale> availableLocales, Locale defaultLocale) {
DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);
ddmFormValues.setAvailableLocales(availableLocales);
ddmFormValues.setDefaultLocale(LocaleUtil.US);
return ddmFormValues;
}
protected LocalizedValue createLocalizedValue(
String enValue, Locale defaultLocale) {
return DDMFormValuesTestUtil.createLocalizedValue(
enValue, defaultLocale);
}
protected LocalizedValue createLocalizedValue(
String enValue, String ptValue, Locale defaultLocale) {
return DDMFormValuesTestUtil.createLocalizedValue(
enValue, ptValue, defaultLocale);
}
protected void setUpDDMFormValuesFactoryServiceTrackerMap()
throws Exception {
mockStatic(ServiceTrackerMapFactory.class);
when(
_serviceTrackerMap.containsKey(Matchers.anyString())
).thenReturn(
false
);
Field field = ReflectionUtil.getDeclaredField(
_ddmFormValuesFactory.getClass(), "_serviceTrackerMap");
field.set(_ddmFormValuesFactory, _serviceTrackerMap);
}
protected void setUpDDMFormValuesJSONSerializer() throws Exception {
field(
DDMFormValuesJSONSerializerImpl.class, "_jsonFactory"
).set(
_ddmFormValuesJSONSerializer, new JSONFactoryImpl()
);
}
protected void setUpJSONFactoryUtil() {
JSONFactoryUtil jsonFactoryUtil = new JSONFactoryUtil();
jsonFactoryUtil.setJSONFactory(new JSONFactoryImpl());
}
protected void setUpLocaleThreadLocal() {
_originalSiteDefaultLocale = LocaleThreadLocal.getSiteDefaultLocale();
LocaleThreadLocal.setSiteDefaultLocale(LocaleUtil.US);
}
protected void setUpLocaleUtil() {
mockStatic(LocaleUtil.class);
when(
LocaleUtil.fromLanguageId("en_US")
).thenReturn(
LocaleUtil.US
);
when(
LocaleUtil.fromLanguageId("pt_BR")
).thenReturn(
LocaleUtil.BRAZIL
);
when(
LocaleUtil.toLanguageId(LocaleUtil.US)
).thenReturn(
"en_US"
);
when(
LocaleUtil.toLanguageId(LocaleUtil.BRAZIL)
).thenReturn(
"pt_BR"
);
when(
LocaleUtil.getSiteDefault()
).thenReturn(
LocaleUtil.US
);
}
private final DDMFormValuesFactory _ddmFormValuesFactory =
new DDMFormValuesFactoryImpl();
private final DDMFormValuesJSONSerializer _ddmFormValuesJSONSerializer =
new DDMFormValuesJSONSerializerImpl();
private Locale _originalSiteDefaultLocale;
@Mock
private ServiceTrackerMap
<String, DDMFormFieldValueRequestParameterRetriever> _serviceTrackerMap;
}