/** * 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.DDMFormValuesJSONSerializer; 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.portal.json.JSONFactoryImpl; import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.json.JSONObjectUtil; import com.liferay.portal.kernel.util.LocaleUtil; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import org.skyscreamer.jsonassert.JSONAssert; /** * @author Marcellus Tavares */ public class DDMFormValuesJSONSerializerTest extends BaseDDMTestCase { @Before @Override public void setUp() throws Exception { super.setUp(); setUpDDMFormValuesJSONSerializer(); } @Test public void testFormValuesSerialization() throws Exception { String expectedJSON = read( "ddm-form-values-json-serializer-test-data.json"); DDMFormValues ddmFormValues = createDDMFormValues(); String actualJSON = _ddmFormValuesJSONSerializer.serialize( ddmFormValues); JSONAssert.assertEquals(expectedJSON, actualJSON, false); } protected DDMFormFieldValue createBooleanDDMFormFieldValue() { DDMFormFieldValue ddmFormFieldValue = new DDMFormFieldValue(); ddmFormFieldValue.setInstanceId("njar"); ddmFormFieldValue.setName("Boolean"); ddmFormFieldValue.setNestedDDMFormFields( createBooleanNestedDDMFormFieldValues()); ddmFormFieldValue.setValue(createBooleanValue()); return ddmFormFieldValue; } protected List<DDMFormFieldValue> createBooleanNestedDDMFormFieldValues() { List<DDMFormFieldValue> ddmFormFieldValues = new ArrayList<>(); ddmFormFieldValues.add(createHTMLDDMFormFieldValue(0, "nabr")); ddmFormFieldValues.add(createHTMLDDMFormFieldValue(1, "uwyg")); return ddmFormFieldValues; } protected Value createBooleanValue() { Value value = new LocalizedValue(); value.addString(LocaleUtil.US, "false"); value.addString(LocaleUtil.BRAZIL, "true"); return value; } protected DDMForm createDDMForm() { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField separatorDDMFormField = DDMFormTestUtil.createDDMFormField( "Separator", "Separator", "separator", "", false, true, false); separatorDDMFormField.addNestedDDMFormField( DDMFormTestUtil.createDDMFormField( "Text_Box", "Text_Box", "text", "string", true, false, false)); ddmForm.addDDMFormField(separatorDDMFormField); ddmForm.addDDMFormField( DDMFormTestUtil.createDDMFormField( "Text", "Text", "text", "string", true, false, false)); ddmForm.addDDMFormField( DDMFormTestUtil.createDDMFormField( "Image", "Image", "image", "string", false, true, false)); DDMFormField booleanDDMFormField = DDMFormTestUtil.createDDMFormField( "Boolean", "Boolean", "checkbox", "boolean", true, false, false); booleanDDMFormField.addNestedDDMFormField( DDMFormTestUtil.createDDMFormField( "HTML", "HTML", "html", "string", true, true, false)); ddmForm.addDDMFormField(booleanDDMFormField); return ddmForm; } protected List<DDMFormFieldValue> createDDMFormFieldValues() { List<DDMFormFieldValue> ddmFormFieldValues = new ArrayList<>(); ddmFormFieldValues.addAll(createSeparatorDDMFormFieldValues()); ddmFormFieldValues.add(createTextDDMFormFieldValue()); ddmFormFieldValues.addAll(createImageDDMFormFieldValues()); ddmFormFieldValues.add(createBooleanDDMFormFieldValue()); return ddmFormFieldValues; } protected DDMFormValues createDDMFormValues() { DDMForm ddmForm = createDDMForm(); DDMFormValues ddmFormValues = new DDMFormValues(ddmForm); ddmFormValues.setAvailableLocales( DDMFormValuesTestUtil.createAvailableLocales( LocaleUtil.BRAZIL, LocaleUtil.US)); ddmFormValues.setDDMFormFieldValues(createDDMFormFieldValues()); ddmFormValues.setDefaultLocale(LocaleUtil.US); return ddmFormValues; } protected DDMFormFieldValue createHTMLDDMFormFieldValue( int index, String instanceId) { DDMFormFieldValue ddmFormFieldValue = new DDMFormFieldValue(); ddmFormFieldValue.setInstanceId(instanceId); ddmFormFieldValue.setName("HTML"); ddmFormFieldValue.setValue(createHTMLValue(index)); return ddmFormFieldValue; } protected Value createHTMLValue(int index) { Value value = new LocalizedValue(); value.addString(LocaleUtil.US, "<p>This is a test. " + index + "</p>"); value.addString( LocaleUtil.BRAZIL, "<p>Isto e um teste. " + index + "</p>"); return value; } protected DDMFormFieldValue createImageDDMFormFieldValue( int index, String instanceId) { DDMFormFieldValue ddmFormFieldValue = new DDMFormFieldValue(); ddmFormFieldValue.setInstanceId(instanceId); ddmFormFieldValue.setName("Image"); ddmFormFieldValue.setValue(createImageValue(index)); return ddmFormFieldValue; } protected List<DDMFormFieldValue> createImageDDMFormFieldValues() { List<DDMFormFieldValue> imageDDMFormFieldValues = new ArrayList<>(); imageDDMFormFieldValues.add(createImageDDMFormFieldValue(0, "uaht")); imageDDMFormFieldValues.add(createImageDDMFormFieldValue(1, "pppj")); imageDDMFormFieldValues.add(createImageDDMFormFieldValue(2, "nmab")); return imageDDMFormFieldValues; } protected Value createImageValue(int index) { JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); jsonObject.put("alt", "This is a image description. " + index); jsonObject.put("data", "base64Value" + index); return new UnlocalizedValue( JSONObjectUtil.toOrderedJSONString(jsonObject)); } protected DDMFormFieldValue createSeparatorDDMFormFieldValue( int index, String instanceId) { DDMFormFieldValue ddmFormFieldValue = new DDMFormFieldValue(); ddmFormFieldValue.setInstanceId(instanceId); ddmFormFieldValue.setName("Separator"); ddmFormFieldValue.setNestedDDMFormFields( createSeparatorNestedDDMFormFieldValues(index, "xyz" + index)); return ddmFormFieldValue; } protected List<DDMFormFieldValue> createSeparatorDDMFormFieldValues() { List<DDMFormFieldValue> separatorDDMFormFieldValues = new ArrayList<>(); separatorDDMFormFieldValues.add( createSeparatorDDMFormFieldValue(0, "uayx")); separatorDDMFormFieldValues.add( createSeparatorDDMFormFieldValue(1, "lahy")); return separatorDDMFormFieldValues; } protected List<DDMFormFieldValue> createSeparatorNestedDDMFormFieldValues( int index, String instanceId) { List<DDMFormFieldValue> ddmFormFieldValues = new ArrayList<>(); ddmFormFieldValues.add( createTextBoxDDMFormFieldValue(index, instanceId)); return ddmFormFieldValues; } protected DDMFormFieldValue createTextBoxDDMFormFieldValue( int index, String instanceId) { DDMFormFieldValue ddmFormFieldValue = new DDMFormFieldValue(); ddmFormFieldValue.setInstanceId(instanceId); ddmFormFieldValue.setName("Text_Box"); ddmFormFieldValue.setValue(createTextBoxValue(index)); return ddmFormFieldValue; } protected Value createTextBoxValue(int index) { Value value = new LocalizedValue(); value.addString(LocaleUtil.US, "Content " + index); value.addString(LocaleUtil.BRAZIL, "Conteudo " + index); return value; } protected DDMFormFieldValue createTextDDMFormFieldValue() { DDMFormFieldValue ddmFormFieldValue = new DDMFormFieldValue(); ddmFormFieldValue.setInstanceId("baht"); ddmFormFieldValue.setName("Text"); ddmFormFieldValue.setValue(createTextValue()); return ddmFormFieldValue; } protected Value createTextValue() { Value value = new LocalizedValue(); value.addString(LocaleUtil.US, "Text"); value.addString(LocaleUtil.BRAZIL, "Texto"); return value; } protected void setUpDDMFormValuesJSONSerializer() throws Exception { field( DDMFormValuesJSONSerializerImpl.class, "_jsonFactory" ).set( _ddmFormValuesJSONSerializer, new JSONFactoryImpl() ); } private final DDMFormValuesJSONSerializer _ddmFormValuesJSONSerializer = new DDMFormValuesJSONSerializerImpl(); }