diff --git a/magnolia-core/src/test/java/info/magnolia/cms/core/version/BaseVersionManagerTest.java b/magnolia-core/src/test/java/info/magnolia/cms/core/version/BaseVersionManagerTest.java
index f1d4916..45c8456 100644
--- a/magnolia-core/src/test/java/info/magnolia/cms/core/version/BaseVersionManagerTest.java
+++ b/magnolia-core/src/test/java/info/magnolia/cms/core/version/BaseVersionManagerTest.java
@@ -33,10 +33,8 @@
*/
package info.magnolia.cms.core.version;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
+
import info.magnolia.cms.beans.config.ContentRepository;
import info.magnolia.cms.core.ItemType;
import info.magnolia.cms.core.MgnlNodeType;
@@ -54,6 +52,7 @@ import java.util.Collections;
import javax.jcr.LoginException;
import javax.jcr.Node;
+import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.version.Version;
@@ -69,10 +68,10 @@ import org.junit.Test;
public class BaseVersionManagerTest extends RepositoryTestCase {
private static String mgnlMixDeleted = "" + "" + "" + "" + "nt:base"
- + "" + "" + "";
+ + " xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"" + " xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\""
+ + " xmlns:mgnl=\"http://www.magnolia.info/jcr/mgnl\"" + " xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" + "" + "" + "nt:base"
+ + "" + "" + "";
@Override
@Before
@@ -113,6 +112,106 @@ public class BaseVersionManagerTest extends RepositoryTestCase {
}
@Test
+ public void testCreateAndRestoreVersionAndCheckOrder() throws RepositoryException {
+ // GIVEN
+ Session session = MgnlContext.getJCRSession(RepositoryConstants.WEBSITE);
+ VersionManager versionMan = VersionManager.getInstance();
+ Node node = session.getRootNode().addNode("page", MgnlNodeType.NT_PAGE);
+ node.addNode("component0", MgnlNodeType.NT_COMPONENT);
+ node.addNode("component1", MgnlNodeType.NT_COMPONENT);
+ node.addNode("component2", MgnlNodeType.NT_COMPONENT);
+ node.addNode("component3", MgnlNodeType.NT_COMPONENT);
+ Node area = node.addNode("area", MgnlNodeType.NT_AREA);
+ area.addNode("sub0", MgnlNodeType.NT_COMPONENT);
+ area.addNode("sub1", MgnlNodeType.NT_COMPONENT);
+ session.save();
+ Version version = versionMan.addVersion(node);
+
+ Node nodeInVersionWS = versionMan.getVersionedNode(node);
+ // sanity check
+ NodeIterator iterator = nodeInVersionWS.getNodes("compo*");
+ assertEquals("component0", iterator.nextNode().getName());
+ assertEquals("component1", iterator.nextNode().getName());
+ assertEquals("component2", iterator.nextNode().getName());
+ assertEquals("component3", iterator.nextNode().getName());
+ iterator = area.getNodes("sub*");
+ assertEquals("sub0", iterator.nextNode().getName());
+ assertEquals("sub1", iterator.nextNode().getName());
+
+ // WHEN
+ // swap subnodes - put first at the end
+ node.orderBefore("component0", null);
+ // and second before the fourth
+ node.orderBefore("component1", "component3");
+ area.orderBefore("sub0", null);
+ session.save();
+ // sanity check again
+ iterator = node.getNodes("compo*");
+ assertEquals("component2", iterator.nextNode().getName());
+ assertEquals("component1", iterator.nextNode().getName());
+ assertEquals("component3", iterator.nextNode().getName());
+ assertEquals("component0", iterator.nextNode().getName());
+ iterator = area.getNodes("sub*");
+ assertEquals("sub1", iterator.nextNode().getName());
+ assertEquals("sub0", iterator.nextNode().getName());
+
+ // restore
+ node.restore(version.getName(), true);
+
+ // THEN
+ // http://www.day.com/specs/jcr/2.0/23_Orderable_Child_Nodes.html
+ // If a node has orderable child nodes then at any time its child node set has a current order, reflected in the iterator returned by Node.getNodes()(see ยง5.2.2 Iterating Over Child Items). If a node does not have orderable child nodes then the order of nodes returned by Node.getNodes is not guaranteed and may change at any time.
+ iterator = node.getNodes("compo*");
+ assertEquals("component0", iterator.nextNode().getName());
+ assertEquals("component1", iterator.nextNode().getName());
+ iterator = node.getNode("area").getNodes("sub*");
+ assertEquals("sub0", iterator.nextNode().getName());
+ assertEquals("sub1", iterator.nextNode().getName());
+
+ }
+
+ @Test
+ public void testCreateAndRestoreVersionAndCheckOrderBetweenTwoVersions() throws RepositoryException {
+ // GIVEN
+ Session session = MgnlContext.getJCRSession(RepositoryConstants.WEBSITE);
+ VersionManager versionMan = VersionManager.getInstance();
+ Node node = session.getRootNode().addNode("page", MgnlNodeType.NT_PAGE);
+ node.addNode("component0", MgnlNodeType.NT_COMPONENT);
+ node.addNode("component1", MgnlNodeType.NT_COMPONENT);
+ session.save();
+ Version version1 = versionMan.addVersion(node);
+
+ // add 3rd and order on top
+ node.addNode("component2", MgnlNodeType.NT_COMPONENT);
+ node.orderBefore("component2", "component0");
+ session.save();
+ // version again
+ Version version2 = versionMan.addVersion(node);
+
+ // WHEN
+ // restore 1st
+ node.restore(version1.getName(), true);
+
+ // THEN
+ NodeIterator iterator = node.getNodes("compo*");
+ assertEquals("component0", iterator.nextNode().getName());
+ assertEquals("component1", iterator.nextNode().getName());
+ // comp2 is gone
+ assertFalse(iterator.hasNext());
+
+ // WHEN
+ // restore 2ndt
+ node.restore(version2.getName(), true);
+
+ // THEN
+ iterator = node.getNodes("compo*");
+ assertEquals("component2", iterator.nextNode().getName());
+ assertEquals("component0", iterator.nextNode().getName());
+ assertEquals("component1", iterator.nextNode().getName());
+
+ }
+
+ @Test
public void testCreateAndRestoreDeletedVersion() throws RepositoryException {
Provider repoProvider = ContentRepository.getRepositoryProvider(RepositoryConstants.WEBSITE);