/**
* NOTE: This copyright does *not* cover user programs that use HQ
* program services by normal system calls through the application
* program interfaces provided as part of the Hyperic Plug-in Development
* Kit or the Hyperic Client Development Kit - this is merely considered
* normal use of the program, and does *not* fall under the heading of
* "derived work".
*
* Copyright (C) [2009-2010], VMware, Inc.
* This file is part of HQ.
*
* HQ is free software; you can redistribute it and/or modify
* it under the terms version 2 of the GNU General Public License as
* published by the Free Software Foundation. This program 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 General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*
*/
package org.hyperic.hq.web.dashboard;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpSession;
import org.hyperic.hq.auth.shared.SessionNotFoundException;
import org.hyperic.hq.auth.shared.SessionTimeoutException;
import org.hyperic.hq.authz.shared.PermissionException;
import org.hyperic.hq.bizapp.shared.AuthzBoss;
import org.hyperic.hq.ui.WebUser;
import org.hyperic.hq.ui.server.session.DashboardConfig;
import org.hyperic.hq.ui.shared.DashboardManager;
import org.hyperic.hq.ui.util.ConfigurationProxy;
import org.hyperic.util.config.ConfigResponse;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockServletContext;
public class DashboardControllerTest extends BaseDashboardControllerTest {
private AuthzBoss mockAuthzBoss;
private ConfigurationProxy mockConfigurationProxy;
private DashboardManager mockDashboardManager;
private List<String> mockMulitplePortletsList;
private DashboardController controller;
@Before
public void setUp() {
super.setUp();
mockMulitplePortletsList = new ArrayList<String>();
mockMulitplePortletsList.add("portlet1");
mockMulitplePortletsList.add("portlet2");
mockMulitplePortletsList.add("portlet4");
mockMulitplePortletsList.add("portlet5");
mockAuthzBoss = getMockAuthzBoss();
mockConfigurationProxy = getMockConfigurationProxy();
mockDashboardManager = getMockDashboardManager();
controller = new DashboardController(mockAuthzBoss,
mockConfigurationProxy, mockDashboardManager);
controller.setMultiplePortletsList(mockMulitplePortletsList);
controller.setServletContext(new MockServletContext());
}
@Test
public void testAddPortletToDashboardHasPortletsNewSinglePortletWide()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet100";
final Boolean IS_PORTLET_WIDE = Boolean.TRUE;
final String DASHBOARD_PORTLETS = "|portlet1|portlet2|portlet3";
final String EXPECTED_RESULT = "|portlet1|portlet2|portlet3|portlet100";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardHasPortletsExistingSinglePortletWide()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet3";
final Boolean IS_PORTLET_WIDE = Boolean.TRUE;
final String DASHBOARD_PORTLETS = "|portlet1|portlet2|portlet3";
final String EXPECTED_RESULT = "|portlet1|portlet2|portlet3";
final Boolean EXPECTED_TO_UPDATE = Boolean.FALSE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardEmptyPortletsNewSinglePortletWide()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet3";
final Boolean IS_PORTLET_WIDE = Boolean.TRUE;
final String DASHBOARD_PORTLETS = "";
final String EXPECTED_RESULT = "|portlet3";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardNullPortletsNewSinglePortletWide()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet3";
final Boolean IS_PORTLET_WIDE = Boolean.TRUE;
final String DASHBOARD_PORTLETS = null;
final String EXPECTED_RESULT = "|portlet3";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardHasPortletsNewMultiPortletWide()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet4";
final Boolean IS_PORTLET_WIDE = Boolean.TRUE;
final String DASHBOARD_PORTLETS = "|portlet3|portlet1|portlet2";
final String EXPECTED_RESULT = "|portlet3|portlet1|portlet2|portlet4";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardHasPortletsExistingMultiPortletWide()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet4";
final Boolean IS_PORTLET_WIDE = Boolean.TRUE;
final String DASHBOARD_PORTLETS = "|portlet1|portlet4|portlet3";
final String EXPECTED_RESULT = "|portlet1|portlet4|portlet3|portlet4_2";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardHasPortletsExistingMultiPortletX2SequentialWide()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet4";
final Boolean IS_PORTLET_WIDE = Boolean.TRUE;
final String DASHBOARD_PORTLETS = "|portlet1|portlet4|portlet3|portlet4_2";
final String EXPECTED_RESULT = "|portlet1|portlet4|portlet3|portlet4_2|portlet4_3";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardHasPortletsExistingMultiPortletX2NonSequentialWide()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet4";
final Boolean IS_PORTLET_WIDE = Boolean.TRUE;
final String DASHBOARD_PORTLETS = "|portlet1|portlet4|portlet3|portlet4_4|portlet4_2";
final String EXPECTED_RESULT = "|portlet1|portlet4|portlet3|portlet4_4|portlet4_2|portlet4_3";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardHasPortletsNewSinglePortletNarrow()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet100";
final Boolean IS_PORTLET_WIDE = Boolean.FALSE;
final String DASHBOARD_PORTLETS = "|portlet1|portlet2|portlet3";
final String EXPECTED_RESULT = "|portlet1|portlet2|portlet3|portlet100";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardHasPortletsExistingSinglePortletNarrow()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet3";
final Boolean IS_PORTLET_WIDE = Boolean.FALSE;
final String DASHBOARD_PORTLETS = "|portlet1|portlet2|portlet3";
final String EXPECTED_RESULT = "|portlet1|portlet2|portlet3";
final Boolean EXPECTED_TO_UPDATE = Boolean.FALSE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardEmptyPortletsNewSinglePortletNarrow()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet3";
final Boolean IS_PORTLET_WIDE = Boolean.FALSE;
final String DASHBOARD_PORTLETS = "";
final String EXPECTED_RESULT = "|portlet3";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardNullPortletsNewSinglePortletNarrow()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet3";
final Boolean IS_PORTLET_WIDE = Boolean.FALSE;
final String DASHBOARD_PORTLETS = null;
final String EXPECTED_RESULT = "|portlet3";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardHasPortletsNewMultiPortletNarrow()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet4";
final Boolean IS_PORTLET_WIDE = Boolean.FALSE;
final String DASHBOARD_PORTLETS = "|portlet3|portlet1|portlet2";
final String EXPECTED_RESULT = "|portlet3|portlet1|portlet2|portlet4";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardHasPortletsExistingMultiPortletNArrow()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet4";
final Boolean IS_PORTLET_WIDE = Boolean.FALSE;
final String DASHBOARD_PORTLETS = "|portlet1|portlet4|portlet3";
final String EXPECTED_RESULT = "|portlet1|portlet4|portlet3|portlet4_2";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardHasPortletsExistingMultiPortletX2SequentialNarrow()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet4";
final Boolean IS_PORTLET_WIDE = Boolean.FALSE;
final String DASHBOARD_PORTLETS = "|portlet1|portlet4|portlet3|portlet4_2";
final String EXPECTED_RESULT = "|portlet1|portlet4|portlet3|portlet4_2|portlet4_3";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testAddPortletToDashboardHasPortletsExistingMultiPortletX2NonSequentialNarrow()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet4";
final Boolean IS_PORTLET_WIDE = Boolean.FALSE;
final String DASHBOARD_PORTLETS = "|portlet1|portlet4|portlet3|portlet4_4|portlet4_2";
final String EXPECTED_RESULT = "|portlet1|portlet4|portlet3|portlet4_4|portlet4_2|portlet4_3";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testAddPortletToDashboard(DASHBOARD_ID, PORTLET_NAME, IS_PORTLET_WIDE,
DASHBOARD_PORTLETS, EXPECTED_RESULT, EXPECTED_TO_UPDATE);
}
@Test
public void testRemoveWidePortletFromDashboardPortletExistsNoSettings()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet8";
final Map<String, String> SETTINGS = new HashMap<String, String>();
SETTINGS.put(UserPreferenceKeys.NARROW_PORTLETS, "|portlet1|portlet2|portlet3");
SETTINGS.put(UserPreferenceKeys.WIDE_PORTLETS, "|portlet8|portlet7|portlet6");
final String EXPECTED_NARROW_RESULT = "|portlet1|portlet2|portlet3";
final String EXPECTED_WIDE_RESULT = "|portlet7|portlet6";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testRemovePortletFromDashboard(DASHBOARD_ID, PORTLET_NAME, SETTINGS,
EXPECTED_WIDE_RESULT, EXPECTED_NARROW_RESULT, null,
EXPECTED_TO_UPDATE);
}
@Test
public void testRemoveNarrowPortletFromDashboardPortletExistsNoSettings()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet8";
final Map<String, String> SETTINGS = new HashMap<String, String>();
SETTINGS.put(UserPreferenceKeys.NARROW_PORTLETS, "|portlet1|portlet8|portlet3");
SETTINGS.put(UserPreferenceKeys.WIDE_PORTLETS, "|portlet5|portlet7|portlet6");
final String EXPECTED_NARROW_RESULT = "|portlet1|portlet3";
final String EXPECTED_WIDE_RESULT = "|portlet5|portlet7|portlet6";
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testRemovePortletFromDashboard(DASHBOARD_ID, PORTLET_NAME, SETTINGS,
EXPECTED_WIDE_RESULT, EXPECTED_NARROW_RESULT, null,
EXPECTED_TO_UPDATE);
}
@Test
public void testRemoveWidePortletFromDashboardPortletExistsSingleWithSettings()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet8";
final Map<String, String> SETTINGS = new HashMap<String, String>();
SETTINGS.put(UserPreferenceKeys.NARROW_PORTLETS, "|portlet1|portlet2|portlet3");
SETTINGS.put(UserPreferenceKeys.WIDE_PORTLETS, "|portlet8|portlet7|portlet6");
SETTINGS.put("portlet1", "setting");
SETTINGS.put("portlet2", "setting");
SETTINGS.put("portlet3", "setting");
SETTINGS.put("portlet8", "setting");
SETTINGS.put("portlet7", "setting");
SETTINGS.put("portlet6", "setting");
final String EXPECTED_NARROW_RESULT = "|portlet1|portlet2|portlet3";
final String EXPECTED_WIDE_RESULT = "|portlet7|portlet6";
final List<String> EXPECTED_SETTING_KEYS = new ArrayList<String>();
EXPECTED_SETTING_KEYS.add(UserPreferenceKeys.NARROW_PORTLETS);
EXPECTED_SETTING_KEYS.add(UserPreferenceKeys.WIDE_PORTLETS);
EXPECTED_SETTING_KEYS.add("portlet1");
EXPECTED_SETTING_KEYS.add("portlet2");
EXPECTED_SETTING_KEYS.add("portlet3");
EXPECTED_SETTING_KEYS.add("portlet7");
EXPECTED_SETTING_KEYS.add("portlet6");
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testRemovePortletFromDashboard(DASHBOARD_ID, PORTLET_NAME, SETTINGS,
EXPECTED_WIDE_RESULT, EXPECTED_NARROW_RESULT, EXPECTED_SETTING_KEYS,
EXPECTED_TO_UPDATE);
}
@Test
public void testRemoveNarrowPortletFromDashboardPortletExistsSingleWithSettings()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet8";
final Map<String, String> SETTINGS = new HashMap<String, String>();
SETTINGS.put(UserPreferenceKeys.NARROW_PORTLETS, "|portlet1|portlet8|portlet3");
SETTINGS.put(UserPreferenceKeys.WIDE_PORTLETS, "|portlet5|portlet7|portlet6");
SETTINGS.put("portlet1", "setting");
SETTINGS.put("portlet5", "setting");
SETTINGS.put("portlet3", "setting");
SETTINGS.put("portlet8", "setting");
SETTINGS.put("portlet7", "setting");
SETTINGS.put("portlet6", "setting");
final String EXPECTED_NARROW_RESULT = "|portlet1|portlet3";
final String EXPECTED_WIDE_RESULT = "|portlet5|portlet7|portlet6";
final List<String> EXPECTED_SETTING_KEYS = new ArrayList<String>();
EXPECTED_SETTING_KEYS.add(UserPreferenceKeys.NARROW_PORTLETS);
EXPECTED_SETTING_KEYS.add(UserPreferenceKeys.WIDE_PORTLETS);
EXPECTED_SETTING_KEYS.add("portlet1");
EXPECTED_SETTING_KEYS.add("portlet5");
EXPECTED_SETTING_KEYS.add("portlet3");
EXPECTED_SETTING_KEYS.add("portlet7");
EXPECTED_SETTING_KEYS.add("portlet6");
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testRemovePortletFromDashboard(DASHBOARD_ID, PORTLET_NAME, SETTINGS,
EXPECTED_WIDE_RESULT, EXPECTED_NARROW_RESULT, EXPECTED_SETTING_KEYS,
EXPECTED_TO_UPDATE);
}
@Test
public void testRemoveWidePortletFromDashboardPortletExistsMultipleWithTokenWithSettings()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet8_2";
final Map<String, String> SETTINGS = new HashMap<String, String>();
SETTINGS.put(UserPreferenceKeys.NARROW_PORTLETS, "|portlet1|portlet2|portlet3");
SETTINGS.put(UserPreferenceKeys.WIDE_PORTLETS, "|portlet8_2|portlet7|portlet8|portlet8_3");
SETTINGS.put("portlet1", "setting");
SETTINGS.put("portlet2", "setting");
SETTINGS.put("portlet3", "setting");
SETTINGS.put("portlet8", "setting");
SETTINGS.put("portlet8_2", "setting");
SETTINGS.put("portlet8_3", "setting");
SETTINGS.put("portlet7", "setting");
final String EXPECTED_NARROW_RESULT = "|portlet1|portlet2|portlet3";
final String EXPECTED_WIDE_RESULT = "|portlet7|portlet8|portlet8_3";
final List<String> EXPECTED_SETTING_KEYS = new ArrayList<String>();
EXPECTED_SETTING_KEYS.add(UserPreferenceKeys.NARROW_PORTLETS);
EXPECTED_SETTING_KEYS.add(UserPreferenceKeys.WIDE_PORTLETS);
EXPECTED_SETTING_KEYS.add("portlet1");
EXPECTED_SETTING_KEYS.add("portlet2");
EXPECTED_SETTING_KEYS.add("portlet3");
EXPECTED_SETTING_KEYS.add("portlet7");
EXPECTED_SETTING_KEYS.add("portlet8");
EXPECTED_SETTING_KEYS.add("portlet8_3");
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testRemovePortletFromDashboard(DASHBOARD_ID, PORTLET_NAME, SETTINGS,
EXPECTED_WIDE_RESULT, EXPECTED_NARROW_RESULT, EXPECTED_SETTING_KEYS,
EXPECTED_TO_UPDATE);
}
@Test
public void testRemoveNarrowPortletFromDashboardPortletExistsMultipleWithTokenWithSettings()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet8_2";
final Map<String, String> SETTINGS = new HashMap<String, String>();
SETTINGS.put(UserPreferenceKeys.NARROW_PORTLETS, "|portlet1|portlet8_2|portlet8|portlet8_3");
SETTINGS.put(UserPreferenceKeys.WIDE_PORTLETS, "|portlet5|portlet7|portlet6");
SETTINGS.put("portlet1", "setting");
SETTINGS.put("portlet5", "setting");
SETTINGS.put("portlet6", "setting");
SETTINGS.put("portlet8", "setting");
SETTINGS.put("portlet8_2", "setting");
SETTINGS.put("portlet8_3", "setting");
SETTINGS.put("portlet7", "setting");
final String EXPECTED_NARROW_RESULT = "|portlet1|portlet8|portlet8_3";
final String EXPECTED_WIDE_RESULT = "|portlet5|portlet7|portlet6";
final List<String> EXPECTED_SETTING_KEYS = new ArrayList<String>();
EXPECTED_SETTING_KEYS.add(UserPreferenceKeys.NARROW_PORTLETS);
EXPECTED_SETTING_KEYS.add(UserPreferenceKeys.WIDE_PORTLETS);
EXPECTED_SETTING_KEYS.add("portlet1");
EXPECTED_SETTING_KEYS.add("portlet5");
EXPECTED_SETTING_KEYS.add("portlet6");
EXPECTED_SETTING_KEYS.add("portlet7");
EXPECTED_SETTING_KEYS.add("portlet8");
EXPECTED_SETTING_KEYS.add("portlet8_3");
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testRemovePortletFromDashboard(DASHBOARD_ID, PORTLET_NAME, SETTINGS,
EXPECTED_WIDE_RESULT, EXPECTED_NARROW_RESULT, EXPECTED_SETTING_KEYS,
EXPECTED_TO_UPDATE);
}
@Test
public void testRemoveWidePortletFromDashboardPortletExistsMultipleWithoutTokenWithSettings()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet8";
final Map<String, String> SETTINGS = new HashMap<String, String>();
SETTINGS.put(UserPreferenceKeys.NARROW_PORTLETS, "|portlet1|portlet2|portlet3");
SETTINGS.put(UserPreferenceKeys.WIDE_PORTLETS, "|portlet8_2|portlet7|portlet8|portlet8_3");
SETTINGS.put("portlet1", "setting");
SETTINGS.put("portlet2", "setting");
SETTINGS.put("portlet3", "setting");
SETTINGS.put("portlet8", "setting");
SETTINGS.put("portlet8_2", "setting");
SETTINGS.put("portlet8_3", "setting");
SETTINGS.put("portlet7", "setting");
final String EXPECTED_NARROW_RESULT = "|portlet1|portlet2|portlet3";
final String EXPECTED_WIDE_RESULT = "|portlet8_2|portlet7|portlet8_3";
final List<String> EXPECTED_SETTING_KEYS = new ArrayList<String>();
EXPECTED_SETTING_KEYS.add(UserPreferenceKeys.NARROW_PORTLETS);
EXPECTED_SETTING_KEYS.add(UserPreferenceKeys.WIDE_PORTLETS);
EXPECTED_SETTING_KEYS.add("portlet1");
EXPECTED_SETTING_KEYS.add("portlet2");
EXPECTED_SETTING_KEYS.add("portlet3");
EXPECTED_SETTING_KEYS.add("portlet7");
EXPECTED_SETTING_KEYS.add("portlet8_2");
EXPECTED_SETTING_KEYS.add("portlet8_3");
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testRemovePortletFromDashboard(DASHBOARD_ID, PORTLET_NAME, SETTINGS,
EXPECTED_WIDE_RESULT, EXPECTED_NARROW_RESULT, EXPECTED_SETTING_KEYS,
EXPECTED_TO_UPDATE);
}
@Test
public void testRemoveNarrowPortletFromDashboardPortletExistsMultipleWithoutTokenWithSettings()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet8";
final Map<String, String> SETTINGS = new HashMap<String, String>();
SETTINGS.put(UserPreferenceKeys.NARROW_PORTLETS, "|portlet1|portlet8_2|portlet8|portlet8_3");
SETTINGS.put(UserPreferenceKeys.WIDE_PORTLETS, "|portlet5|portlet7|portlet6");
SETTINGS.put("portlet1", "setting");
SETTINGS.put("portlet5", "setting");
SETTINGS.put("portlet6", "setting");
SETTINGS.put("portlet8", "setting");
SETTINGS.put("portlet8_2", "setting");
SETTINGS.put("portlet8_3", "setting");
SETTINGS.put("portlet7", "setting");
final String EXPECTED_NARROW_RESULT = "|portlet1|portlet8_2|portlet8_3";
final String EXPECTED_WIDE_RESULT = "|portlet5|portlet7|portlet6";
final List<String> EXPECTED_SETTING_KEYS = new ArrayList<String>();
EXPECTED_SETTING_KEYS.add(UserPreferenceKeys.NARROW_PORTLETS);
EXPECTED_SETTING_KEYS.add(UserPreferenceKeys.WIDE_PORTLETS);
EXPECTED_SETTING_KEYS.add("portlet1");
EXPECTED_SETTING_KEYS.add("portlet5");
EXPECTED_SETTING_KEYS.add("portlet6");
EXPECTED_SETTING_KEYS.add("portlet7");
EXPECTED_SETTING_KEYS.add("portlet8_2");
EXPECTED_SETTING_KEYS.add("portlet8_3");
final Boolean EXPECTED_TO_UPDATE = Boolean.TRUE;
testRemovePortletFromDashboard(DASHBOARD_ID, PORTLET_NAME, SETTINGS,
EXPECTED_WIDE_RESULT, EXPECTED_NARROW_RESULT, EXPECTED_SETTING_KEYS,
EXPECTED_TO_UPDATE);
}
@Test
public void testRemovePortletFromDashboardPortletDoesNotExist()
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// ...setup inputs and outputs...
final Integer DASHBOARD_ID = 10000;
final String PORTLET_NAME = "portlet8";
final Map<String, String> SETTINGS = new HashMap<String, String>();
SETTINGS.put(UserPreferenceKeys.NARROW_PORTLETS, "|portlet1|portlet2|portlet3");
SETTINGS.put(UserPreferenceKeys.WIDE_PORTLETS, "|portlet5|portlet7|portlet6");
final String EXPECTED_NARROW_RESULT = "|portlet1|portlet2|portlet3";
final String EXPECTED_WIDE_RESULT = "|portlet5|portlet7|portlet6";
final Boolean EXPECTED_TO_UPDATE = Boolean.FALSE;
testRemovePortletFromDashboard(DASHBOARD_ID, PORTLET_NAME, SETTINGS,
EXPECTED_WIDE_RESULT, EXPECTED_NARROW_RESULT, null,
EXPECTED_TO_UPDATE);
}
private void testRemovePortletFromDashboard(Integer dashboardId,
String portletName, Map<String, String> dashboardSettings,
String expectedWideResult, String expectedNarrowResult,
List<String> expectedSettingKeys, Boolean expectedToUpdate)
throws SessionNotFoundException, SessionTimeoutException,
PermissionException {
// Change one of the settings to trigger the conditional logic...
ConfigResponse configResponse = new ConfigResponse(dashboardSettings);
DashboardConfig dashboardConfig = constructDashboardConfig(configResponse);
// ...setup our great expectations...
expect(
mockDashboardManager.findDashboard(eq(dashboardId),
isA(WebUser.class), isA(AuthzBoss.class))).andReturn(
dashboardConfig);
if (expectedToUpdate) {
mockConfigurationProxy.setDashboardPreferences(
isA(HttpSession.class), isA(WebUser.class),
isA(ConfigResponse.class));
expectLastCall();
}
// ...replay those expectations...
replay(mockDashboardManager, mockConfigurationProxy);
// ...test it...
String result = controller.removePortletFromDashboard(dashboardId,
portletName, getMockSession());
// ...verify our expectations...
verify(mockDashboardManager, mockConfigurationProxy);
// ...check the result...
assertEquals("redirect:/app/dashboard/" + dashboardId + "/portlets", result);
assertEquals(configResponse
.getValue(UserPreferenceKeys.NARROW_PORTLETS),
expectedNarrowResult);
assertEquals(configResponse.getValue(UserPreferenceKeys.WIDE_PORTLETS),
expectedWideResult);
if (expectedSettingKeys != null) {
Set<String> settingKeys = configResponse.getKeys();
assertEquals(settingKeys.size(), expectedSettingKeys.size());
for (String settingKey : expectedSettingKeys) {
assertTrue("Should contain settings key [" + settingKey + "]", settingKeys.contains(settingKey));
}
}
}
private void testAddPortletToDashboard(Integer dashboardId,
String portletName, Boolean isWide,
String delimitedDashboardPortlets, String expectedResult,
Boolean expectedToUpdate) throws SessionNotFoundException,
SessionTimeoutException, PermissionException {
// Change one of the settings to trigger the conditional logic...
String userPreferenceKey = (isWide) ? UserPreferenceKeys.WIDE_PORTLETS
: UserPreferenceKeys.NARROW_PORTLETS;
ConfigResponse configResponse = new ConfigResponse();
configResponse.setValue(userPreferenceKey, delimitedDashboardPortlets);
DashboardConfig dashboardConfig = constructDashboardConfig(configResponse);
// ...setup our great expectations...
expect(
mockDashboardManager.findDashboard(eq(dashboardId),
isA(WebUser.class), isA(AuthzBoss.class))).andReturn(
dashboardConfig);
if (expectedToUpdate) {
mockConfigurationProxy.setDashboardPreferences(
isA(HttpSession.class), isA(WebUser.class),
isA(ConfigResponse.class));
expectLastCall();
}
// ...replay those expectations...
replay(mockDashboardManager, mockConfigurationProxy);
// ...test it...
String result = controller.addPortletToDashboard(dashboardId,
portletName, isWide, getMockSession());
// ...verify our expectations...
verify(mockDashboardManager, mockConfigurationProxy);
// ...check the result...
assertEquals("redirect:/Dashboard.do", result);
assertEquals(configResponse.getValue(userPreferenceKey), expectedResult);
}
}