/*
* Copyright 2015-Present Entando Inc. (http://www.entando.com) 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.agiletec.apsadmin.portal.specialwidget.navigator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.agiletec.aps.system.SystemConstants;
import com.agiletec.aps.system.services.page.IPage;
import com.agiletec.aps.system.services.page.IPageManager;
import com.agiletec.aps.system.services.page.Widget;
import com.agiletec.aps.system.services.page.widget.NavigatorExpression;
import com.agiletec.aps.util.ApsProperties;
import com.agiletec.apsadmin.ApsAdminBaseTestCase;
import com.agiletec.apsadmin.system.ApsAdminSystemConstants;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
/**
* @author E.Santoboni
*/
public class TestNavigatorWidgetConfigAction extends ApsAdminBaseTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
this.init();
}
public void testInitConfigNavigator_1() throws Throwable {
String result = this.executeConfigNavigator("admin", "homepage", "1", "leftmenu");
assertEquals(Action.SUCCESS, result);
NavigatorWidgetConfigAction action = (NavigatorWidgetConfigAction) this.getAction();
Widget widget = action.getWidget();
assertNotNull(widget);
assertEquals(0, widget.getConfig().size());
}
public void testInitConfigNavigator_2() throws Throwable {
String result = this.executeConfigNavigator("admin", "pagina_1", "2", null);
assertEquals(Action.SUCCESS, result);
NavigatorWidgetConfigAction action = (NavigatorWidgetConfigAction) this.getAction();
Widget widget = action.getWidget();
assertNotNull(widget);
ApsProperties props = widget.getConfig();
assertEquals(1, props.size());
assertEquals("abs(1).subtree(2)", props.getProperty("navSpec"));
List<NavigatorExpression> expressions = action.getExpressions();
assertEquals(1, expressions.size());
NavigatorExpression expression = expressions.get(0);
assertEquals(NavigatorExpression.SPEC_ABS_ID, expression.getSpecId());
assertEquals(1, expression.getSpecAbsLevel());
assertEquals(NavigatorExpression.OPERATOR_SUBTREE_ID, expression.getOperatorId());
assertEquals(2, expression.getOperatorSubtreeLevel());
}
public void testExecuteMoveExpression_1() throws Throwable {
Map<String, String> params = new HashMap<String, String>();
params.put("pageCode", "pagina_2");
params.put("frame", "0");
params.put("widgetTypeCode", "leftmenu");
params.put("navSpec", "parent.subtree(2)+abs(1).subtree(2)+current");
params.put("movement", ApsAdminSystemConstants.MOVEMENT_DOWN_CODE);
params.put("expressionIndex", "1");
String result = this.executeMoveExpression("admin", params);
assertEquals(Action.SUCCESS, result);
NavigatorWidgetConfigAction action = (NavigatorWidgetConfigAction) this.getAction();
Widget widget = action.getWidget();
assertNotNull(widget);
ApsProperties props = widget.getConfig();
assertEquals(1, props.size());
assertEquals("parent.subtree(2) + current + abs(1).subtree(2)", props.getProperty("navSpec"));
List<NavigatorExpression> expressions = action.getExpressions();
assertEquals(3, expressions.size());
NavigatorExpression expression1 = expressions.get(1);
assertEquals(NavigatorExpression.SPEC_CURRENT_PAGE_ID, expression1.getSpecId());
assertTrue(expression1.getOperatorId()<0);
}
public void testExecuteMoveExpression_2() throws Throwable {
Map<String, String> params = new HashMap<String, String>();
params.put("pageCode", "pagina_2");
params.put("frame", "0");
params.put("widgetTypeCode", "leftmenu");
params.put("navSpec", "parent.subtree(2)+abs(1).subtree(2)+current");
params.put("movement", ApsAdminSystemConstants.MOVEMENT_UP_CODE);
params.put("expressionIndex", "2");
String result = this.executeMoveExpression("admin", params);
assertEquals(Action.SUCCESS, result);
NavigatorWidgetConfigAction action = (NavigatorWidgetConfigAction) this.getAction();
Widget widget = action.getWidget();
assertNotNull(widget);
ApsProperties props = widget.getConfig();
assertEquals(1, props.size());
assertEquals("parent.subtree(2) + current + abs(1).subtree(2)", props.getProperty("navSpec"));
List<NavigatorExpression> expressions = action.getExpressions();
assertEquals(3, expressions.size());
NavigatorExpression expression1 = expressions.get(1);
assertEquals(NavigatorExpression.SPEC_CURRENT_PAGE_ID, expression1.getSpecId());
assertTrue(expression1.getOperatorId()<0);
}
public void testExecuteMoveExpression_3() throws Throwable {
Map<String, String> params = new HashMap<String, String>();
params.put("pageCode", "pagina_2");
params.put("frame", "0");
params.put("widgetTypeCode", "leftmenu");
params.put("navSpec", "parent.subtree(2)+abs(1).subtree(2)+current");
params.put("movement", ApsAdminSystemConstants.MOVEMENT_UP_CODE);
params.put("expressionIndex", "3");//INDICE SUPERIORE AL SIZE
String result = this.executeMoveExpression("admin", params);
assertEquals(Action.SUCCESS, result);
NavigatorWidgetConfigAction action = (NavigatorWidgetConfigAction) this.getAction();
Widget widget = action.getWidget();
assertNotNull(widget);
ApsProperties props = widget.getConfig();
assertEquals(1, props.size());
assertEquals("parent.subtree(2) + abs(1).subtree(2) + current", props.getProperty("navSpec"));
List<NavigatorExpression> expressions = action.getExpressions();
assertEquals(3, expressions.size());
NavigatorExpression expression2 = expressions.get(2);
assertEquals(NavigatorExpression.SPEC_CURRENT_PAGE_ID, expression2.getSpecId());
assertTrue(expression2.getOperatorId()<0);
}
public void testExecuteRemoveExpression_1() throws Throwable {
Map<String, String> params = new HashMap<String, String>();
params.put("pageCode", "pagina_2");
params.put("frame", "0");
params.put("widgetTypeCode", "leftmenu");
params.put("navSpec", "parent.subtree(2)+abs(1).subtree(2)+current");
params.put("expressionIndex", "1");
String result = this.executeRemoveExpression("admin", params);
assertEquals(Action.SUCCESS, result);
NavigatorWidgetConfigAction action = (NavigatorWidgetConfigAction) this.getAction();
Widget widget = action.getWidget();
assertNotNull(widget);
ApsProperties props = widget.getConfig();
assertEquals(1, props.size());
assertEquals("parent.subtree(2) + current", props.getProperty("navSpec"));
List<NavigatorExpression> expressions = action.getExpressions();
assertEquals(2, expressions.size());
NavigatorExpression expression1 = expressions.get(1);
assertEquals(NavigatorExpression.SPEC_CURRENT_PAGE_ID, expression1.getSpecId());
assertTrue(expression1.getOperatorId()<0);
}
public void testExecuteRemoveExpression_2() throws Throwable {
Map<String, String> params = new HashMap<String, String>();
params.put("pageCode", "pagina_2");
params.put("frame", "0");
params.put("widgetTypeCode", "leftmenu");
params.put("navSpec", "parent.subtree(2)+abs(1).subtree(2)+current");
params.put("expressionIndex", "3");//INDICE SUPERIORE AL SIZE
String result = this.executeRemoveExpression("admin", params);
assertEquals(Action.SUCCESS, result);
NavigatorWidgetConfigAction action = (NavigatorWidgetConfigAction) this.getAction();
Widget widget = action.getWidget();
assertNotNull(widget);
ApsProperties props = widget.getConfig();
assertEquals(1, props.size());
assertEquals("parent.subtree(2) + abs(1).subtree(2) + current", props.getProperty("navSpec"));
List<NavigatorExpression> expressions = action.getExpressions();
assertEquals(3, expressions.size());
NavigatorExpression expression2 = expressions.get(2);
assertEquals(NavigatorExpression.SPEC_CURRENT_PAGE_ID, expression2.getSpecId());
assertTrue(expression2.getOperatorId()<0);
}
public void testFailureAddExpression_1() throws Throwable {
Map<String, String> params = new HashMap<String, String>();
params.put("pageCode", "pagina_2");
params.put("frame", "0");
params.put("widgetTypeCode", "leftmenu");
params.put("navSpec", "parent.subtree(2)+abs(1).subtree(2)+current");
String result = this.executeAddExpression("admin", params);
assertEquals(Action.INPUT, result);
ActionSupport action = this.getAction();
Map<String, List<String>> fieldErrors = action.getFieldErrors();
assertEquals(1, fieldErrors.size());
assertEquals(1, fieldErrors.get("specId").size());
NavigatorWidgetConfigAction navAction = (NavigatorWidgetConfigAction) action;
Widget widget = navAction.getWidget();
assertNotNull(widget);
ApsProperties props = widget.getConfig();
assertEquals(0, props.size());
assertEquals("parent.subtree(2)+abs(1).subtree(2)+current", navAction.getNavSpec());
assertEquals(3, navAction.getExpressions().size());
}
public void testFailureAddExpression_2() throws Throwable {
Map<String, String> params = new HashMap<String, String>();
params.put("pageCode", "pagina_2");
params.put("frame", "0");
params.put("widgetTypeCode", "leftmenu");
params.put("navSpec", "parent.subtree(2)+abs(1).subtree(2)+current");
params.put("specId", "3");
params.put("specSuperLevel", "-2");
String result = this.executeAddExpression("admin", params);
assertEquals(Action.INPUT, result);
ActionSupport action = this.getAction();
assertEquals(1, action.getActionErrors().size());
NavigatorWidgetConfigAction navAction = (NavigatorWidgetConfigAction) action;
Widget widget = navAction.getWidget();
assertNotNull(widget);
ApsProperties props = widget.getConfig();
assertEquals(0, props.size());
assertEquals("parent.subtree(2)+abs(1).subtree(2)+current", navAction.getNavSpec());
assertEquals(3, navAction.getExpressions().size());
}
public void testFailureAddExpression_3() throws Throwable {
Map<String, String> params = new HashMap<String, String>();
params.put("pageCode", "pagina_2");
params.put("frame", "0");
params.put("widgetTypeCode", "leftmenu");
params.put("navSpec", "parent.subtree(2)+current");
params.put("specId", "4");
params.put("specAbsLevel", "-1");
String result = this.executeAddExpression("admin", params);
assertEquals(Action.INPUT, result);
ActionSupport action = this.getAction();
assertEquals(1, action.getActionErrors().size());
NavigatorWidgetConfigAction navAction = (NavigatorWidgetConfigAction) action;
Widget widget = navAction.getWidget();
assertNotNull(widget);
ApsProperties props = widget.getConfig();
assertEquals(0, props.size());
assertEquals("parent.subtree(2)+current", navAction.getNavSpec());
assertEquals(2, navAction.getExpressions().size());
}
public void testFailureAddExpression_4() throws Throwable {
Map<String, String> params = new HashMap<String, String>();
params.put("pageCode", "pagina_2");
params.put("frame", "0");
params.put("widgetTypeCode", "leftmenu");
params.put("navSpec", "");
params.put("specId", "5");
params.put("specCode", " ");
params.put("operatorId", "3");
params.put("operatorSubtreeLevel", "-1");
String result = this.executeAddExpression("admin", params);
assertEquals(Action.INPUT, result);
ActionSupport action = this.getAction();
assertEquals(2, action.getActionErrors().size());
NavigatorWidgetConfigAction navAction = (NavigatorWidgetConfigAction) action;
Widget widget = navAction.getWidget();
assertNotNull(widget);
ApsProperties props = widget.getConfig();
assertEquals(0, props.size());
assertEquals("", navAction.getNavSpec());
assertEquals(0, navAction.getExpressions().size());
}
public void testExecuteAddExpression_1() throws Throwable {
Map<String, String> params = new HashMap<String, String>();
params.put("pageCode", "pagina_2");
params.put("frame", "0");
params.put("widgetTypeCode", "leftmenu");
params.put("navSpec", "abs(1).subtree(2)");
params.put("specId", String.valueOf(NavigatorExpression.SPEC_PARENT_PAGE_ID));
params.put("operatorId", String.valueOf(NavigatorExpression.OPERATOR_CHILDREN_ID));
String result = this.executeAddExpression("admin", params);
assertEquals(Action.SUCCESS, result);
NavigatorWidgetConfigAction action = (NavigatorWidgetConfigAction) this.getAction();
assertEquals("abs(1).subtree(2) + parent.children", action.getNavSpec());
}
public void testExecuteAddExpression_2() throws Throwable {
Map<String, String> params = new HashMap<String, String>();
params.put("pageCode", "pagina_2");
params.put("frame", "0");
params.put("widgetTypeCode", "leftmenu");
params.put("navSpec", "");
params.put("specId", String.valueOf(NavigatorExpression.SPEC_ABS_ID));
params.put("specAbsLevel", "1");
params.put("operatorId", String.valueOf(NavigatorExpression.OPERATOR_SUBTREE_ID));
params.put("operatorSubtreeLevel", "2");
String result = this.executeAddExpression("admin", params);
assertEquals(Action.SUCCESS, result);
NavigatorWidgetConfigAction action = (NavigatorWidgetConfigAction) this.getAction();
assertEquals("abs(1).subtree(2)", action.getNavSpec());
}
public void testSave() throws Throwable {
String pageCode = "pagina_2";
int frame = 0;
IPage page = this._pageManager.getPage(pageCode);
Widget widget = page.getWidgets()[frame];
assertNull(widget);
try {
this.setUserOnSession("admin");
this.initAction("/do/Page/SpecialWidget/Navigator", "saveNavigatorConfig");
this.addParameter("pageCode", pageCode);
this.addParameter("frame", String.valueOf(frame));
this.addParameter("widgetTypeCode", "leftmenu");
this.addParameter("navSpec", "parent.subtree(2)");
String result = this.executeAction();
assertEquals("configure", result);
page = this._pageManager.getPage(pageCode);
widget = page.getWidgets()[frame];
assertNotNull(widget);
assertEquals("leftmenu", widget.getType().getCode());
assertEquals(1, widget.getConfig().size());
assertEquals("parent.subtree(2)", widget.getConfig().getProperty("navSpec"));
} catch (Throwable t) {
throw t;
} finally {
page = this._pageManager.getPage(pageCode);
page.getWidgets()[frame] = null;
this._pageManager.updatePage(page);
}
}
public void testFailureSaveEmptyExpression() throws Throwable {
String pageCode = "pagina_2";
int frame = 0;
IPage page = this._pageManager.getPage(pageCode);
Widget widget = page.getWidgets()[frame];
assertNull(widget);
try {
this.setUserOnSession("admin");
this.initAction("/do/Page/SpecialWidget/Navigator", "saveNavigatorConfig");
this.addParameter("pageCode", pageCode);
this.addParameter("frame", String.valueOf(frame));
this.addParameter("widgetTypeCode", "leftmenu");
this.addParameter("navSpec", "");
String result = this.executeAction();
assertEquals("input", result);
NavigatorWidgetConfigAction action = (NavigatorWidgetConfigAction) this.getAction();
assertEquals(1, action.getActionErrors().size());
} catch (Throwable t) {
throw t;
} finally {
page = this._pageManager.getPage(pageCode);
page.getWidgets()[frame] = null;
this._pageManager.updatePage(page);
}
}
private String executeConfigNavigator(String userName,
String pageCode, String frame, String showletTypeCode) throws Throwable {
this.setUserOnSession(userName);
this.initAction("/do/Page/SpecialWidget", "navigatorConfig");
this.addParameter("pageCode", pageCode);
this.addParameter("frame", frame);
if (null != showletTypeCode && showletTypeCode.trim().length()>0) {
this.addParameter("widgetTypeCode", showletTypeCode);
}
return this.executeAction();
}
private String executeMoveExpression(String userName, Map<String, String> params) throws Throwable {
this.setUserOnSession(userName);
this.initAction("/do/Page/SpecialWidget/Navigator", "moveExpression");
this.addParameters(params);
return this.executeAction();
}
private String executeRemoveExpression(String userName, Map<String, String> params) throws Throwable {
this.setUserOnSession(userName);
this.initAction("/do/Page/SpecialWidget/Navigator", "removeExpression");
this.addParameters(params);
return this.executeAction();
}
private String executeAddExpression(String userName, Map<String, String> params) throws Throwable {
this.setUserOnSession(userName);
this.initAction("/do/Page/SpecialWidget/Navigator", "addExpression");
this.addParameters(params);
String result = null;
try {
result = this.executeAction();
} catch (Throwable t) {
t.printStackTrace();
}
return result;
}
private void init() throws Exception {
try {
this._pageManager = (IPageManager) this.getService(SystemConstants.PAGE_MANAGER);
} catch (Throwable t) {
throw new Exception(t);
}
}
private IPageManager _pageManager = null;
}