org.apache.jackrabbit.test.api.version.CheckinTest 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.version.Version;
import javax.jcr.version.VersionManager;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.InvalidItemStateException;
import javax.jcr.UnsupportedRepositoryOperationException;
import java.util.Arrays;
/**
* CheckinTest
covers tests related to {@link javax.jcr.Node#checkin()}.
*
*/
public class CheckinTest extends AbstractVersionTest {
protected void setUp() throws Exception {
super.setUp();
VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
String path = versionableNode.getPath();
versionManager.checkout(path);
}
/**
* Test if Node.isCheckedOut() return false after calling Node.checkin()
*
* @throws javax.jcr.RepositoryException
*/
@SuppressWarnings("deprecation")
public void testIsCheckedOut() throws RepositoryException {
versionableNode.checkin();
assertTrue("After calling Node.checkin() on a versionable node N, N.isCheckedOut() must return false", versionableNode.isCheckedOut() == false);
}
/**
* Test if VersionManager.isCheckedOut(P) returns false if P is the
* absolute path of a checked-in versionable node.
*
* @throws javax.jcr.RepositoryException
*/
public void testIsCheckedOutJcr2() throws RepositoryException {
VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
String path = versionableNode.getPath();
versionManager.checkin(path);
assertTrue("VersionManager.isCheckedOut(P) must return false if the path P resolves to a checked-in node.", versionManager.isCheckedOut(path) == false);
}
/**
* Test if the node's jcr:predecessors property contains an empty value array
* after checkin.
*
* @throws RepositoryException
*/
@SuppressWarnings("deprecation")
public void testCheckinRemovesPredecessorProperty() throws RepositoryException {
versionableNode.checkin();
Value[] predecessorsValue = versionableNode.getProperty(jcrPredecessors).getValues();
assertTrue("Checkin must set the node's jcr:predecessors property to the empty array", predecessorsValue.length == 0);
}
/**
* Test if the node's jcr:predecessors property contains an empty value array
* after checkin.
*
* @throws RepositoryException
*/
public void testCheckinRemovesPredecessorPropertyJcr2() throws RepositoryException {
VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
String path = versionableNode.getPath();
versionManager.checkin(path);
Value[] predecessorsValue = versionableNode.getProperty(jcrPredecessors).getValues();
assertTrue("Checkin must set the node's jcr:predecessors property to the empty array", predecessorsValue.length == 0);
}
/**
* Test if the nodes jcr:predecessors property is copied to the new version
* on Node.checkin().
*
* @throws RepositoryException
*/
@SuppressWarnings("deprecation")
public void testPredecessorIsCopiedToNewVersion() throws RepositoryException {
Value[] nPredecessorsValue = versionableNode.getProperty(jcrPredecessors).getValues();
Version v = versionableNode.checkin();
Value[] vPredecessorsValue = v.getProperty(jcrPredecessors).getValues();
assertEquals("The versionable checked-out node's jcr:predecessors property is copied to the new version on checkin.", Arrays.asList(nPredecessorsValue), Arrays.asList(vPredecessorsValue));
}
/**
* Test if the nodes jcr:predecessors property is copied to the new version
* on checkin.
*
* @throws RepositoryException
*/
public void testPredecessorIsCopiedToNewVersionJcr2() throws RepositoryException {
Value[] nPredecessorsValue = versionableNode.getProperty(jcrPredecessors).getValues();
VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
String path = versionableNode.getPath();
Version v = versionManager.checkin(path);
Value[] vPredecessorsValue = v.getProperty(jcrPredecessors).getValues();
assertEquals("The versionable checked-out node's jcr:predecessors property is copied to the new version on checkin.", Arrays.asList(nPredecessorsValue), Arrays.asList(vPredecessorsValue));
}
/**
* Test if Node.checkin() on a checked-in node has no effect.
*
* @throws RepositoryException
*/
@SuppressWarnings("deprecation")
public void testMultipleCheckinHasNoEffect() throws RepositoryException {
Version v = versionableNode.checkin();
try {
Version v2 = versionableNode.checkin();
assertTrue("Calling checkin() on a node that is already checked-in must not have an effect.", v.isSame(v2));
} catch (RepositoryException e) {
fail("Calling checkin() on a node that is already checked-in must not throw an exception.");
}
}
/**
* Test if VersionManager.checkin(P) has no effect if the path P resolves
* to a checked-in node.
*
* @throws RepositoryException
*/
public void testMultipleCheckinHasNoEffectJcr2() throws RepositoryException {
VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
String path = versionableNode.getPath();
Version v = versionManager.checkin(path);
try {
Version v2 = versionManager.checkin(path);
assertTrue("Calling VersionManager.checkin(P) must not have an if the path P resolves to a node that is already checked-in.", v.isSame(v2));
} catch (RepositoryException e) {
fail("Calling VersionManager.checkin(P) must not throw an exception if the path P resolves to a node that is already checked-in.");
}
}
/**
* Test if versionable node N's jcr:baseVersion property is set to refer to
* the new version after checkin.
*
* @throws RepositoryException
*/
@SuppressWarnings("deprecation")
public void testBaseVersionAfterCheckin() throws RepositoryException {
Version v = versionableNode.checkin();
Value baseVersionRef = versionableNode.getProperty(jcrBaseVersion).getValue();
assertEquals("Checked-in node's jcr:baseVersion property is set to refer to the version created on checkin.", superuser.getValueFactory().createValue(v), baseVersionRef);
}
/**
* Test if versionable node N's jcr:baseVersion property is set to refer to
* the new version after checkin.
*
* @throws RepositoryException
*/
public void testBaseVersionAfterCheckinJcr2() throws RepositoryException {
VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
String path = versionableNode.getPath();
Version v = versionManager.checkin(path);
Value baseVersionRef = versionableNode.getProperty(jcrBaseVersion).getValue();
assertEquals("Checked-in node's jcr:baseVersion property is set to refer to the version created on checkin.", superuser.getValueFactory().createValue(v), baseVersionRef);
}
/**
* Test if Node.checkin() throws InvalidItemStateException if the node
* has unsaved changes pending.
*
* @throws RepositoryException
*/
@SuppressWarnings("deprecation")
public void testCheckinWithPendingChanges() throws RepositoryException {
try {
// modify node without calling save()
versionableNode.setProperty(propertyName1, propertyValue);
versionableNode.checkin();
fail("InvalidItemStateException must be thrown on attempt to checkin a node having any unsaved changes pending.");
} catch (InvalidItemStateException e) {
// ok
}
}
/**
* Test if VersionManager.checkin(P) throws InvalidItemStateException if
* the path P resolves to a node that has unsaved changes pending.
*
* @throws RepositoryException
*/
public void testCheckinWithPendingChangesJcr2() throws RepositoryException {
try {
// modify node without calling save()
versionableNode.setProperty(propertyName1, propertyValue);
VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
String path = versionableNode.getPath();
versionManager.checkin(path);
fail("InvalidItemStateException must be thrown on attempt to checkin a node having any unsaved changes pending.");
} catch (InvalidItemStateException e) {
// ok
}
}
/**
* Test if Node.isCheckedOut() returns false after Node.checkin().
*
* @throws RepositoryException
*/
@SuppressWarnings("deprecation")
public void testIsNotCheckedOut() throws RepositoryException {
versionableNode.checkin();
boolean isCheckedOut = versionableNode.isCheckedOut();
assertFalse("Node.isCheckedOut() must return false after Node.checkin().", isCheckedOut);
}
/**
* Test if VersionManager.isCheckedOut(P) returns false after calling VersionManager.checkin(P).
*
* @throws RepositoryException
*/
public void testIsNotCheckedOutJcr2() throws RepositoryException {
VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
String path = versionableNode.getPath();
versionManager.checkin(path);
boolean isCheckedOut = versionManager.isCheckedOut(path);
assertFalse("VersionManager.isCheckedOut(P) must return false after VersionManager.checkin(P).", isCheckedOut);
}
/**
* Test if Node.checkin() adds another version to the VersionHistory
*
* @throws RepositoryException
*/
@SuppressWarnings("deprecation")
public void testCheckinCreatesNewVersion() throws RepositoryException {
long initialNumberOfVersions = getNumberOfVersions(versionableNode.getVersionHistory());
versionableNode.checkin();
long numberOfVersions = getNumberOfVersions(versionableNode.getVersionHistory());
assertTrue("Checkin must create a new Version in the VersionHistory.", numberOfVersions == initialNumberOfVersions + 1);
}
/**
* Test if VersionManager.checkin(String) adds another version to the VersionHistory
*
* @throws RepositoryException
*/
public void testCheckinCreatesNewVersionJcr2() throws RepositoryException {
VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
String path = versionableNode.getPath();
long initialNumberOfVersions = getNumberOfVersions(versionManager.getVersionHistory(path));
versionManager.checkin(path);
long numberOfVersions = getNumberOfVersions(versionManager.getVersionHistory(path));
assertTrue("Checkin must create a new Version in the VersionHistory.", numberOfVersions == initialNumberOfVersions + 1);
}
/**
* Test calling Node.checkin() on a non-versionable node.
*
* @throws RepositoryException
*/
@SuppressWarnings("deprecation")
public void testCheckinNonVersionableNode() throws RepositoryException {
try {
nonVersionableNode.checkin();
fail("Node.checkin() on a non versionable node must throw UnsupportedRepositoryOperationException");
} catch (UnsupportedRepositoryOperationException e) {
//success
}
}
/**
* Test calling VersionManager.checkin(P) with the path P resolving to
* a non-versionable node.
*
* @throws RepositoryException
*/
public void testCheckinNonVersionableNodeJcr2() throws RepositoryException {
try {
VersionManager versionManager = nonVersionableNode.getSession().getWorkspace().getVersionManager();
String path = nonVersionableNode.getPath();
versionManager.checkin(path);
fail("VersionManager.checkin(P) must throw UnsupportedRepositoryOperationException if the path P resolves to a non-versionable node.");
} catch (UnsupportedRepositoryOperationException e) {
//success
}
}
}