/**
* 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.Value;
import com.liferay.dynamic.data.mapping.storage.DDMFormFieldValue;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
import com.liferay.portal.configuration.metatype.definitions.ExtendedAttributeDefinition;
import com.liferay.portal.configuration.metatype.definitions.ExtendedObjectClassDefinition;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.language.LanguageImpl;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
import java.util.ListResourceBundle;
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 ConfigurationModelToDDMFormValuesConverterTest extends Mockito {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
LanguageUtil languageUtil = new LanguageUtil();
languageUtil.setLanguage(new LanguageImpl());
}
@Test
public void testGetValuesByConfigurationAndNegativeCardinalityWithTextField() {
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, -2);
whenGetDefaultValue(extendedAttributeDefinition, null);
whenGetID(extendedAttributeDefinition, "Text");
Configuration configuration = mock(Configuration.class);
Dictionary<String, Object> properties = new Hashtable<>();
Vector<String> vector = new Vector<>();
vector.add("Joe Bloggs");
vector.add("Ella Fitzgerald");
properties.put("Text", vector);
whenGetProperties(configuration, properties);
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, configuration, null, null, false);
DDMFormValues ddmFormValues = getDDMFormValues(
configurationModel, getDDMForm(configurationModel));
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
Assert.assertEquals(
ddmFormFieldValues.toString(), 2, ddmFormFieldValues.size());
Assert.assertEquals(
"Joe Bloggs", getValueString(ddmFormFieldValues.get(0)));
Assert.assertEquals(
"Ella Fitzgerald", getValueString(ddmFormFieldValues.get(1)));
}
@Test
public void testGetValuesByConfigurationAndPositiveCardinalityWithTextField() {
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, 2);
whenGetDefaultValue(extendedAttributeDefinition, null);
whenGetID(extendedAttributeDefinition, "Text");
Configuration configuration = mock(Configuration.class);
Dictionary<String, Object> properties = new Hashtable<>();
properties.put("Text", new String[] {"Joe Bloggs", "Ella Fitzgerald"});
whenGetProperties(configuration, properties);
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, configuration, null, null, false);
DDMFormValues ddmFormValues = getDDMFormValues(
configurationModel, getDDMForm(configurationModel));
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
Assert.assertEquals(
ddmFormFieldValues.toString(), 2, ddmFormFieldValues.size());
Assert.assertEquals(
"Joe Bloggs", getValueString(ddmFormFieldValues.get(0)));
Assert.assertEquals(
"Ella Fitzgerald", getValueString(ddmFormFieldValues.get(1)));
}
@Test
public void testGetValuesByConfigurationWithCheckboxField() {
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, 0);
whenGetID(extendedAttributeDefinition, "Boolean");
Configuration configuration = mock(Configuration.class);
Dictionary<String, Object> properties = new Hashtable<>();
properties.put("Boolean", Boolean.TRUE);
whenGetProperties(configuration, properties);
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, configuration, null, null, false);
DDMFormValues ddmFormValues = getDDMFormValues(
configurationModel, getDDMForm(configurationModel));
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
Assert.assertEquals(
ddmFormFieldValues.toString(), 1, ddmFormFieldValues.size());
Assert.assertEquals("true", getValueString(ddmFormFieldValues.get(0)));
}
@Test
public void testGetValuesByDefaultValueWithCheckboxField() {
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, 0);
whenGetID(extendedAttributeDefinition, "Boolean");
whenGetDefaultValue(
extendedAttributeDefinition, new String[] {"false"});
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, null, null, null, false);
DDMFormValues ddmFormValues = getDDMFormValues(
configurationModel, getDDMForm(configurationModel));
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
Assert.assertEquals(
ddmFormFieldValues.toString(), 1, ddmFormFieldValues.size());
Assert.assertEquals("false", getValueString(ddmFormFieldValues.get(0)));
}
@Test
public void testGetValuesByDefaultValueWithSelectField() {
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, 0);
whenGetDefaultValue(
extendedAttributeDefinition, new String[] {"REQUEST_HEADER"});
whenGetID(extendedAttributeDefinition, "Select");
whenGetOptionLabels(
extendedAttributeDefinition,
new String[] {"COOKIE", "REQUEST_HEADER"});
whenGetOptionValues(
extendedAttributeDefinition,
new String[] {"COOKIE", "REQUEST_HEADER"});
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, null, null, null, false);
DDMFormValues ddmFormValues = getDDMFormValues(
configurationModel, getDDMForm(configurationModel));
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
Assert.assertEquals(
ddmFormFieldValues.toString(), 1, ddmFormFieldValues.size());
Assert.assertEquals(
"[\"REQUEST_HEADER\"]", getValueString(ddmFormFieldValues.get(0)));
}
@Test
public void testGetValuesByDefaultValueWithTextField() {
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, 2);
whenGetDefaultValue(
extendedAttributeDefinition,
new String[] {"Joe Bloggs|Ella Fitzgerald"});
whenGetID(extendedAttributeDefinition, "Text");
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, null, null, null, false);
DDMFormValues ddmFormValues = getDDMFormValues(
configurationModel, getDDMForm(configurationModel));
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
Assert.assertEquals(
ddmFormFieldValues.toString(), 2, ddmFormFieldValues.size());
Assert.assertEquals(
"Joe Bloggs", getValueString(ddmFormFieldValues.get(0)));
Assert.assertEquals(
"Ella Fitzgerald", getValueString(ddmFormFieldValues.get(1)));
}
@Test
public void testGetValuesByEmptyDefaultValueWithTextField() {
ExtendedObjectClassDefinition extendedObjectClassDefinition = mock(
ExtendedObjectClassDefinition.class);
ExtendedAttributeDefinition extendedAttributeDefinition = mock(
ExtendedAttributeDefinition.class);
whenGetAttributeDefinitions(
extendedObjectClassDefinition,
new ExtendedAttributeDefinition[] {extendedAttributeDefinition});
whenGetCardinality(extendedAttributeDefinition, 0);
whenGetDefaultValue(extendedAttributeDefinition, null);
whenGetID(extendedAttributeDefinition, "Text");
ConfigurationModel configurationModel = new ConfigurationModel(
extendedObjectClassDefinition, null, null, null, false);
DDMFormValues ddmFormValues = getDDMFormValues(
configurationModel, getDDMForm(configurationModel));
List<DDMFormFieldValue> ddmFormFieldValues =
ddmFormValues.getDDMFormFieldValues();
Assert.assertEquals(
ddmFormFieldValues.toString(), 1, ddmFormFieldValues.size());
Assert.assertEquals(
StringPool.BLANK, getValueString(ddmFormFieldValues.get(0)));
}
protected DDMForm getDDMForm(ConfigurationModel configurationModel) {
ConfigurationModelToDDMFormConverter
configurationModelToDDMFormConverter =
new ConfigurationModelToDDMFormConverter(
configurationModel, _enLocale, new EmptyResourceBundle());
return configurationModelToDDMFormConverter.getDDMForm();
}
protected DDMFormValues getDDMFormValues(
ConfigurationModel configurationModel, DDMForm ddmForm) {
ConfigurationModelToDDMFormValuesConverter
configurationModelToDDMFormValuesConverter =
new ConfigurationModelToDDMFormValuesConverter(
configurationModel, ddmForm, _enLocale,
new EmptyResourceBundle());
return configurationModelToDDMFormValuesConverter.getDDMFormValues();
}
protected String getValueString(DDMFormFieldValue ddmFormFieldValue) {
Value value = ddmFormFieldValue.getValue();
return value.getString(_enLocale);
}
protected void whenGetAttributeDefinitions(
ExtendedObjectClassDefinition objectClassDefinition,
ExtendedAttributeDefinition[] extendedAttributeDefinitions) {
when(
objectClassDefinition.getAttributeDefinitions(Matchers.anyInt())
).thenReturn(
extendedAttributeDefinitions
);
}
protected void whenGetCardinality(
ExtendedAttributeDefinition extendedAttributeDefinition,
int cardinality) {
when(
extendedAttributeDefinition.getCardinality()
).thenReturn(
cardinality
);
}
protected void whenGetDefaultValue(
ExtendedAttributeDefinition extendedAttributeDefinition,
String[] defaultValue) {
when(
extendedAttributeDefinition.getDefaultValue()
).thenReturn(
defaultValue
);
}
protected void whenGetID(
ExtendedAttributeDefinition extendedAttributeDefinition, String id) {
when(
extendedAttributeDefinition.getID()
).thenReturn(
id
);
}
protected void whenGetOptionLabels(
ExtendedAttributeDefinition extendedAttributeDefinition,
String[] optionLabels) {
when(
extendedAttributeDefinition.getOptionLabels()
).thenReturn(
optionLabels
);
}
protected void whenGetOptionValues(
ExtendedAttributeDefinition extendedAttributeDefinition,
String[] optionValues) {
when(
extendedAttributeDefinition.getOptionValues()
).thenReturn(
optionValues
);
}
protected void whenGetProperties(
Configuration configuration, Dictionary<String, Object> properties) {
when(
configuration.getProperties()
).thenReturn(
properties
);
}
private final Locale _enLocale = LocaleUtil.US;
private static class EmptyResourceBundle extends ListResourceBundle {
@Override
protected Object[][] getContents() {
return new Object[0][];
}
}
}