/**
* $Id: EntityActionsManagerTest.java 105077 2012-02-24 22:54:29Z ottenhoff@longsight.com $
* $URL: https://source.sakaiproject.org/svn/entitybroker/trunk/rest/src/test/org/sakaiproject/entitybroker/rest/EntityActionsManagerTest.java $
* EntityActionsManagerTest.java - entity-broker - Jul 27, 2008 6:10:15 PM - azeckoski
**************************************************************************
* Copyright (c) 2008, 2009 The Sakai Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sakaiproject.entitybroker.rest;
import javax.servlet.http.HttpServletResponse;
import junit.framework.TestCase;
import org.sakaiproject.entitybroker.EntityReference;
import org.sakaiproject.entitybroker.EntityView;
import org.sakaiproject.entitybroker.entityprovider.extension.ActionReturn;
import org.sakaiproject.entitybroker.mocks.ActionsDefineableEntityProviderMock;
import org.sakaiproject.entitybroker.mocks.ActionsEntityProviderMock;
import org.sakaiproject.entitybroker.mocks.data.MyEntity;
import org.sakaiproject.entitybroker.mocks.data.TestData;
import org.sakaiproject.entitybroker.rest.EntityActionsManager;
import org.sakaiproject.entitybroker.util.http.EntityHttpServletRequest;
import org.sakaiproject.entitybroker.util.http.EntityHttpServletResponse;
/**
* Test the code which handled entity actions
*
* @author Aaron Zeckoski (azeckoski @ gmail.com)
*/
public class EntityActionsManagerTest extends TestCase {
protected EntityActionsManager entityActionsManager;
private TestData td;
@Override
protected void setUp() throws Exception {
super.setUp();
// setup things
td = new TestData();
entityActionsManager = new ServiceTestManager(td).entityActionsManager;
}
/**
* Test method for {@link org.sakaiproject.entitybroker.rest.EntityActionsManager#handleCustomActionRequest(org.sakaiproject.entitybroker.entityprovider.capabilities.ActionsExecutable, org.sakaiproject.entitybroker.EntityView, java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)}.
*/
public void testHandleCustomActionRequest() {
EntityHttpServletRequest request = null;
EntityHttpServletResponse res = null;
ActionsEntityProviderMock actionProvider = td.entityProviderA1;
String action = null;
String URL = null;
ActionReturn actionReturn = null;
// double
action = "double";
URL = TestData.REFA1 + "/" + action;
MyEntity me = (MyEntity) actionProvider.getEntity( new EntityReference(TestData.REFA1) );
int num = me.getNumber();
request = new EntityHttpServletRequest("GET", URL);
res = new EntityHttpServletResponse();
actionReturn = entityActionsManager.handleCustomActionRequest(actionProvider,
new EntityView(new EntityReference(URL), EntityView.VIEW_SHOW, null), action, request, res, null);
assertEquals(HttpServletResponse.SC_OK, res.getStatus());
assertNotNull(actionReturn);
assertNotNull(actionReturn.entityData);
MyEntity doubleMe = (MyEntity) actionReturn.entityData.getData();
assertEquals(doubleMe.getNumber(), num * 2);
assertEquals(me.getId(), doubleMe.getId());
// xxx
action = "xxx";
URL = TestData.REFA1 + "/" + action;
MyEntity me1 = (MyEntity) actionProvider.getEntity( new EntityReference(TestData.REFA1) );
assertFalse("xxx".equals(me1.extra));
assertFalse("xxx".equals(me1.getStuff()));
actionReturn = entityActionsManager.handleCustomActionRequest(actionProvider,
new EntityView(new EntityReference(URL), EntityView.VIEW_EDIT, null), action, request, res, null);
assertNull(actionReturn);
MyEntity xxxMe = (MyEntity) actionProvider.getEntity( new EntityReference(TestData.REFA1) );
assertEquals(me1.getId(), xxxMe.getId());
assertTrue("xxx".equals(xxxMe.extra));
assertTrue("xxx".equals(xxxMe.getStuff()));
// clear
action = "clear";
URL = TestData.SPACEA1 + "/" + action;
assertEquals(2, actionProvider.myEntities.size());
actionReturn = entityActionsManager.handleCustomActionRequest(actionProvider,
new EntityView(new EntityReference(URL), EntityView.VIEW_NEW, null), action, request, res, null);
assertEquals(0, actionProvider.myEntities.size());
// exceptions
try {
entityActionsManager.handleCustomActionRequest(actionProvider, null, action, request, res, null);
fail("should have thrown exeception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
}
/**
* Test method for {@link org.sakaiproject.entitybroker.rest.EntityActionsManager#handleCustomActionExecution(org.sakaiproject.entitybroker.entityprovider.capabilities.ActionsExecutable, org.sakaiproject.entitybroker.EntityReference, java.lang.String, java.util.Map, java.io.OutputStream)}.
*/
public void testHandleCustomActionExecution() {
// test the double/xxx/clear actions
ActionsEntityProviderMock actionProvider = td.entityProviderA1;
EntityReference ref = new EntityReference(TestData.PREFIXA1, TestData.IDSA1[0]);
// double
MyEntity me = (MyEntity) actionProvider.getEntity( new EntityReference(TestData.REFA1) );
int num = me.getNumber();
ActionReturn actionReturn = entityActionsManager.handleCustomActionExecution(actionProvider, ref, "double", null, null, null, null);
assertNotNull(actionReturn);
assertNotNull(actionReturn.entityData);
MyEntity doubleMe = (MyEntity) actionReturn.entityData.getData();
assertEquals(doubleMe.getNumber(), num * 2);
assertEquals(me.getId(), doubleMe.getId());
// xxx
MyEntity me1 = (MyEntity) actionProvider.getEntity( new EntityReference(TestData.REFA1) );
assertFalse("xxx".equals(me1.extra));
assertFalse("xxx".equals(me1.getStuff()));
actionReturn = entityActionsManager.handleCustomActionExecution(actionProvider, ref, "xxx", null, null, null, null);
assertNull(actionReturn);
MyEntity xxxMe = (MyEntity) actionProvider.getEntity( new EntityReference(TestData.REFA1) );
assertEquals(me1.getId(), xxxMe.getId());
assertTrue("xxx".equals(xxxMe.extra));
assertTrue("xxx".equals(xxxMe.getStuff()));
// clear
assertEquals(2, actionProvider.myEntities.size());
actionReturn = entityActionsManager.handleCustomActionExecution(actionProvider, new EntityReference(TestData.PREFIXA1, ""), "clear", null, null, null, null);
assertEquals(0, actionProvider.myEntities.size());
// check exception when try to execute invalid action
try {
entityActionsManager.handleCustomActionExecution(actionProvider, ref, "NOT_VALID_ACTION", null, null, null, null);
fail("should have thrown exeception");
} catch (UnsupportedOperationException e) {
assertNotNull(e.getMessage());
}
try {
entityActionsManager.handleCustomActionExecution(null, ref, "xxx", null, null, null, null);
fail("should have thrown exeception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
try {
entityActionsManager.handleCustomActionExecution(actionProvider, null, "xxx", null, null, null, null);
fail("should have thrown exeception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
try {
entityActionsManager.handleCustomActionExecution(actionProvider, ref, "", null, null, null, null);
fail("should have thrown exeception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
}
/**
* Ensure that the mock for testing the custom actions works correctly
*/
public void testActionsEntityProviderMock() {
ActionsEntityProviderMock aep = td.entityProviderA1;
// check double operation works
MyEntity me = (MyEntity) aep.getEntity( new EntityReference(TestData.REFA1) );
int num = me.getNumber();
ActionReturn ar = (ActionReturn) aep.doubleCustomAction(new EntityView(new EntityReference(TestData.REFA1), null, null));
MyEntity doubleMe = (MyEntity) ar.entityData.getData();
assertEquals(doubleMe.getNumber(), num * 2);
assertEquals(me.getId(), doubleMe.getId());
// make sure it works twice
ar = (ActionReturn) aep.doubleCustomAction(new EntityView(new EntityReference(TestData.REFA1), null, null));
doubleMe = (MyEntity) ar.entityData.getData();
assertEquals(doubleMe.getNumber(), num * 2);
// test xxx operation
MyEntity me1 = (MyEntity) aep.getEntity( new EntityReference(TestData.REFA1) );
assertFalse("xxx".equals(me1.extra));
assertFalse("xxx".equals(me1.getStuff()));
aep.xxxAction( new EntityReference(TestData.REFA1) );
MyEntity xxxMe = (MyEntity) aep.getEntity( new EntityReference(TestData.REFA1) );
assertEquals(me1.getId(), xxxMe.getId());
assertTrue("xxx".equals(xxxMe.extra));
assertTrue("xxx".equals(xxxMe.getStuff()));
// test clear
assertEquals(2, aep.myEntities.size());
aep.clear();
assertEquals(0, aep.myEntities.size());
}
public void testCustomActions() {
ActionsDefineableEntityProviderMock aep = td.entityProviderA2;
// check double operation works
MyEntity me = (MyEntity) aep.getEntity( new EntityReference(TestData.REFA2) );
int num = me.getNumber();
ActionReturn ar = (ActionReturn) aep.doubleUp(new EntityView(new EntityReference(TestData.REFA2), null, null));
MyEntity doubleMe = (MyEntity) ar.entityData.getData();
assertEquals(doubleMe.getNumber(), num * 2);
assertEquals(me.getId(), doubleMe.getId());
// make sure it works twice
ar = (ActionReturn) aep.doubleUp(new EntityView(new EntityReference(TestData.REFA2), null, null));
doubleMe = (MyEntity) ar.entityData.getData();
assertEquals(doubleMe.getNumber(), num * 2);
// test xxx operation
MyEntity me1 = (MyEntity) aep.getEntity( new EntityReference(TestData.REFA2) );
assertFalse("xxx".equals(me1.extra));
assertFalse("xxx".equals(me1.getStuff()));
aep.xxxChange( new EntityReference(TestData.REFA2) );
MyEntity xxxMe = (MyEntity) aep.getEntity( new EntityReference(TestData.REFA2) );
assertEquals(me1.getId(), xxxMe.getId());
assertTrue("xxx".equals(xxxMe.extra));
assertTrue("xxx".equals(xxxMe.getStuff()));
// test clear
assertEquals(2, aep.myEntities.size());
aep.clearAll();
assertEquals(0, aep.myEntities.size());
}
}