/**
* 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.render;
import com.liferay.document.library.kernel.service.DLAppLocalServiceUtil;
import com.liferay.dynamic.data.mapping.BaseDDMTestCase;
import com.liferay.dynamic.data.mapping.internal.render.CheckboxDDMFormFieldValueRenderer;
import com.liferay.dynamic.data.mapping.internal.render.DateDDMFormFieldValueRenderer;
import com.liferay.dynamic.data.mapping.internal.render.DecimalDDMFormFieldValueRenderer;
import com.liferay.dynamic.data.mapping.internal.render.DocumentLibraryDDMFormFieldValueRenderer;
import com.liferay.dynamic.data.mapping.internal.render.GeolocationDDMFormFieldValueRenderer;
import com.liferay.dynamic.data.mapping.internal.render.IntegerDDMFormFieldValueRenderer;
import com.liferay.dynamic.data.mapping.internal.render.LinkToPageDDMFormFieldValueRenderer;
import com.liferay.dynamic.data.mapping.internal.render.SelectDDMFormFieldValueRenderer;
import com.liferay.dynamic.data.mapping.internal.render.TextDDMFormFieldValueRenderer;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.DDMFormFieldOptions;
import com.liferay.dynamic.data.mapping.model.DDMFormFieldType;
import com.liferay.dynamic.data.mapping.model.UnlocalizedValue;
import com.liferay.dynamic.data.mapping.storage.DDMFormFieldValue;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
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.repository.model.FileEntry;
import com.liferay.portal.kernel.service.LayoutServiceUtil;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.util.CalendarFactoryUtil;
import com.liferay.portal.kernel.util.DateFormatFactoryUtil;
import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.JavaDetector;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.util.CalendarFactoryImpl;
import com.liferay.portal.util.DateFormatFactoryImpl;
import com.liferay.portal.util.FastDateFormatFactoryImpl;
import com.liferay.portal.util.HtmlImpl;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Matchers;
import org.powermock.core.classloader.annotations.PrepareForTest;
/**
* @author Marcellus Tavares
*/
@PrepareForTest({DLAppLocalServiceUtil.class, LayoutServiceUtil.class})
public class DDMFormFieldValueRendererTest extends BaseDDMTestCase {
@Before
@Override
public void setUp() throws Exception {
super.setUp();
setUpCalendarFactoryUtil();
setUpDateFormatFactoryUtil();
setUpDLAppLocalServiceUtil();
setUpFastDateFormatFactoryUtil();
setUpHtmlUtil();
setUpJSONFactoryUtil();
setUpLanguageUtil();
setUpLayoutServiceUtil();
setUpLocaleUtil();
}
@Test
public void testCheckboxFieldValueRendererWithoutRepeatableValues() {
DDMFormFieldValue ddmFormFieldValue = createDDMFormFieldValue(
"Checkbox", createLocalizedValue("false", "true", LocaleUtil.US));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new CheckboxDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.US);
Assert.assertEquals("No", renderedValue);
renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.BRAZIL);
Assert.assertEquals("Sim", renderedValue);
}
@Test
public void testCheckboxFieldValueRendererWithRepeatableValues() {
DDMFormValues ddmFormValues = new DDMFormValues(null);
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"Checkbox",
createLocalizedValue("false", "true", LocaleUtil.US)));
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"Checkbox",
createLocalizedValue("true", "true", LocaleUtil.US)));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new CheckboxDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormValues.getDDMFormFieldValues(), LocaleUtil.US);
Assert.assertEquals("No, Yes", renderedValue);
renderedValue = ddmFormFieldValueRenderer.render(
ddmFormValues.getDDMFormFieldValues(), LocaleUtil.BRAZIL);
Assert.assertEquals("Sim, Sim", renderedValue);
}
@Test
public void testDateFieldValueRenderer() {
String valueString = "2014-10-22";
DDMFormFieldValue ddmFormFieldValue = createDDMFormFieldValue(
"Date", new UnlocalizedValue(valueString));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new DateDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.US);
Assert.assertEquals("10/22/14", renderedValue);
renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.BRAZIL);
Assert.assertEquals("22/10/14", renderedValue);
}
@Test
public void testDateFieldValueRendererWithEmptyValue() {
DDMFormFieldValue ddmFormFieldValue = createDDMFormFieldValue(
"Date", new UnlocalizedValue(StringPool.BLANK));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new DateDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.US);
Assert.assertEquals(StringPool.BLANK, renderedValue);
}
@Test
public void testDecimalFieldValueRenderer() {
DDMFormFieldValue ddmFormFieldValue = createDDMFormFieldValue(
"Decimal", createLocalizedValue("1.2", "1.2", LocaleUtil.US));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new DecimalDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.US);
Assert.assertEquals("1.2", renderedValue);
renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.BRAZIL);
Assert.assertEquals("1,2", renderedValue);
}
@Test
public void testDocumentLibraryFieldValueRenderer() {
JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
jsonObject.put("groupId", RandomTestUtil.randomLong());
jsonObject.put("uuid", RandomTestUtil.randomString());
DDMFormFieldValue ddmFormFieldValue = createDDMFormFieldValue(
"DocumentLibrary", new UnlocalizedValue(jsonObject.toString()));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new DocumentLibraryDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.US);
Assert.assertEquals("File Entry Title", renderedValue);
}
@Test
public void testGeolocationFieldValueRenderer() {
JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
jsonObject.put("latitude", 9.8765);
jsonObject.put("longitude", 1.2345);
DDMFormFieldValue ddmFormFieldValue = createDDMFormFieldValue(
"Geolocation", new UnlocalizedValue(jsonObject.toString()));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new GeolocationDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.SPAIN);
if (JavaDetector.isJDK8()) {
Assert.assertEquals(
"Latitud: 9,877, Longitud: 1,234", renderedValue);
}
else {
Assert.assertEquals(
"Latitud: 9,876, Longitud: 1,234", renderedValue);
}
renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.US);
if (JavaDetector.isJDK8()) {
Assert.assertEquals(
"Latitude: 9.877, Longitude: 1.234", renderedValue);
}
else {
Assert.assertEquals(
"Latitude: 9.876, Longitude: 1.234", renderedValue);
}
}
@Test
public void testIntegerFieldValueRenderer() {
DDMFormFieldValue ddmFormFieldValue = createDDMFormFieldValue(
"Integer", createLocalizedValue("1", "2", LocaleUtil.US));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new IntegerDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.US);
Assert.assertEquals("1", renderedValue);
renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.BRAZIL);
Assert.assertEquals("2", renderedValue);
}
@Test
public void testLinkToPageFieldValueRenderer() {
JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
jsonObject.put("groupId", RandomTestUtil.randomLong());
jsonObject.put("layoutId", RandomTestUtil.randomLong());
jsonObject.put("privateLayout", RandomTestUtil.randomBoolean());
DDMFormFieldValue ddmFormFieldValue = createDDMFormFieldValue(
"LinkToPage", new UnlocalizedValue(jsonObject.toString()));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new LinkToPageDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.US);
Assert.assertEquals("Layout Name", renderedValue);
renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.BRAZIL);
Assert.assertEquals("Nome da Pagina", renderedValue);
}
@Test
public void testNumberFieldValueRenderer() {
DDMFormFieldValue ddmFormFieldValue = createDDMFormFieldValue(
"Number", createLocalizedValue("1", "2.1", LocaleUtil.US));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new IntegerDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.US);
Assert.assertEquals("1", renderedValue);
renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.BRAZIL);
Assert.assertEquals("2,1", renderedValue);
}
@Test(expected = ValueAccessorException.class)
public void testSelectFieldValueRendererWithInvalidValue()
throws Exception {
DDMForm ddmForm = createDDMFormWithSelectField();
DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"Select", new UnlocalizedValue("Invalid JSON")));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new SelectDDMFormFieldValueRenderer();
ddmFormFieldValueRenderer.render(
ddmFormValues.getDDMFormFieldValues(), LocaleUtil.US);
}
@Test
public void testSelectFieldValueRendererWithoutRepeatableValues() {
DDMForm ddmForm = createDDMFormWithSelectField();
DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);
JSONArray jsonArray = toJSONArray("Option 1", "Option 2");
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"Select", new UnlocalizedValue(jsonArray.toString())));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new SelectDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormValues.getDDMFormFieldValues(), LocaleUtil.US);
Assert.assertEquals("English Label 1, English Label 2", renderedValue);
renderedValue = ddmFormFieldValueRenderer.render(
ddmFormValues.getDDMFormFieldValues(), LocaleUtil.BRAZIL);
Assert.assertEquals(
"Portuguese Label 1, Portuguese Label 2", renderedValue);
}
@Test
public void testSelectFieldValueRendererWithRepeatableValues() {
DDMForm ddmForm = createDDMFormWithSelectField();
DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);
JSONArray jsonArray = toJSONArray("Option 1", "Option 2");
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"Select", new UnlocalizedValue(jsonArray.toString())));
jsonArray = toJSONArray("Option 1");
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"Select", new UnlocalizedValue(jsonArray.toString())));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new SelectDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormValues.getDDMFormFieldValues(), LocaleUtil.US);
Assert.assertEquals(
"English Label 1, English Label 2, English Label 1", renderedValue);
renderedValue = ddmFormFieldValueRenderer.render(
ddmFormValues.getDDMFormFieldValues(), LocaleUtil.BRAZIL);
Assert.assertEquals(
"Portuguese Label 1, Portuguese Label 2, Portuguese Label 1",
renderedValue);
}
@Test
public void testTextFieldValueRendererWithoutRepeatableValues() {
DDMFormFieldValue ddmFormFieldValue = createDDMFormFieldValue(
"Text", new UnlocalizedValue("Scott Joplin"));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new TextDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormFieldValue, LocaleUtil.US);
Assert.assertEquals("Scott Joplin", renderedValue);
}
@Test
public void testTextFieldValueRendererWithRepeatableValues() {
DDMFormValues ddmFormValues = new DDMFormValues(null);
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"Text", new UnlocalizedValue("Charlie Parker")));
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue(
"Text", new UnlocalizedValue("Dave Brubeck")));
DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
new TextDDMFormFieldValueRenderer();
String renderedValue = ddmFormFieldValueRenderer.render(
ddmFormValues.getDDMFormFieldValues(), LocaleUtil.US);
Assert.assertEquals("Charlie Parker, Dave Brubeck", renderedValue);
}
protected DDMForm createDDMFormWithSelectField() {
DDMForm ddmForm = createDDMForm(
createAvailableLocales(LocaleUtil.BRAZIL, LocaleUtil.US),
LocaleUtil.US);
DDMFormField ddmFormField = new DDMFormField(
"Select", DDMFormFieldType.SELECT);
ddmFormField.setDataType("string");
ddmFormField.setRepeatable(true);
DDMFormFieldOptions ddmFormFieldOptions = new DDMFormFieldOptions();
ddmFormFieldOptions.addOptionLabel(
"Option 1", LocaleUtil.US, "English Label 1");
ddmFormFieldOptions.addOptionLabel(
"Option 2", LocaleUtil.US, "English Label 2");
ddmFormFieldOptions.addOptionLabel(
"Option 1", LocaleUtil.BRAZIL, "Portuguese Label 1");
ddmFormFieldOptions.addOptionLabel(
"Option 2", LocaleUtil.BRAZIL, "Portuguese Label 2");
ddmFormField.setDDMFormFieldOptions(ddmFormFieldOptions);
ddmForm.addDDMFormField(ddmFormField);
return ddmForm;
}
protected void setUpCalendarFactoryUtil() {
CalendarFactoryUtil calendarFactoryUtil = new CalendarFactoryUtil();
calendarFactoryUtil.setCalendarFactory(new CalendarFactoryImpl());
}
protected void setUpDateFormatFactoryUtil() {
DateFormatFactoryUtil dateFormatFactoryUtil =
new DateFormatFactoryUtil();
dateFormatFactoryUtil.setDateFormatFactory(new DateFormatFactoryImpl());
}
protected void setUpDLAppLocalServiceUtil() throws Exception {
mockStatic(DLAppLocalServiceUtil.class);
FileEntry fileEntry = mock(FileEntry.class);
when(
fileEntry.getTitle()
).thenReturn(
"File Entry Title"
);
when(
DLAppLocalServiceUtil.getFileEntryByUuidAndGroupId(
Matchers.anyString(), Matchers.anyLong())
).thenReturn(
fileEntry
);
}
protected void setUpFastDateFormatFactoryUtil() {
FastDateFormatFactoryUtil fastDateFormatFactoryUtil =
new FastDateFormatFactoryUtil();
fastDateFormatFactoryUtil.setFastDateFormatFactory(
new FastDateFormatFactoryImpl());
}
@Override
protected void setUpHtmlUtil() {
HtmlUtil htmlUtil = new HtmlUtil();
htmlUtil.setHtml(new HtmlImpl());
}
protected void setUpLayoutServiceUtil() throws Exception {
mockStatic(LayoutServiceUtil.class);
when(
LayoutServiceUtil.getLayoutName(
Matchers.anyLong(), Matchers.anyBoolean(), Matchers.anyLong(),
Matchers.eq("en_US"))
).thenReturn(
"Layout Name"
);
when(
LayoutServiceUtil.getLayoutName(
Matchers.anyLong(), Matchers.anyBoolean(), Matchers.anyLong(),
Matchers.eq("pt_BR"))
).thenReturn(
"Nome da Pagina"
);
}
protected JSONArray toJSONArray(String... values) {
JSONArray jsonArray = JSONFactoryUtil.createJSONArray();
for (String value : values) {
jsonArray.put(value);
}
return jsonArray;
}
}