/**
* 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.expando.service.test;
import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian;
import com.liferay.counter.kernel.service.CounterLocalServiceUtil;
import com.liferay.document.library.kernel.model.DLFileEntry;
import com.liferay.expando.kernel.exception.ValueDataException;
import com.liferay.expando.kernel.model.ExpandoColumn;
import com.liferay.expando.kernel.model.ExpandoColumnConstants;
import com.liferay.expando.kernel.model.ExpandoTable;
import com.liferay.expando.kernel.model.ExpandoValue;
import com.liferay.expando.kernel.service.ExpandoColumnLocalServiceUtil;
import com.liferay.expando.kernel.service.ExpandoRowLocalServiceUtil;
import com.liferay.expando.kernel.service.ExpandoValueLocalServiceUtil;
import com.liferay.portal.kernel.test.rule.AggregateTestRule;
import com.liferay.portal.kernel.test.rule.DeleteAfterTestRun;
import com.liferay.portal.kernel.test.util.TestPropsValues;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import com.liferay.portlet.expando.util.test.ExpandoTestUtil;
import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.junit.Assert;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* @author Marcellus Tavares
*/
@RunWith(Arquillian.class)
public class ExpandoValueLocalServiceTest {
@ClassRule
@Rule
public static final AggregateTestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_classNameId = PortalUtil.getClassNameId(DLFileEntry.class);
_enLocale = LocaleUtil.fromLanguageId("en_US");
_frLocale = LocaleUtil.fromLanguageId("fr_FR");
_ptLocale = LocaleUtil.fromLanguageId("pt_BR");
_expandoTable = ExpandoTestUtil.addTable(
_classNameId, "testExpandoTable");
}
@Test
public void testAddLocalizedStringArrayValue() throws Exception {
ExpandoColumn column = ExpandoTestUtil.addColumn(
_expandoTable, "Test Column",
ExpandoColumnConstants.STRING_ARRAY_LOCALIZED);
Map<Locale, String[]> dataMap = new HashMap<>();
dataMap.put(_enLocale, new String[] {"one", "two", "three"});
dataMap.put(_ptLocale, new String[] {"um", "dois", "tres"});
ExpandoValue value = ExpandoTestUtil.addValue(
_expandoTable, column, dataMap);
value = ExpandoValueLocalServiceUtil.getExpandoValue(
value.getValueId());
Map<Locale, String[]> stringArrayMap = value.getStringArrayMap();
String[] enValues = stringArrayMap.get(_enLocale);
Assert.assertEquals(Arrays.toString(enValues), 3, enValues.length);
Assert.assertEquals("two", enValues[1]);
String[] ptValues = stringArrayMap.get(_ptLocale);
Assert.assertEquals(Arrays.toString(ptValues), 3, ptValues.length);
Assert.assertEquals("tres", ptValues[2]);
}
@Test
public void testAddLocalizedStringValue() throws Exception {
ExpandoColumn column = ExpandoTestUtil.addColumn(
_expandoTable, "Test Column",
ExpandoColumnConstants.STRING_LOCALIZED);
Map<Locale, String> dataMap = new HashMap<>();
dataMap.put(_enLocale, "Test");
dataMap.put(_ptLocale, "Teste");
ExpandoValue value = ExpandoTestUtil.addValue(
_expandoTable, column, dataMap);
value = ExpandoValueLocalServiceUtil.getExpandoValue(
value.getValueId());
Map<Locale, String> stringMap = value.getStringMap();
Assert.assertEquals("Test", stringMap.get(_enLocale));
Assert.assertEquals("Teste", stringMap.get(_ptLocale));
}
@Test
public void testAddStringArrayValue() throws Exception {
ExpandoColumn column = ExpandoTestUtil.addColumn(
_expandoTable, "Test Column", ExpandoColumnConstants.STRING_ARRAY);
ExpandoValue value = ExpandoTestUtil.addValue(
_expandoTable, column, new String[] {"one", "two, three"});
value = ExpandoValueLocalServiceUtil.getExpandoValue(
value.getValueId());
String[] data = value.getStringArray();
Assert.assertEquals(Arrays.toString(data), 2, data.length);
Assert.assertEquals("one", data[0]);
Assert.assertEquals("two, three", data[1]);
}
@Test
public void testAddWrongValue() throws Exception {
ExpandoColumn column = ExpandoTestUtil.addColumn(
_expandoTable, "Test Column", ExpandoColumnConstants.STRING);
Map<Locale, String> dataMap = new HashMap<>();
dataMap.put(_enLocale, "one");
dataMap.put(_ptLocale, "um");
try {
ExpandoTestUtil.addValue(
_expandoTable, column, dataMap, LocaleUtil.getDefault());
Assert.fail();
}
catch (ValueDataException vde) {
}
}
@Test
public void testDeleteAllColumns() throws Exception {
ExpandoColumn column = ExpandoTestUtil.addColumn(
_expandoTable, "Test Column", ExpandoColumnConstants.STRING);
long classPK = CounterLocalServiceUtil.increment();
ExpandoValue value = ExpandoTestUtil.addValue(
_expandoTable, column, classPK, "value");
ExpandoValueLocalServiceUtil.deleteColumnValues(column.getColumnId());
Assert.assertNull(
ExpandoRowLocalServiceUtil.fetchExpandoRow(value.getRowId()));
}
@Test
public void testDeleteOneColumn() throws Exception {
ExpandoColumn column1 = ExpandoTestUtil.addColumn(
_expandoTable, "Test Column 1", ExpandoColumnConstants.STRING);
ExpandoColumn column2 = ExpandoTestUtil.addColumn(
_expandoTable, "Test Column 2", ExpandoColumnConstants.STRING);
long classPK = CounterLocalServiceUtil.increment();
ExpandoValue value = ExpandoTestUtil.addValue(
_expandoTable, column1, classPK, "value");
ExpandoTestUtil.addValue(_expandoTable, column2, classPK, "value");
ExpandoValueLocalServiceUtil.deleteColumnValues(column1.getColumnId());
Assert.assertNotNull(
ExpandoRowLocalServiceUtil.getRow(value.getRowId()));
}
@Test
public void testGetDefaultColumnValue() throws Exception {
Map<Locale, String> defaultData = new HashMap<>();
defaultData.put(_enLocale, "Test");
ExpandoColumn column = ExpandoTestUtil.addColumn(
_expandoTable, "Test Column",
ExpandoColumnConstants.STRING_LOCALIZED, defaultData);
column = ExpandoColumnLocalServiceUtil.getColumn(column.getColumnId());
Map<Locale, String> data =
(Map<Locale, String>)column.getDefaultValue();
Assert.assertEquals("Test", data.get(_enLocale));
}
@Test
public void testGetNonexistingLocaleValue() throws Exception {
ExpandoColumn column = ExpandoTestUtil.addColumn(
_expandoTable, "Test Column",
ExpandoColumnConstants.STRING_LOCALIZED);
Map<Locale, String> dataMap = new HashMap<>();
dataMap.put(_enLocale, "one");
dataMap.put(_ptLocale, "um");
ExpandoValue value = ExpandoTestUtil.addValue(
_expandoTable, column, dataMap, _ptLocale);
value = ExpandoValueLocalServiceUtil.getExpandoValue(
value.getValueId());
Assert.assertEquals(_ptLocale, value.getDefaultLocale());
List<Locale> availableLocales = value.getAvailableLocales();
Assert.assertEquals(_ptLocale, availableLocales.get(0));
Assert.assertEquals(_enLocale, availableLocales.get(1));
Assert.assertEquals("um", value.getString(_ptLocale));
Assert.assertEquals("one", value.getString(_enLocale));
Assert.assertEquals("um", value.getString(_frLocale));
}
@Test
public void testGetSerializableData() throws Exception {
ExpandoColumn column = ExpandoTestUtil.addColumn(
_expandoTable, "Test Column",
ExpandoColumnConstants.STRING_ARRAY_LOCALIZED);
Map<Locale, String[]> dataMap = new HashMap<>();
dataMap.put(_enLocale, new String[] {"Hello, Joe", "Hi, Joe"});
dataMap.put(_ptLocale, new String[] {"Ola, Joao", "Oi, Joao"});
long classPK = CounterLocalServiceUtil.increment();
ExpandoTestUtil.addValue(_expandoTable, column, classPK, dataMap);
Serializable serializable = ExpandoValueLocalServiceUtil.getData(
TestPropsValues.getCompanyId(),
PortalUtil.getClassName(_classNameId), _expandoTable.getName(),
column.getName(), classPK);
Assert.assertTrue(serializable instanceof Map);
dataMap = (Map<Locale, String[]>)serializable;
String[] enValues = dataMap.get(_enLocale);
Assert.assertEquals(Arrays.toString(enValues), 2, enValues.length);
Assert.assertEquals("Hi, Joe", enValues[1]);
}
private long _classNameId;
private Locale _enLocale;
@DeleteAfterTestRun
private ExpandoTable _expandoTable;
private Locale _frLocale;
private Locale _ptLocale;
}