Merged 5.0.N (5.0.3) to HEAD (5.1)

109499: Merged V4.2-BUG-FIX (4.2.6) to 5.0.N (5.0.3)
      109403: Merged DEV to V4.2-BUG-FIX (4.2.6)
         109221 : MNT-12819 : InvalidNodeRefException - Node does not exist, if you call RuleService.removeAllRules(Node) for a folder which has INBOUND rules and OUTBOUND rules.
            - Added a check for existence of rule


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@109581 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Alan Davis
2015-08-05 07:58:59 +00:00
parent f29c220c43
commit d16d3c4516
2 changed files with 119 additions and 8 deletions

View File

@@ -40,10 +40,13 @@ import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransacti
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ActionCondition;
import org.alfresco.service.cmr.action.CompositeAction;
import org.alfresco.service.cmr.model.FileExistsException;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.CyclicChildRelationshipException;
import org.alfresco.service.cmr.repository.InvalidNodeRefException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.rule.Rule;
@@ -58,6 +61,7 @@ import org.alfresco.test_category.BaseSpringTestsCategory;
import org.alfresco.test_category.OwnJVMTestsCategory;
import org.alfresco.util.GUID;
import org.junit.experimental.categories.Category;
import org.junit.Test;
import javax.transaction.UserTransaction;
@@ -452,12 +456,12 @@ public class RuleServiceImplTest extends BaseRuleTest
}
/**
* Helper method to easily create a new node which can be actionable (or not)
*
* @param parent the parent node
*/
private NodeRef createNewNode(NodeRef parent)
{
* Helper method to easily create a new node which can be actionable (or not)
*
* @param parent the parent node
*/
private NodeRef createNewNode(NodeRef parent)
{
return this.nodeService.createNode(parent,
ContentModel.ASSOC_CHILDREN,
QName.createQName("{test}testnode"),
@@ -1413,4 +1417,101 @@ public class RuleServiceImplTest extends BaseRuleTest
this.nodeService.deleteNode(actionedUponNodeRef);
this.nodeService.deleteNode(parentNodeRef);
}
/**
* MNT-12819
* Create two rules: outbound (enabled) and inbound (disabled). Then try to remove them via removeAllRules method.
* @throws SystemException
* @throws NotSupportedException
*/
@Test
public void testRemoveAllRulesForInboundAndOutbound() throws Exception
{
String scriptName = "nothingToDo.js";
createNothingToDoScript(scriptName);
NodeRef storeRootNodeRef = nodeService.getRootNode(new StoreRef("workspace://SpacesStore"));
NodeRef scriptRef = searchService.selectNodes(storeRootNodeRef, "/app:company_home/app:dictionary/app:scripts/cm:"+scriptName, null, namespaceService, false).get(0);
NodeRef folderForRulesRef = this.nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("parentnode" + GUID.generate()), ContentModel.TYPE_FOLDER)
.getChildRef();
try
{
// Create outbound rule for folderForRules
Rule outRule = new Rule();
outRule.setRuleType(RuleType.OUTBOUND);
outRule.setTitle("TestOutRule" + GUID.generate());
outRule.applyToChildren(true);
outRule.setRuleDisabled(false);
outRule.setExecuteAsynchronously(false);
outRule.setAction(createScriptAction());
this.ruleService.saveRule(folderForRulesRef, outRule);
assertNotNull("Rule was not saved", outRule.getNodeRef());
// Create inbound rule for folderForRules
Rule inRule = new Rule();
inRule.setRuleType(RuleType.INBOUND);
inRule.setTitle("TestinRule" + GUID.generate());
inRule.applyToChildren(false);
inRule.setExecuteAsynchronously(false);
inRule.setRuleDisabled(true);
inRule.setAction(createScriptAction());
this.ruleService.saveRule(folderForRulesRef, inRule);
assertNotNull("Rule was not saved", inRule.getNodeRef());
// remove rules
this.ruleService.removeAllRules(folderForRulesRef);
}
catch (InvalidNodeRefException exc)
{
fail("Cannot remove rules from folder");
}
finally
{
this.nodeService.deleteNode(folderForRulesRef);
this.nodeService.deleteNode(scriptRef);
}
}
private void createNothingToDoScript(String scriptName)
{
NodeRef storeRootNodeRef = nodeService.getRootNode(new StoreRef("workspace://SpacesStore"));
NodeRef scriptFolderRef = searchService.selectNodes(storeRootNodeRef, "/app:company_home/app:dictionary/app:scripts", null, namespaceService, false).get(0);
try
{
FileInfo fileInfo = fileFolderService.create(scriptFolderRef, scriptName, ContentModel.TYPE_CONTENT);
ContentWriter writer = fileFolderService.getWriter(fileInfo.getNodeRef());
assertNotNull("Writer is null", writer);
// write some content
String content = "function main(){}\nmain();";
writer.putContent(content);
}
catch (FileExistsException exc)
{
// file was created before
}
}
private Action createScriptAction()
{
// get script nodeRef
NodeRef storeRootNodeRef = nodeService.getRootNode(new StoreRef("workspace://SpacesStore"));
NodeRef scriptRef = searchService.selectNodes(storeRootNodeRef, "/app:company_home/app:dictionary/app:scripts/cm:nothingToDo.js", null, namespaceService, false).get(0);
assertNotNull("NodeRef script is null", scriptRef);
// create action
CompositeAction compositeAction = actionService.createCompositeAction();
// add the action to the rule
Action action = actionService.createAction("script");
Map<String, Serializable> repoActionParams = new HashMap<String, Serializable>();
repoActionParams.put("script-ref", scriptRef);
action.setParameterValues(repoActionParams);
compositeAction.addAction(action);
return compositeAction;
}
}