Author: mreutegg
Date: Wed Jul 22 10:21:38 2015
New Revision: 1692250

URL: http://svn.apache.org/r1692250
Log:
OAK-3130: ReferenceEditor may not enforce referential integrity

Add more tests (some ignored for now)

Modified:
    
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java?rev=1692250&r1=1692249&r2=1692250&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java
 Wed Jul 22 10:21:38 2015
@@ -29,6 +29,7 @@ import javax.jcr.Node;
 import javax.jcr.Property;
 import javax.jcr.PropertyIterator;
 import javax.jcr.PropertyType;
+import javax.jcr.ReferentialIntegrityException;
 import javax.jcr.RepositoryException;
 import javax.jcr.Value;
 import javax.jcr.version.Version;
@@ -467,6 +468,75 @@ public class ReferencesTest extends Abst
         checkReferences("ref in version store", ref.getReferences(), 
n.getPath() + "/myref");
     }
 
+    public void testRemoveReferenced1() throws RepositoryException {
+        Node ref = testRootNode.addNode(nodeName1, testNodeType);
+        ref.addMixin(mixReferenceable);
+        superuser.save();
+
+        Node n1 = testRootNode.addNode(nodeName2, testNodeType);
+        n1.setProperty("ref", ref);
+        assertEquals(PropertyType.REFERENCE, n1.getProperty("ref").getType());
+        superuser.save();
+
+        ref.remove();
+        n1.remove();
+        superuser.save();
+    }
+
+    public void testRemoveReferenced2() throws RepositoryException {
+        if (true) {
+            // FIXME OAK-3130
+            return;
+        }
+        Node ref = testRootNode.addNode(nodeName1, testNodeType);
+        ref.addMixin(mixReferenceable);
+        superuser.save();
+
+        Node n1 = testRootNode.addNode(nodeName2, testNodeType);
+        n1.setProperty("ref", ref);
+        assertEquals(PropertyType.REFERENCE, n1.getProperty("ref").getType());
+        Node n2 = testRootNode.addNode(nodeName3, testNodeType);
+        n2.setProperty("ref", ref);
+        assertEquals(PropertyType.REFERENCE, n2.getProperty("ref").getType());
+        superuser.save();
+
+        ref.remove();
+        n1.remove();
+        try {
+            superuser.save();
+            fail("must fail with ReferentialIntegrityException");
+        } catch (ReferentialIntegrityException e) {
+            // expected
+        }
+    }
+
+    public void testRemoveReferenced3() throws RepositoryException {
+        if (true) {
+            // FIXME OAK-3130
+            return;
+        }
+        Node ref = testRootNode.addNode(nodeName1, testNodeType);
+        ref.addMixin(mixReferenceable);
+        superuser.save();
+
+        Node n1 = testRootNode.addNode(nodeName2, testNodeType);
+        n1.setProperty("ref", ref);
+        assertEquals(PropertyType.REFERENCE, n1.getProperty("ref").getType());
+        superuser.save();
+
+        Node n2 = testRootNode.addNode(nodeName3, testNodeType);
+        n2.setProperty("ref", ref);
+        assertEquals(PropertyType.REFERENCE, n2.getProperty("ref").getType());
+        ref.remove();
+        n1.remove();
+        try {
+            superuser.save();
+            fail("must fail with ReferentialIntegrityException");
+        } catch (ReferentialIntegrityException e) {
+            // expected
+        }
+    }
+
     private static void checkReferences(String msg, PropertyIterator refs, 
String ... expected) throws RepositoryException {
         List<String> paths = new LinkedList<String>();
         while (refs.hasNext()) {


Reply via email to