/**
* 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.internal.util.DDMFormValuesMergerImpl;
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.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.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
/**
* @author InĂ¡cio Nery
*/
public class DDMFormValuesMergerTest {
@Test
public void testAddMissingDDMFormFieldValue() {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
ddmForm.addDDMFormField(
DDMFormTestUtil.createTextDDMFormField(
"text1", false, false, true));
ddmForm.addDDMFormField(
DDMFormTestUtil.createTextDDMFormField(
"text2", false, false, true));
// Existing dynamic data mapping form values
String text1StringValue = RandomTestUtil.randomString();
LocalizedValue text1LocalizedValue =
DDMFormValuesTestUtil.createLocalizedValue(
text1StringValue, LocaleUtil.US);
DDMFormFieldValue text1DDMFormFieldValue =
DDMFormValuesTestUtil.createDDMFormFieldValue(
"text1", text1LocalizedValue);
DDMFormValues existingDDMFormValues = createDDMFormValues(
ddmForm, text1DDMFormFieldValue);
// New dynamic data mapping form values
String text2StringValue = RandomTestUtil.randomString();
LocalizedValue text2LocalizedValue =
DDMFormValuesTestUtil.createLocalizedValue(
text2StringValue, LocaleUtil.US);
DDMFormFieldValue text2DDMFormFieldValue =
DDMFormValuesTestUtil.createDDMFormFieldValue(
"text2", text2LocalizedValue);
DDMFormValues newDDMFormValues = createDDMFormValues(
ddmForm, text2DDMFormFieldValue);
DDMFormValues mergedDDMFormValues = _ddmFormValuesMerger.merge(
newDDMFormValues, existingDDMFormValues);
List<DDMFormFieldValue> mergedDDMFormFieldValues =
mergedDDMFormValues.getDDMFormFieldValues();
Assert.assertEquals(
mergedDDMFormFieldValues.toString(), 2,
mergedDDMFormFieldValues.size());
DDMFormFieldValue mergedText1DDMFormFieldValue =
mergedDDMFormFieldValues.get(0);
Value mergedText1Value = mergedText1DDMFormFieldValue.getValue();
Assert.assertEquals(
text1StringValue, mergedText1Value.getString(LocaleUtil.US));
DDMFormFieldValue mergedText2DDMFormFieldValue =
mergedDDMFormFieldValues.get(1);
Value mergedText2Value = mergedText2DDMFormFieldValue.getValue();
Assert.assertEquals(
text2StringValue, mergedText2Value.getString(LocaleUtil.US));
}
@Test
public void testAddMissingLocaleToExistingDDMFormFieldValue() {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
ddmForm.addDDMFormField(
DDMFormTestUtil.createTextDDMFormField("text", false, false, true));
// Existing dynamic data mapping form values
String enStringValue = RandomTestUtil.randomString();
LocalizedValue existingLocalizedValue =
DDMFormValuesTestUtil.createLocalizedValue(
enStringValue, LocaleUtil.US);
DDMFormFieldValue textDDMFormFieldValue =
DDMFormValuesTestUtil.createDDMFormFieldValue(
"text", existingLocalizedValue);
DDMFormValues existingDDMFormValues = createDDMFormValues(
ddmForm, textDDMFormFieldValue);
// New dynamic data mapping form values
String ptStringValue = RandomTestUtil.randomString();
LocalizedValue newLocalizedValue =
DDMFormValuesTestUtil.createLocalizedValue(
enStringValue, ptStringValue, LocaleUtil.US);
textDDMFormFieldValue = DDMFormValuesTestUtil.createDDMFormFieldValue(
"text", newLocalizedValue);
DDMFormValues newDDMFormValues = createDDMFormValues(
ddmForm, textDDMFormFieldValue);
DDMFormValues mergedFormValues = _ddmFormValuesMerger.merge(
newDDMFormValues, existingDDMFormValues);
List<DDMFormFieldValue> mergedFormFieldValues =
mergedFormValues.getDDMFormFieldValues();
Assert.assertEquals(
mergedFormFieldValues.toString(), 1, mergedFormFieldValues.size());
DDMFormFieldValue mergedDDMFormFieldValue = mergedFormFieldValues.get(
0);
Value mergedValue = mergedDDMFormFieldValue.getValue();
Assert.assertEquals(
enStringValue, mergedValue.getString(LocaleUtil.US));
Assert.assertEquals(
ptStringValue, mergedValue.getString(LocaleUtil.BRAZIL));
}
@Test
public void testMergeWithTransientDDMFormField() {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
DDMFormField paragraph1 = DDMFormTestUtil.createDDMFormField(
"text1", "text1", "paragraph", null, false, false, false);
paragraph1.setProperty("text", "paragraph 1");
DDMFormField paragraph2 = DDMFormTestUtil.createDDMFormField(
"text2", "text2", "paragraph", null, false, false, false);
paragraph2.setProperty("text", "paragraph 2");
ddmForm.addDDMFormField(paragraph1);
ddmForm.addDDMFormField(paragraph2);
DDMFormFieldValue text1DDMFormFieldValue =
DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue(
"text1", null);
DDMFormValues existingDDMFormValues = createDDMFormValues(
ddmForm, text1DDMFormFieldValue);
DDMFormFieldValue text2DDMFormFieldValue =
DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue(
"text2", null);
DDMFormValues newDDMFormValues = createDDMFormValues(
ddmForm, text2DDMFormFieldValue);
DDMFormValues mergedDDMFormValues = _ddmFormValuesMerger.merge(
newDDMFormValues, existingDDMFormValues);
List<DDMFormFieldValue> mergedDDMFormFieldValues =
mergedDDMFormValues.getDDMFormFieldValues();
Assert.assertEquals(
mergedDDMFormFieldValues.toString(), 2,
mergedDDMFormFieldValues.size());
Assert.assertTrue(
mergedDDMFormFieldValues.contains(text1DDMFormFieldValue));
Assert.assertTrue(
mergedDDMFormFieldValues.contains(text2DDMFormFieldValue));
}
@Test
public void testReplaceAndAddMissingLocaleToExistingDDMFormFieldValue() {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
ddmForm.addDDMFormField(
DDMFormTestUtil.createTextDDMFormField("text", false, false, true));
// Existing dynamic data mapping form values
String existingEnStringValue = RandomTestUtil.randomString();
LocalizedValue existingLocalizedValue =
DDMFormValuesTestUtil.createLocalizedValue(
existingEnStringValue, LocaleUtil.US);
DDMFormFieldValue textDDMFormFieldValue =
DDMFormValuesTestUtil.createDDMFormFieldValue(
"text", existingLocalizedValue);
DDMFormValues existingDDMFormValues = createDDMFormValues(
ddmForm, textDDMFormFieldValue);
// New dynamic data mapping form values
String newEnStringValue = RandomTestUtil.randomString();
String newPtStringValue = RandomTestUtil.randomString();
LocalizedValue newLocalizedValue =
DDMFormValuesTestUtil.createLocalizedValue(
newEnStringValue, newPtStringValue, LocaleUtil.US);
textDDMFormFieldValue = DDMFormValuesTestUtil.createDDMFormFieldValue(
"text", newLocalizedValue);
DDMFormValues newDDMFormValues = createDDMFormValues(
ddmForm, textDDMFormFieldValue);
DDMFormValues mergedFormValues = _ddmFormValuesMerger.merge(
newDDMFormValues, existingDDMFormValues);
List<DDMFormFieldValue> mergedFormFieldValues =
mergedFormValues.getDDMFormFieldValues();
Assert.assertEquals(
mergedFormFieldValues.toString(), 1, mergedFormFieldValues.size());
DDMFormFieldValue mergedDDMFormFieldValue = mergedFormFieldValues.get(
0);
Value mergedValue = mergedDDMFormFieldValue.getValue();
Assert.assertEquals(
newEnStringValue, mergedValue.getString(LocaleUtil.US));
Assert.assertEquals(
newPtStringValue, mergedValue.getString(LocaleUtil.BRAZIL));
}
@Test
public void testReplaceLocaleToExistingDDMFormFieldValue() {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
ddmForm.addDDMFormField(
DDMFormTestUtil.createTextDDMFormField("text", false, false, true));
// Existing dynamic data mapping form values
String existingEnStringValue = RandomTestUtil.randomString();
LocalizedValue existingLocalizedValue =
DDMFormValuesTestUtil.createLocalizedValue(
existingEnStringValue, LocaleUtil.US);
DDMFormFieldValue textDDMFormFieldValue =
DDMFormValuesTestUtil.createDDMFormFieldValue(
"text", existingLocalizedValue);
DDMFormValues existingDDMFormValues = createDDMFormValues(
ddmForm, textDDMFormFieldValue);
// New dynamic data mapping form values
String newEnStringValue = RandomTestUtil.randomString();
LocalizedValue newLocalizedValue =
DDMFormValuesTestUtil.createLocalizedValue(
newEnStringValue, LocaleUtil.US);
textDDMFormFieldValue = DDMFormValuesTestUtil.createDDMFormFieldValue(
"text", newLocalizedValue);
DDMFormValues newDDMFormValues = createDDMFormValues(
ddmForm, textDDMFormFieldValue);
DDMFormValues mergedFormValues = _ddmFormValuesMerger.merge(
newDDMFormValues, existingDDMFormValues);
List<DDMFormFieldValue> mergedFormFieldValues =
mergedFormValues.getDDMFormFieldValues();
Assert.assertEquals(
mergedFormFieldValues.toString(), 1, mergedFormFieldValues.size());
DDMFormFieldValue mergedDDMFormFieldValue = mergedFormFieldValues.get(
0);
Value mergedValue = mergedDDMFormFieldValue.getValue();
Assert.assertEquals(
newEnStringValue, mergedValue.getString(LocaleUtil.US));
}
protected DDMFormValues createDDMFormValues(
DDMForm ddmForm, DDMFormFieldValue... ddmFormFieldValues) {
DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues(
ddmForm);
for (DDMFormFieldValue ddmFormFieldValue : ddmFormFieldValues) {
ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue);
}
return ddmFormValues;
}
private final DDMFormValuesMerger _ddmFormValuesMerger =
new DDMFormValuesMergerImpl();
}