/**
* 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.configuration.admin.web.internal.util;
import com.liferay.configuration.admin.web.internal.model.ConfigurationModel;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.DDMFormFieldType;
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.portal.configuration.metatype.definitions.ExtendedAttributeDefinition;
import com.liferay.portal.configuration.metatype.definitions.ExtendedObjectClassDefinition;
import com.liferay.portal.json.JSONFactoryImpl;
import com.liferay.portal.kernel.json.JSONFactory;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.StringUtil;
import java.util.Dictionary;
import java.util.Locale;
import java.util.Vector;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.osgi.service.cm.Configuration;
/**
* @author Marcellus Tavares
*/
public class DDMFormValuesToPropertiesConverterTest extends Mockito {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
_jsonFactory = new JSONFactoryImpl();
}
@Test
public void testArrayBooleanValues() {
DDMForm ddmForm = new DDMForm();
ddmForm.addAvailableLocale(_enLocale);
ddmForm.setDefaultLocale(_enLocale);
DDMFormField booleanDDMFormField = DDMFormTestUtil.createDDMFormField(
"Boolean", "Boolean", DDMFormFieldType.CHECKBOX, "boolean", false,
true, false);
ddmForm.addDDMFormField(booleanDDMFormField);
DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);
ddmFormValues.addAvailableLocale(_enLocale);
ddmFormValues.setDefaultLocale(_enLocale);
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue("Boolean", "true", _enLocale));
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue("Boolean", "false", _enLocale));
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue("Boolean", "true", _enLocale));
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
Configuration configuration = mock(Configuration.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, 3);
whenGetID(extendedAttributeDefinition, "Boolean");
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, configuration, null, null, false);
DDMFormValuesToPropertiesConverter ddmFormValuesToPropertiesConverter =
new DDMFormValuesToPropertiesConverter(
configurationModel, ddmFormValues, _jsonFactory, _enLocale);
Dictionary<String, Object> properties =
ddmFormValuesToPropertiesConverter.getProperties();
Object value = properties.get("Boolean");
Boolean[] booleanValues = (Boolean[])value;
Assert.assertEquals(true, booleanValues[0]);
Assert.assertEquals(false, booleanValues[1]);
Assert.assertEquals(true, booleanValues[2]);
}
@Test
public void testSimpleBooleanValue() {
DDMForm ddmForm = new DDMForm();
ddmForm.addAvailableLocale(_enLocale);
ddmForm.setDefaultLocale(_enLocale);
DDMFormField booleanDDMFormField = DDMFormTestUtil.createDDMFormField(
"Boolean", "Boolean", DDMFormFieldType.CHECKBOX, "boolean", false,
false, false);
ddmForm.addDDMFormField(booleanDDMFormField);
DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);
ddmFormValues.addAvailableLocale(_enLocale);
ddmFormValues.setDefaultLocale(_enLocale);
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue("Boolean", "true", _enLocale));
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
Configuration configuration = mock(Configuration.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, 0);
whenGetID(extendedAttributeDefinition, "Boolean");
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, configuration, null, null, false);
DDMFormValuesToPropertiesConverter ddmFormValuesToPropertiesConverter =
new DDMFormValuesToPropertiesConverter(
configurationModel, ddmFormValues, _jsonFactory, _enLocale);
Dictionary<String, Object> properties =
ddmFormValuesToPropertiesConverter.getProperties();
Assert.assertEquals(true, properties.get("Boolean"));
}
@Test
public void testSimpleIntegerInvalidValue() {
DDMForm ddmForm = new DDMForm();
ddmForm.addAvailableLocale(_enLocale);
ddmForm.setDefaultLocale(_enLocale);
DDMFormField integerDDMFormField = DDMFormTestUtil.createDDMFormField(
"Integer", "Integer", DDMFormFieldType.TEXT, "integer", false,
false, false);
ddmForm.addDDMFormField(integerDDMFormField);
DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);
ddmFormValues.addAvailableLocale(_enLocale);
ddmFormValues.setDefaultLocale(_enLocale);
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue("Integer", "42f", _enLocale));
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
Configuration configuration = mock(Configuration.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, 0);
whenGetID(extendedAttributeDefinition, "Integer");
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, configuration, null, null, false);
DDMFormValuesToPropertiesConverter ddmFormValuesToPropertiesConverter =
new DDMFormValuesToPropertiesConverter(
configurationModel, ddmFormValues, _jsonFactory, _enLocale);
Dictionary<String, Object> properties =
ddmFormValuesToPropertiesConverter.getProperties();
Assert.assertEquals(0, properties.get("Integer"));
}
@Test
public void testSimpleIntegerValue() {
DDMForm ddmForm = new DDMForm();
ddmForm.addAvailableLocale(_enLocale);
ddmForm.setDefaultLocale(_enLocale);
DDMFormField integerDDMFormField = DDMFormTestUtil.createDDMFormField(
"Integer", "Integer", DDMFormFieldType.TEXT, "integer", false,
false, false);
ddmForm.addDDMFormField(integerDDMFormField);
DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);
ddmFormValues.addAvailableLocale(_enLocale);
ddmFormValues.setDefaultLocale(_enLocale);
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue("Integer", "42", _enLocale));
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
Configuration configuration = mock(Configuration.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, 0);
whenGetID(extendedAttributeDefinition, "Integer");
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, configuration, null, null, false);
DDMFormValuesToPropertiesConverter ddmFormValuesToPropertiesConverter =
new DDMFormValuesToPropertiesConverter(
configurationModel, ddmFormValues, _jsonFactory, _enLocale);
Dictionary<String, Object> properties =
ddmFormValuesToPropertiesConverter.getProperties();
Assert.assertEquals(42, properties.get("Integer"));
}
@Test
public void testSimpleSelectValue() {
DDMForm ddmForm = new DDMForm();
ddmForm.addAvailableLocale(_enLocale);
ddmForm.setDefaultLocale(_enLocale);
DDMFormField integerDDMFormField = DDMFormTestUtil.createDDMFormField(
"Select", "Select", DDMFormFieldType.SELECT, "integer", false,
false, false);
ddmForm.addDDMFormField(integerDDMFormField);
DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);
ddmFormValues.addAvailableLocale(_enLocale);
ddmFormValues.setDefaultLocale(_enLocale);
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue("Select", "[\"42\"]", _enLocale));
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
Configuration configuration = mock(Configuration.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, 0);
whenGetID(extendedAttributeDefinition, "Select");
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, configuration, null, null, false);
DDMFormValuesToPropertiesConverter ddmFormValuesToPropertiesConverter =
new DDMFormValuesToPropertiesConverter(
configurationModel, ddmFormValues, _jsonFactory, _enLocale);
Dictionary<String, Object> properties =
ddmFormValuesToPropertiesConverter.getProperties();
Assert.assertEquals(42, properties.get("Select"));
}
@SuppressWarnings("unchecked")
@Test
public void testVectorBooleanValues() {
DDMForm ddmForm = new DDMForm();
ddmForm.addAvailableLocale(_enLocale);
ddmForm.setDefaultLocale(_enLocale);
DDMFormField booleanDDMFormField = DDMFormTestUtil.createDDMFormField(
"Boolean", "Boolean", DDMFormFieldType.CHECKBOX, "boolean", false,
true, false);
ddmForm.addDDMFormField(booleanDDMFormField);
DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);
ddmFormValues.addAvailableLocale(_enLocale);
ddmFormValues.setDefaultLocale(_enLocale);
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue("Boolean", "true", _enLocale));
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue("Boolean", "false", _enLocale));
ddmFormValues.addDDMFormFieldValue(
createDDMFormFieldValue("Boolean", "true", _enLocale));
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
Configuration configuration = mock(Configuration.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, -3);
whenGetID(extendedAttributeDefinition, "Boolean");
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, configuration, null, null, false);
DDMFormValuesToPropertiesConverter ddmFormValuesToPropertiesConverter =
new DDMFormValuesToPropertiesConverter(
configurationModel, ddmFormValues, _jsonFactory, _enLocale);
Dictionary<String, Object> properties =
ddmFormValuesToPropertiesConverter.getProperties();
Object value = properties.get("Boolean");
Vector<Boolean> booleanValues = (Vector<Boolean>)value;
Assert.assertEquals(true, booleanValues.get(0));
Assert.assertEquals(false, booleanValues.get(1));
Assert.assertEquals(true, booleanValues.get(2));
}
protected DDMFormFieldValue createDDMFormFieldValue(
String name, String valueString, Locale locale) {
DDMFormFieldValue ddmFormFieldValue = new DDMFormFieldValue();
ddmFormFieldValue.setName(name);
ddmFormFieldValue.setInstanceId(StringUtil.randomString());
Value value = new LocalizedValue(locale);
value.addString(locale, valueString);
ddmFormFieldValue.setValue(value);
return ddmFormFieldValue;
}
protected void whenGetAttributeDefinitions(
ExtendedObjectClassDefinition extendedObjectClassDefinition,
ExtendedAttributeDefinition[] extendedAttributeDefinitions) {
when(
extendedObjectClassDefinition.getAttributeDefinitions(
Matchers.anyInt())
).thenReturn(
extendedAttributeDefinitions
);
}
protected void whenGetCardinality(
ExtendedAttributeDefinition extendedAttributeDefinition,
int cardinality) {
when(
extendedAttributeDefinition.getCardinality()
).thenReturn(
cardinality
);
}
protected void whenGetID(
ExtendedAttributeDefinition extendedAttributeDefinition, String id) {
when(
extendedAttributeDefinition.getID()
).thenReturn(
id
);
}
private final Locale _enLocale = LocaleUtil.US;
private JSONFactory _jsonFactory;
}