org.apache.jackrabbit.test.api.version.CopyTest Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache 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.apache.org/licenses/LICENSE-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.apache.jackrabbit.test.api.version;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Workspace;
import javax.jcr.version.VersionHistory;
import javax.jcr.version.VersionManager;
import javax.jcr.version.Version;
/**
* CopyTest
checks if full versionable nodes are copied correctly:
*
* 15.1.4 Copying Versionable Nodes and Version Lineage
* Under both simple and full versioning, when an existing versionable node N is
* copied to a new location either in the same workspace or another, and the
* repository preserves the versionable mixin (see 10.7.4 Dropping Mixins on
* Copy):
* - A copy of N, call it M, is created, as usual.
* - A new, empty, version history for M, call it HM, is also created.
*
* Under full versioning:
* - The properties jcr:versionHistory, jcr:baseVersion and
* jcr:predecessors of M are not copied from N but are initialized as usual.
* - The jcr:copiedFrom property of HM is set to point to the base version of N.
*
*/
public class CopyTest extends AbstractVersionTest {
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
// remove copied node
try {
String dstPath = getProperty("destination");
superuser.getNode(dstPath).remove();
testRootNode.getSession().save();
} catch (Exception e) {
log.println("Exception in tearDown: " + e.toString());
} finally {
super.tearDown();
}
}
public void testCopy() throws RepositoryException {
Workspace wsp = superuser.getWorkspace();
VersionManager vMgr = wsp.getVersionManager();
String srcPath = versionableNode.getPath();
String dstPath = getProperty("destination");
wsp.copy(srcPath, dstPath);
// check versionable
Node v = superuser.getNode(dstPath);
assertTrue("Copied Node.isNodeType(mix:cersionable) must return true.",
v.isNodeType(mixVersionable));
// check different version history
VersionHistory vh1 = vMgr.getVersionHistory(srcPath);
VersionHistory vh2 = vMgr.getVersionHistory(dstPath);
assertFalse("Copied node needs a new version history.", vh1.isSame(vh2));
// check if 1 version
assertEquals("Copied node must have 1 version.", 1, getNumberOfVersions(vh2));
// check if jcr:copiedFrom is set correctly
assertTrue("Version history of desination must have a jcr:copiedFrom property", vh2.hasProperty(jcrCopiedFrom));
Node ref = vh2.getProperty(jcrCopiedFrom).getNode();
Version base = vMgr.getBaseVersion(srcPath);
assertTrue("jcr:copiedFrom must point to the base version of the original.", ref.isSame(base));
}
}