Merged BRANCHES/DEV/CLOUDSYNCLOCAL2 to HEAD:

35620: More JUnit Rules Enhancements, covering well known nodes and easier context loading


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@35621 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Nick Burch
2012-04-24 15:00:21 +00:00
parent f71280b165
commit 17ee08366f
3 changed files with 145 additions and 2 deletions

View File

@@ -108,7 +108,7 @@ public class ApplicationContextInit extends ExternalResource
return new ApplicationContextInit(contextsAsArray); return new ApplicationContextInit(contextsAsArray);
} }
@Override protected void before() throws Throwable @Override protected void before()
{ {
// Were any context locations specified in the constructor? // Were any context locations specified in the constructor?
if (configLocations.length > 0) if (configLocations.length > 0)
@@ -144,6 +144,11 @@ public class ApplicationContextInit extends ExternalResource
*/ */
public ApplicationContext getApplicationContext() public ApplicationContext getApplicationContext()
{ {
if (this.appContext == null)
{
// Chain order is wrong, try to help out by doing the @Before now
before();
}
return this.appContext; return this.appContext;
} }

View File

@@ -142,6 +142,24 @@ public class TemporaryNodes extends ExternalResource
* @return the newly created NodeRef. * @return the newly created NodeRef.
*/ */
public NodeRef createNodeWithTextContent(final NodeRef parentNode, final String nodeCmName, final QName nodeType, final String nodeCreator, final String textContent) public NodeRef createNodeWithTextContent(final NodeRef parentNode, final String nodeCmName, final QName nodeType, final String nodeCreator, final String textContent)
{
QName childName = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, nodeCmName);
return createNodeWithTextContent(parentNode, childName, nodeCmName, nodeType, nodeCreator, textContent);
}
/**
* This method creates a NodeRef with some text/plain, UTF-8 content and adds it to the internal list of NodeRefs to be tidied up by the rule.
* This method will be run in its own transaction and will be run with the specified user as the fully authenticated user,
* thus ensuring the named user is the cm:creator of the new node.
*
* @param parentNode the parent node
* @param nodeCmName the cm:name of the new node
* @param nodeType the type of the new node
* @param nodeCreator the username of the person who will create the node
* @param textContent the text/plain, UTF-8 content that will be stored in the node's content. <code>null</code> content will not be written.
* @return the newly created NodeRef.
*/
public NodeRef createNodeWithTextContent(final NodeRef parentNode, final QName childName, final String nodeCmName, final QName nodeType, final String nodeCreator, final String textContent)
{ {
final RetryingTransactionHelper transactionHelper = (RetryingTransactionHelper) appContextRule.getApplicationContext().getBean("retryingTransactionHelper"); final RetryingTransactionHelper transactionHelper = (RetryingTransactionHelper) appContextRule.getApplicationContext().getBean("retryingTransactionHelper");
@@ -156,7 +174,6 @@ public class TemporaryNodes extends ExternalResource
Map<QName, Serializable> props = new HashMap<QName, Serializable>(); Map<QName, Serializable> props = new HashMap<QName, Serializable>();
props.put(ContentModel.PROP_NAME, nodeCmName); props.put(ContentModel.PROP_NAME, nodeCmName);
QName childName = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, nodeCmName);
ChildAssociationRef childAssoc = nodeService.createNode(parentNode, ChildAssociationRef childAssoc = nodeService.createNode(parentNode,
ContentModel.ASSOC_CONTAINS, ContentModel.ASSOC_CONTAINS,
childName, childName,

View File

@@ -0,0 +1,121 @@
/*
* Copyright (C) 2005-2012
Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco 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 3 of the License, or
* (at your option) any later version.
*
* Alfresco 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.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.util.test.junitrules;
import java.util.List;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.model.Repository;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.rules.ExternalResource;
/**
* A JUnit rule designed to help with finding well known nodes
* in the system. It provides functionality similar to
* {@link Repository}, but with extra nodes needed for testing
*
* @author Nick Burch
* @since Odin
*/
public class WellKnownNodes extends ExternalResource
{
private static final Log log = LogFactory.getLog(WellKnownNodes.class);
private final ApplicationContextInit appContextRule;
private final Repository repositoryHelper;
private final NodeService nodeService;
private static QName SYSTEM_FOLDER_QNAME =
QName.createQName(NamespaceService.SYSTEM_MODEL_1_0_URI, "system");
/**
* Constructs the rule with a reference to a {@link ApplicationContextInit rule} which can be used to retrieve the ApplicationContext.
*
* @param appContextRule a rule which can be used to retrieve the spring app context.
*/
public WellKnownNodes(ApplicationContextInit appContextRule)
{
this.appContextRule = appContextRule;
this.repositoryHelper = (Repository)appContextRule.getApplicationContext().getBean("repositoryHelper");
this.nodeService = (NodeService)appContextRule.getApplicationContext().getBean("NodeService");
}
@Override protected void before() throws Throwable
{
// Intentionally empty
}
@Override protected void after()
{
// Intentionally empty
}
/**
* Returns the root of the workspace store
*/
public NodeRef getWorkspaceRoot()
{
return repositoryHelper.getRootHome();
}
/**
* Returns company home
*/
public NodeRef getCompanyHome()
{
return repositoryHelper.getCompanyHome();
}
/**
* Returns the system root
*/
public NodeRef getSystemRoot()
{
NodeRef root = getWorkspaceRoot();
List<ChildAssociationRef> sysRefs = nodeService.getChildAssocs(
root, ContentModel.ASSOC_CHILDREN, SYSTEM_FOLDER_QNAME);
if (sysRefs.size() != 1)
{
throw new IllegalStateException("System folder missing / duplicated! Found " + sysRefs);
}
final NodeRef system = sysRefs.get(0).getChildRef();
return system;
}
/**
* Returns the given System Container
*/
public NodeRef getSystemContainer(QName containerName)
{
NodeRef system = getSystemRoot();
List<ChildAssociationRef> containerRefs = nodeService.getChildAssocs(
system, ContentModel.ASSOC_CHILDREN, containerName);
if (containerRefs.size() != 1)
{
throw new IllegalStateException("System Container " + containerName + " missing / duplicated! Found " + containerRefs);
}
final NodeRef container = containerRefs.get(0).getChildRef();
return container;
}
}