/**
* 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.io.internal;
import com.liferay.dynamic.data.mapping.io.DDMFormValuesJSONDeserializer;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
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.portal.json.JSONFactoryImpl;
import com.liferay.portal.kernel.json.JSONArray;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.util.LocaleUtil;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.skyscreamer.jsonassert.JSONAssert;
/**
* @author Marcellus Tavares
*/
public class DDMFormValuesJSONDeserializerTest extends BaseDDMTestCase {
@Before
@Override
public void setUp() throws Exception {
super.setUp();
setUpDDMFormValuesJSONDeserializer();
}
@Test
public void testDeserializationWithParentRepeatableField()
throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
DDMFormField separatorDDMFormField =
DDMFormTestUtil.createSeparatorDDMFormField("Separator", true);
separatorDDMFormField.addNestedDDMFormField(
DDMFormTestUtil.createLocalizableTextDDMFormField("Text"));
ddmForm.addDDMFormField(separatorDDMFormField);
String serializedDDMFormValues = read(
"ddm-form-values-json-deserializer-parent-repeatable-field.json");
DDMFormValues ddmFormValues =
_ddmFormValuesJSONDeserializer.deserialize(
ddmForm, serializedDDMFormValues);
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
Assert.assertEquals(
ddmFormFieldValues.toString(), 3, ddmFormFieldValues.size());
for (int i = 0; i < ddmFormFieldValues.size(); i++) {
DDMFormFieldValue separatorDDMFormFieldValue =
ddmFormFieldValues.get(i);
testSeparatorDDMFormFieldValueValue(separatorDDMFormFieldValue);
List<DDMFormFieldValue> separatorNestedDDMFormFieldValues =
separatorDDMFormFieldValue.getNestedDDMFormFieldValues();
Assert.assertEquals(
separatorNestedDDMFormFieldValues.toString(), 1,
separatorNestedDDMFormFieldValues.size());
testTextDDMFormFieldValue(
separatorNestedDDMFormFieldValues.get(0), "Content " + i,
"Conteudo " + i);
}
}
@Test
public void testDeserializationWithRepeatableField() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
ddmForm.addDDMFormField(
DDMFormTestUtil.createTextDDMFormField("Text", true, true, false));
String serializedDDMFormValues = read(
"ddm-form-values-json-deserializer-repeatable-field.json");
DDMFormValues ddmFormValues =
_ddmFormValuesJSONDeserializer.deserialize(
ddmForm, serializedDDMFormValues);
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
Assert.assertEquals(
ddmFormFieldValues.toString(), 3, ddmFormFieldValues.size());
for (int i = 0; i < ddmFormFieldValues.size(); i++) {
testTextDDMFormFieldValue(
ddmFormFieldValues.get(i), "Name " + i, "Nome " + i);
}
}
@Test
public void testDeserializationWithSimpleFields() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
ddmForm.addDDMFormField(
DDMFormTestUtil.createDDMFormField(
"Boolean", "Boolean", "checkbox", "boolean", true, false,
false));
ddmForm.addDDMFormField(
DDMFormTestUtil.createDDMFormField(
"Documents_and_Media", "Documents_and_Media",
"document-library", "string", true, false, false));
ddmForm.addDDMFormField(
DDMFormTestUtil.createDDMFormField(
"Geolocation", "Geolocation", "geolocation", "string", true,
false, false));
ddmForm.addDDMFormField(
DDMFormTestUtil.createDDMFormField(
"HTML", "HTML", "html", "string", true, false, false));
ddmForm.addDDMFormField(
DDMFormTestUtil.createDDMFormField(
"Image", "Image", "image", "string", true, false, false));
ddmForm.addDDMFormField(
DDMFormTestUtil.createDDMFormField(
"Link_to_Page", "Link to Page", "link_to_page", "string", true,
false, false));
ddmForm.addDDMFormField(
DDMFormTestUtil.createDDMFormField(
"Select", "Select", "select", "string", true, false, false));
String serializedDDMFormValues = read(
"ddm-form-values-json-deserializer-test-data.json");
DDMFormValues ddmFormValues =
_ddmFormValuesJSONDeserializer.deserialize(
ddmForm, serializedDDMFormValues);
testAvailableLocales(ddmFormValues);
testDefaultLocale(ddmFormValues);
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
Assert.assertEquals(
ddmFormFieldValues.toString(), 7, ddmFormFieldValues.size());
testBooleanDDMFormFieldValueValues(ddmFormFieldValues.get(0));
testDocumentLibraryDDMFormFieldValueValues(ddmFormFieldValues.get(1));
testGeolocationDDMFormFieldValueValues(ddmFormFieldValues.get(2));
testHTMLDDMFormFieldValueValues(ddmFormFieldValues.get(3));
testImageDDMFormFieldValueValues(ddmFormFieldValues.get(4));
testLinkToPageDDMFormFieldValueValues(ddmFormFieldValues.get(5));
testSelectDDMFormFieldValueValues(ddmFormFieldValues.get(6));
}
@Test
public void testDeserializationWithUnlocalizableField() throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
ddmForm.addDDMFormField(
DDMFormTestUtil.createDDMFormField(
"Boolean", "Boolean", "checkbox", "boolean", false, false,
false));
ddmForm.addDDMFormField(
DDMFormTestUtil.createDDMFormField(
"Documents_and_Media", "Documents_and_Media",
"document-library", "string", false, false, false));
String serializedDDMFormValues = read(
"ddm-form-values-json-deserializer-unlocalizable-fields.json");
DDMFormValues ddmFormValues =
_ddmFormValuesJSONDeserializer.deserialize(
ddmForm, serializedDDMFormValues);
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
Assert.assertEquals(
ddmFormFieldValues.toString(), 2, ddmFormFieldValues.size());
DDMFormFieldValue booleanDDMFormFieldValue = ddmFormFieldValues.get(0);
Assert.assertEquals("usht", booleanDDMFormFieldValue.getInstanceId());
Value booleanValue = booleanDDMFormFieldValue.getValue();
Assert.assertFalse(booleanValue.isLocalized());
Assert.assertEquals("false", booleanValue.getString(LocaleUtil.US));
Assert.assertEquals("false", booleanValue.getString(LocaleUtil.BRAZIL));
DDMFormFieldValue documentLibraryDDMFormFieldValue =
ddmFormFieldValues.get(1);
Assert.assertEquals(
"xdwp", documentLibraryDDMFormFieldValue.getInstanceId());
Value documentLibraryValue =
documentLibraryDDMFormFieldValue.getValue();
Assert.assertFalse(documentLibraryValue.isLocalized());
JSONObject expectedJSONObject = JSONFactoryUtil.createJSONObject();
expectedJSONObject.put("groupId", 10192);
expectedJSONObject.put("uuid", "c8acdf70-e101-46a6-83e5-c5f5e087b0dc");
expectedJSONObject.put("version", 1.0);
JSONAssert.assertEquals(
expectedJSONObject.toString(),
documentLibraryValue.getString(LocaleUtil.US), false);
JSONAssert.assertEquals(
expectedJSONObject.toString(),
documentLibraryValue.getString(LocaleUtil.BRAZIL), false);
}
protected void setUpDDMFormValuesJSONDeserializer() throws Exception {
field(
DDMFormValuesJSONDeserializerImpl.class, "_jsonFactory"
).set(
_ddmFormValuesJSONDeserializer, new JSONFactoryImpl()
);
}
protected void testAvailableLocales(DDMFormValues ddmFormValues) {
Set<Locale> availableLocales = ddmFormValues.getAvailableLocales();
Assert.assertEquals(
availableLocales.toString(), 2, availableLocales.size());
Assert.assertTrue(availableLocales.contains(LocaleUtil.US));
Assert.assertTrue(availableLocales.contains(LocaleUtil.BRAZIL));
}
protected void testBooleanDDMFormFieldValueValues(
DDMFormFieldValue ddmFormFieldValue) {
Assert.assertEquals("maky", ddmFormFieldValue.getInstanceId());
Value value = ddmFormFieldValue.getValue();
Assert.assertEquals("false", value.getString(LocaleUtil.US));
Assert.assertEquals("true", value.getString(LocaleUtil.BRAZIL));
}
protected void testDefaultLocale(DDMFormValues ddmFormValues) {
Locale defaultLocale = ddmFormValues.getDefaultLocale();
Assert.assertEquals(LocaleUtil.US, defaultLocale);
}
protected void testDocumentLibraryDDMFormFieldValueValues(
DDMFormFieldValue ddmFormFieldValue)
throws Exception {
Assert.assertEquals("autx", ddmFormFieldValue.getInstanceId());
JSONObject expectedJSONObject = JSONFactoryUtil.createJSONObject();
expectedJSONObject.put("groupId", 10192);
expectedJSONObject.put("uuid", "c8acdf70-e101-46a6-83e5-c5f5e087b0dc");
expectedJSONObject.put("version", 1.0);
Value value = ddmFormFieldValue.getValue();
JSONAssert.assertEquals(
expectedJSONObject.toString(), value.getString(LocaleUtil.US),
false);
JSONAssert.assertEquals(
expectedJSONObject.toString(), value.getString(LocaleUtil.BRAZIL),
false);
}
protected void testGeolocationDDMFormFieldValueValues(
DDMFormFieldValue ddmFormFieldValue)
throws Exception {
Assert.assertEquals("powq", ddmFormFieldValue.getInstanceId());
Value value = ddmFormFieldValue.getValue();
JSONObject expectedJSONObject = JSONFactoryUtil.createJSONObject();
expectedJSONObject.put("latitude", 34.0286226);
expectedJSONObject.put("longitude", -117.8103367);
JSONAssert.assertEquals(
expectedJSONObject.toString(), value.getString(LocaleUtil.US),
false);
expectedJSONObject = JSONFactoryUtil.createJSONObject();
expectedJSONObject.put("latitude", -8.0349219);
expectedJSONObject.put("longitude", -34.91922120);
JSONAssert.assertEquals(
expectedJSONObject.toString(), value.getString(LocaleUtil.BRAZIL),
false);
}
protected void testHTMLDDMFormFieldValueValues(
DDMFormFieldValue ddmFormFieldValue) {
Assert.assertEquals("lamn", ddmFormFieldValue.getInstanceId());
Value value = ddmFormFieldValue.getValue();
Assert.assertEquals(
"<p>This is a test.</p>", value.getString(LocaleUtil.US));
Assert.assertEquals(
"<p>Isto e um teste.</p>", value.getString(LocaleUtil.BRAZIL));
}
protected void testImageDDMFormFieldValueValues(
DDMFormFieldValue ddmFormFieldValue)
throws Exception {
Assert.assertEquals("labt", ddmFormFieldValue.getInstanceId());
Value value = ddmFormFieldValue.getValue();
JSONObject expectedJSONObject = JSONFactoryUtil.createJSONObject();
expectedJSONObject.put("alt", "This is a image description.");
expectedJSONObject.put("data", "base64Value");
JSONAssert.assertEquals(
expectedJSONObject.toString(), value.getString(LocaleUtil.US),
false);
expectedJSONObject = JSONFactoryUtil.createJSONObject();
expectedJSONObject.put("alt", "Isto e uma descricao de imagem.");
expectedJSONObject.put("data", "valorEmBase64");
JSONAssert.assertEquals(
expectedJSONObject.toString(), value.getString(LocaleUtil.BRAZIL),
false);
}
protected void testLinkToPageDDMFormFieldValueValues(
DDMFormFieldValue ddmFormFieldValue)
throws Exception {
Assert.assertEquals("nast", ddmFormFieldValue.getInstanceId());
Value value = ddmFormFieldValue.getValue();
JSONObject expectedJSONObject = JSONFactoryUtil.createJSONObject();
expectedJSONObject.put("groupId", 10192);
expectedJSONObject.put("layoutId", 1);
expectedJSONObject.put("privateLayout", false);
JSONAssert.assertEquals(
expectedJSONObject.toString(), value.getString(LocaleUtil.US),
false);
expectedJSONObject = JSONFactoryUtil.createJSONObject();
expectedJSONObject.put("groupId", 10192);
expectedJSONObject.put("layoutId", 2);
expectedJSONObject.put("privateLayout", false);
JSONAssert.assertEquals(
expectedJSONObject.toString(), value.getString(LocaleUtil.BRAZIL),
false);
}
protected void testSelectDDMFormFieldValueValues(
DDMFormFieldValue ddmFormFieldValue)
throws Exception {
Assert.assertEquals("yhar", ddmFormFieldValue.getInstanceId());
Value value = ddmFormFieldValue.getValue();
JSONArray expectedJSONArray = JSONFactoryUtil.createJSONArray();
expectedJSONArray.put("Value 1");
expectedJSONArray.put("Value 3");
JSONAssert.assertEquals(
expectedJSONArray.toString(), value.getString(LocaleUtil.US),
false);
expectedJSONArray = JSONFactoryUtil.createJSONArray();
expectedJSONArray.put("Value 2");
expectedJSONArray.put("Value 3");
JSONAssert.assertEquals(
expectedJSONArray.toString(), value.getString(LocaleUtil.BRAZIL),
false);
}
protected void testSeparatorDDMFormFieldValueValue(
DDMFormFieldValue ddmFormFieldValue) {
Value value = ddmFormFieldValue.getValue();
Assert.assertNull(value);
}
protected void testTextDDMFormFieldValue(
DDMFormFieldValue ddmFormFieldValue, String expectedEnUS,
String expectedPtBR) {
Assert.assertNotNull(ddmFormFieldValue);
Value value = ddmFormFieldValue.getValue();
Assert.assertEquals(expectedEnUS, value.getString(LocaleUtil.US));
Assert.assertEquals(expectedPtBR, value.getString(LocaleUtil.BRAZIL));
}
private final DDMFormValuesJSONDeserializer _ddmFormValuesJSONDeserializer =
new DDMFormValuesJSONDeserializerImpl();
}