/**
* 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.lists.form.web.internal.portlet.action;
import static org.powermock.api.mockito.PowerMockito.field;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;
import com.liferay.dynamic.data.mapping.annotations.DDMForm;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProvider;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProviderParameterSettings;
import com.liferay.dynamic.data.mapping.io.DDMFormValuesJSONDeserializer;
import com.liferay.dynamic.data.mapping.io.internal.DDMFormValuesJSONDeserializerImpl;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
import com.liferay.dynamic.data.mapping.util.DDMFormFactory;
import com.liferay.portal.json.JSONFactoryImpl;
import com.liferay.portal.kernel.json.JSONFactory;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.language.Language;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
import com.liferay.portal.kernel.util.ResourceBundleUtil;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.util.PortalImpl;
import java.io.IOException;
import java.io.InputStream;
import java.util.Locale;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Matchers;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.skyscreamer.jsonassert.JSONAssert;
/**
* @author Rafael Praxedes
*/
@PrepareForTest(ResourceBundleUtil.class)
@RunWith(PowerMockRunner.class)
public class GetDataProviderParametersSettingsMVCResourceCommandTest {
@Before
public void setUp() throws Exception {
setUpDDMDataProvider();
setUpDDMFormValuesJSONDeserializer();
setUpGetDataProviderParametersSettingsMVCResourceCommand();
setUpLanguageUtil();
setUpResourceBundleUtil();
}
@Test
public void testCreateParametersJSONObject() throws Exception {
JSONObject parametersJSONObject =
_getDataProviderParametersSettingsMVCResourceCommand.
createParametersJSONObject(
_ddmDataProvider,
getDataProviderFormValues(
"form-values-data-provider-settings-1.json"));
String expectedValue = read(
"data-provider-input-output-parameters-1.json");
JSONAssert.assertEquals(
expectedValue, parametersJSONObject.toString(), false);
}
@Test
public void testCreateParametersJSONObjectWithoutLabels() throws Exception {
JSONObject parametersJSONObject =
_getDataProviderParametersSettingsMVCResourceCommand.
createParametersJSONObject(
_ddmDataProvider,
getDataProviderFormValues(
"form-values-data-provider-settings-2.json"));
String expectedValue = read(
"data-provider-input-output-parameters-2.json");
JSONAssert.assertEquals(
expectedValue, parametersJSONObject.toString(), false);
}
protected DDMFormValues getDataProviderFormValues(String file)
throws Exception {
com.liferay.dynamic.data.mapping.model.DDMForm ddmForm =
DDMFormFactory.create(DDMDataProviderSettings.class);
String serializedDDMFormValues = read(file);
return _ddmFormValuesJSONDeserializer.deserialize(
ddmForm, serializedDDMFormValues);
}
protected String read(String fileName) throws IOException {
Class<?> clazz = getClass();
InputStream inputStream = clazz.getResourceAsStream(
"dependencies/" + fileName);
return StringUtil.read(inputStream);
}
protected void setUpDDMDataProvider() {
_ddmDataProvider = mock(DDMDataProvider.class);
when(
_ddmDataProvider.getSettings()
).then(
new Answer<Class<?>>() {
@Override
public Class<?> answer(InvocationOnMock invocationOnMock)
throws Throwable {
return DDMDataProviderSettings.class;
}
}
);
}
protected void setUpDDMFormValuesJSONDeserializer() throws Exception {
field(
DDMFormValuesJSONDeserializerImpl.class, "_jsonFactory"
).set(
_ddmFormValuesJSONDeserializer, _jsonFactory
);
}
protected void setUpGetDataProviderParametersSettingsMVCResourceCommand()
throws Exception {
_getDataProviderParametersSettingsMVCResourceCommand =
new GetDataProviderParametersSettingsMVCResourceCommand();
field(
_getDataProviderParametersSettingsMVCResourceCommand.getClass(),
"_jsonFactory"
).set(
_getDataProviderParametersSettingsMVCResourceCommand, _jsonFactory
);
field(
_getDataProviderParametersSettingsMVCResourceCommand.getClass(),
"_ddmFormValuesJSONDeserializer"
).set(
_getDataProviderParametersSettingsMVCResourceCommand,
_ddmFormValuesJSONDeserializer
);
}
protected void setUpLanguageUtil() {
LanguageUtil languageUtil = new LanguageUtil();
Language language = mock(Language.class);
languageUtil.setLanguage(language);
}
protected void setUpPortalClassLoaderUtil() {
PortalClassLoaderUtil.setClassLoader(PortalImpl.class.getClassLoader());
}
protected void setUpResourceBundleUtil() {
mockStatic(ResourceBundleUtil.class);
when(
ResourceBundleUtil.getBundle(
Matchers.anyString(), Matchers.any(Locale.class),
Matchers.any(ClassLoader.class))
).thenReturn(
ResourceBundleUtil.EMPTY_RESOURCE_BUNDLE
);
}
private DDMDataProvider _ddmDataProvider;
private final DDMFormValuesJSONDeserializer _ddmFormValuesJSONDeserializer =
new DDMFormValuesJSONDeserializerImpl();
private GetDataProviderParametersSettingsMVCResourceCommand
_getDataProviderParametersSettingsMVCResourceCommand;
private final JSONFactory _jsonFactory = new JSONFactoryImpl();
@DDMForm
private interface DDMDataProviderSettings
extends DDMDataProviderParameterSettings {
}
}