incubator-sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jus...@apache.org
Subject svn commit: r959677 [2/2] - in /sling/trunk: bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/ bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/ bundles/servlets/post/src/main/java/org/apache/sling/servlets/post...
Date Thu, 01 Jul 2010 14:28:46 GMT
Added: sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/post/PostServletVersionableTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/post/PostServletVersionableTest.java?rev=959677&view=auto
==============================================================================
--- sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/post/PostServletVersionableTest.java
(added)
+++ sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/post/PostServletVersionableTest.java
Thu Jul  1 14:28:45 2010
@@ -0,0 +1,726 @@
+/*
+ * 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.sling.launchpad.webapp.integrationtest.servlets.post;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.httpclient.NameValuePair;
+import org.apache.sling.commons.testing.integration.HttpTestBase;
+import org.apache.sling.servlets.post.SlingPostConstants;
+
+/** Test node creation via the PostServlet and versionable nodes */
+public class PostServletVersionableTest extends HttpTestBase {
+    public static final String TEST_BASE_PATH = "/sling-tests";
+    private String postUrl;
+    private Map<String,String> params;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        postUrl = HTTP_BASE_URL + TEST_BASE_PATH + "/" + System.currentTimeMillis();
+        params = new HashMap<String,String>();
+        params.put("jcr:mixinTypes", "mix:versionable");
+    }
+
+   public void testPostPathIsUnique() throws IOException {
+        assertHttpStatus(postUrl, HttpServletResponse.SC_NOT_FOUND,
+                "Path must not exist before test: " + postUrl);
+    }
+
+    public void testCreatedNodeIsCheckedOut() throws IOException {
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        final String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked out.",
+                content.contains("jcr:isCheckedOut: true"));
+
+    }
+
+    public void testAddingVersionableMixInChecksOut() throws IOException {
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
null);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertFalse("Node (" + location + ") isn't versionable.",
+                content.contains("jcr:isCheckedOut"));
+
+        testClient.createNode(location, params);
+        content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked out.",
+                content.contains("jcr:isCheckedOut: true"));
+
+    }
+
+    public void testCreatedNodeIsCheckedInIfRequested() throws IOException {
+        params.put(":checkinNewVersionableNodes", "true");
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        final String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+    }
+
+    public void testAddingVersionableMixInChecksInIfRequested() throws IOException {
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
null);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertFalse("Node (" + location + ") isn't versionable.",
+                content.contains("jcr:isCheckedOut"));
+
+        params.put(":checkinNewVersionableNodes", "true");
+        testClient.createNode(location, params);
+        content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+
+    }
+
+    public void testModifyingACheckedOutNodeDoesntCheckItIn() throws IOException {
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked out.",
+                content.contains("jcr:isCheckedOut: true"));
+
+        params.clear();
+        params.put("name", "value");
+        testClient.createNode(location, params);
+
+        content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node property should have been set.", content.contains("name: value"));
+        assertTrue("Node (" + location + ") should (still) be checked out.",
+                content.contains("jcr:isCheckedOut: true"));
+
+    }
+
+    public void testModifyingACheckedInNodeFailsWithoutAutoCheckout() throws IOException
{
+        params.put(":checkinNewVersionableNodes", "true");
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+
+        List<NameValuePair> testParams = Arrays.asList(new NameValuePair(":autoCheckout",
"false"),
+                new NameValuePair("name", "value"));
+        assertPostStatus(location, 500, testParams, "Attempted modification with :autoCheckout=false
should fail.");
+
+    }
+
+    public void testModifiedNodeIsCheckedInAfterModification() throws IOException {
+        params.put(":checkinNewVersionableNodes", "true");
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+
+        params.clear();
+        params.put("name", "value");
+        testClient.createNode(location, params);
+
+        content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node property should have been set.", content.contains("name: value"));
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+
+    }
+
+    public void testModifiedNodeIsCheckedOutIfRequested() throws IOException {
+        params.put(":checkinNewVersionableNodes", "true");
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+
+        params.clear();
+        params.put("name", "value");
+        params.put(":autoCheckin", "false");
+        testClient.createNode(location, params);
+
+        content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node property should have been set.", content.contains("name: value"));
+        assertTrue("Node (" + location + ") should be checked out.",
+                content.contains("jcr:isCheckedOut: true"));
+
+    }
+
+    public void testCheckingInACheckOutNode() throws IOException {
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked out.",
+                content.contains("jcr:isCheckedOut: true"));
+
+        params.clear();
+        params.put(":operation", "checkin");
+        testClient.createNode(location, params);
+
+        content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+
+    }
+
+    public void testCheckingOutACheckedInNode() throws IOException {
+        params.put(":checkinNewVersionableNodes", "true");
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+
+        params.clear();
+        params.put(":operation", "checkout");
+        testClient.createNode(location, params);
+
+        content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: true"));
+
+    }
+
+    public void testCheckingOutAnAlreadyCheckedOutNodeIsANoOp() throws IOException {
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked out.",
+                content.contains("jcr:isCheckedOut: true"));
+
+        params.clear();
+        params.put(":operation", "checkout");
+        testClient.createNode(location, params);
+
+        content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked out.",
+                content.contains("jcr:isCheckedOut: true"));
+
+    }
+
+    public void testCheckingInAnAlreadyCheckedInNodeIsANoOp() throws IOException {
+        params.put(":checkinNewVersionableNodes", "true");
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+
+        params.clear();
+        params.put(":operation", "checkin");
+        testClient.createNode(location, params);
+
+        content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+
+    }
+
+    public void testDeletingChildNodeOfACheckedInNode() throws IOException {
+        params.put(":checkinNewVersionableNodes", "true");
+        params.put("child/testprop", "testvalue");
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+        assertFalse("Node (" + location + ") shouldn't have a test property.",
+                content.contains("testprop: testvalue"));
+
+        content = getContent(location + "/child.txt", CONTENT_TYPE_PLAIN);
+        assertFalse("Node (" + location + "/child) shouldn't be versionable be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+        assertTrue("Node (" + location + "/child) has a test property. ",
+                content.contains("testprop: testvalue"));
+
+        params.clear();
+        params.put("child@Delete", "");
+        testClient.createNode(location, params);
+
+        content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+
+        assertHttpStatus(location + "/child.txt", 404);
+
+    }
+
+    public void testDeletingChildNodeOfACheckedInNodeByOp() throws IOException {
+        params.put(":checkinNewVersionableNodes", "true");
+        params.put("child/testprop", "testvalue");
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+        assertFalse("Node (" + location + ") shouldn't have a test property.",
+                content.contains("testprop: testvalue"));
+
+        content = getContent(location + "/child.txt", CONTENT_TYPE_PLAIN);
+        assertFalse("Node (" + location + "/child) shouldn't be versionable be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+        assertTrue("Node (" + location + "/child) has a test property. ",
+                content.contains("testprop: testvalue"));
+
+        params.clear();
+        params.put(SlingPostConstants.RP_OPERATION, SlingPostConstants.OPERATION_DELETE);
+        testClient.createNode(location+"/child", params);
+
+        content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+
+        assertHttpStatus(location + "/child.txt", 404);
+
+    }
+
+    public void testDeletingAPropertyOfACheckedInNode() throws IOException {
+        params.put(":checkinNewVersionableNodes", "true");
+        params.put("testprop", "testvalue");
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+        assertTrue("Node (" + location + ") has a test property.",
+                content.contains("testprop: testvalue"));
+
+        params.clear();
+        params.put("testprop@Delete", "");
+        testClient.createNode(location, params);
+
+        content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+        assertFalse("Node (" + location + ") shouldn't have a test property.",
+                content.contains("testprop: testvalue"));
+
+    }
+
+    public void testDeletingAPropertyOfACheckedInNodeFailsWithoutAutoCheckout() throws IOException
{
+        params.put(":checkinNewVersionableNodes", "true");
+        params.put("testprop", "testvalue");
+        final String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
params);
+        assertHttpStatus(location + DEFAULT_EXT, HttpServletResponse.SC_OK,
+                "POST must redirect to created resource (" + location + ")");
+        assertTrue("Node (" + location + ") must have generated name",
+                !location.endsWith("/*"));
+        assertTrue("Node (" + location + ") must created be under POST URL (" + postUrl +
")",
+                location.contains(postUrl + "/"));
+
+        String content = getContent(location + ".txt", CONTENT_TYPE_PLAIN);
+        assertTrue("Node (" + location + ") should be checked in.",
+                content.contains("jcr:isCheckedOut: false"));
+        assertTrue("Node (" + location + ") has a test property.",
+                content.contains("testprop: testvalue"));
+        
+        List<NameValuePair> testParams = Arrays.asList(new NameValuePair(":autoCheckout",
"false"),
+                new NameValuePair("testprop@Delete", ""));
+        
+        assertPostStatus(location, 500, testParams, "Attempted modification with :autoCheckout=false
should fail.");
+
+    }
+    
+    public void testMovingAPropertyOfACheckedInNodeToANewVersionableNode() throws IOException
{
+        params.put(":checkinNewVersionableNodes", "true");
+        params.put("text", "Hello");
+        final String testPath = TEST_BASE_PATH + "/abs/" + System.currentTimeMillis();
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src", params);
+
+        // assert content at source location
+        String oldContent = getContent(HTTP_BASE_URL + testPath + "/src.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", oldContent, "out.println(data.text)");
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+
+        // create dest with text set from src/text
+        params.clear();
+        params.put("jcr:mixinTypes", "mix:versionable");
+        params.put(":checkinNewVersionableNodes", "true");
+        params.put("text@MoveFrom", testPath + "/src/text");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/dest", params);
+
+        // assert content at new location
+        String content = getContent(HTTP_BASE_URL + testPath + "/dest.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", content, "out.println(data.text)");
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+
+        // assert no content at old location
+        oldContent = getContent(HTTP_BASE_URL + testPath + "/src.json", CONTENT_TYPE_JSON);
+        assertJavascript("undefined", oldContent, "out.println(typeof(data.text))");
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+    }
+    
+    public void testMovingAPropertyOfACheckedInNodeToACheckedInNode() throws IOException
{
+        params.put(":checkinNewVersionableNodes", "true");
+        params.put("text", "Hello");
+        final String testPath = TEST_BASE_PATH + "/abs/" + System.currentTimeMillis();
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src", params);
+
+        // assert content at source location
+        String oldContent = getContent(HTTP_BASE_URL + testPath + "/src.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", oldContent, "out.println(data.text)");
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+
+        // create dest
+        params.clear();
+        params.put("jcr:mixinTypes", "mix:versionable");
+        params.put(":checkinNewVersionableNodes", "true");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/dest", params);
+        
+        // assert content at new location
+        String content = getContent(HTTP_BASE_URL + testPath + "/dest.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+
+        params.clear();
+        params.put("text@MoveFrom", testPath + "/src/text");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/dest", params);
+
+        // assert content at new location
+        content = getContent(HTTP_BASE_URL + testPath + "/dest.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", content, "out.println(data.text)");
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+
+        // assert no content at old location
+        oldContent = getContent(HTTP_BASE_URL + testPath + "/src.json", CONTENT_TYPE_JSON);
+        assertJavascript("undefined", oldContent, "out.println(typeof(data.text))");
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+
+    }
+    
+    public void testCopyingAPropertyToACheckedInNode() throws IOException {
+        params.put(":checkinNewVersionableNodes", "true");
+        params.put("text", "Hello");
+        final String testPath = TEST_BASE_PATH + "/abs/" + System.currentTimeMillis();
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src", params);
+
+        // assert content at source location
+        String oldContent = getContent(HTTP_BASE_URL + testPath + "/src.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", oldContent, "out.println(data.text)");
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+
+        // create dest as empty
+        params.put("jcr:mixinTypes", "mix:versionable");
+        params.put(":checkinNewVersionableNodes", "true");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/dest", params);
+        
+        String content = getContent(HTTP_BASE_URL + testPath + "/dest.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", content, "out.println(data['jcr:isCheckedOut'])");
+        
+        // copy text from src/text
+        params.clear();
+        params.put("text@CopyFrom", testPath + "/src/text");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/dest", params);
+
+        // assert content at new location
+        content = getContent(HTTP_BASE_URL + testPath + "/dest.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", content, "out.println(data.text)");
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+
+        // assert content at source location
+        oldContent = getContent(HTTP_BASE_URL + testPath + "/src.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", oldContent, "out.println(data.text)");
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+    }
+    
+    public void testMovingAChildNodeOfACheckedInNodeToANewVersionableNode() throws IOException
{
+        params.put(":checkinNewVersionableNodes", "true");
+        final String testPath = TEST_BASE_PATH + "/abs/" + System.currentTimeMillis();
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src", params);
+        
+        params.clear();
+        params.put("text", "Hello");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src/child", params);
+
+        // assert content at source location
+        String oldContent = getContent(HTTP_BASE_URL + testPath + "/src.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+        assertJavascript("Hello", oldContent, "out.println(data.child.text)");
+
+        // create dest with child from src
+        params.clear();
+        params.put("jcr:mixinTypes", "mix:versionable");
+        params.put(":checkinNewVersionableNodes", "true");
+        params.put("src@MoveFrom", testPath + "/src/child");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/dest", params);
+
+        // assert content at new location
+        String content = getContent(HTTP_BASE_URL + testPath + "/dest.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", content, "out.println(data.src.text)");
+        assertJavascript("false", content, "out.println(data['jcr:isCheckedOut'])");
+
+        // assert no content at old location
+        assertHttpStatus(HTTP_BASE_URL + testPath + "/src/child.json",
+            HttpServletResponse.SC_NOT_FOUND, "Expected Not_Found for old content");
+        oldContent = getContent(HTTP_BASE_URL + testPath + "/src.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+    }
+    
+    public void testMovingAChildNodeOfACheckedInNodeToACheckedInNode() throws IOException
{
+        params.put(":checkinNewVersionableNodes", "true");
+        final String testPath = TEST_BASE_PATH + "/abs/" + System.currentTimeMillis();
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src", params);
+        
+        params.clear();
+        params.put("text", "Hello");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src/child", params);
+
+        // assert content at source location
+        String oldContent = getContent(HTTP_BASE_URL + testPath + "/src.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+        assertJavascript("Hello", oldContent, "out.println(data.child.text)");
+
+        // create dest
+        params.clear();
+        params.put("jcr:mixinTypes", "mix:versionable");
+        params.put(":checkinNewVersionableNodes", "true");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/dest", params);
+        
+        String content = getContent(HTTP_BASE_URL + testPath + "/dest.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", content, "out.println(data['jcr:isCheckedOut'])");
+        
+        // move src child
+        params.clear();
+        params.put("src@MoveFrom", testPath + "/src/child");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/dest", params);
+
+        // assert content at new location
+        content = getContent(HTTP_BASE_URL + testPath + "/dest.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", content, "out.println(data.src.text)");
+        assertJavascript("false", content, "out.println(data['jcr:isCheckedOut'])");
+
+        // assert no content at old location
+        assertHttpStatus(HTTP_BASE_URL + testPath + "/src/child.json",
+            HttpServletResponse.SC_NOT_FOUND, "Expected Not_Found for old content");
+        oldContent = getContent(HTTP_BASE_URL + testPath + "/src.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+    }
+    
+    public void testCopyingANodeToACheckedInNode() throws IOException {
+        params.put(":checkinNewVersionableNodes", "true");
+        final String testPath = TEST_BASE_PATH + "/abs/" + System.currentTimeMillis();
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src", params);
+        
+        params.clear();
+        params.put("text", "Hello");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src/child", params);
+
+        // assert content at source location
+        String oldContent = getContent(HTTP_BASE_URL + testPath + "/src.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+        assertJavascript("Hello", oldContent, "out.println(data.child.text)");
+        
+        // create dest as empty
+        params.put("jcr:mixinTypes", "mix:versionable");
+        params.put(":checkinNewVersionableNodes", "true");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/dest", params);
+        
+        String content = getContent(HTTP_BASE_URL + testPath + "/dest.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+        
+        // copy text from src/text
+        params.clear();
+        params.put("src@CopyFrom", testPath + "/src/child");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/dest", params);
+
+        // assert content at new location
+        content = getContent(HTTP_BASE_URL + testPath + "/dest.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", content, "out.println(data.src.text)");
+        assertJavascript("false", content, "out.println(data['jcr:isCheckedOut'])");
+
+        // assert content at source location
+        oldContent = getContent(HTTP_BASE_URL + testPath + "/src.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", oldContent, "out.println(data.child.text)");
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+    }
+    
+    public void testMovingAChildNodeOfACheckedInNodeToACheckedInNodeByOp() throws IOException
{
+        params.put(":checkinNewVersionableNodes", "true");
+        final String testPath = TEST_BASE_PATH + "/abs/" + System.currentTimeMillis();
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src", params);
+        
+        params.clear();
+        params.put("text", "Hello");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src/child", params);
+
+        // assert content at source location
+        String oldContent = getContent(HTTP_BASE_URL + testPath + "/src.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+        assertJavascript("Hello", oldContent, "out.println(data.child.text)");
+
+        // create dest
+        params.clear();
+        params.put("jcr:mixinTypes", "mix:versionable");
+        params.put(":checkinNewVersionableNodes", "true");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/dest", params);
+        
+        String content = getContent(HTTP_BASE_URL + testPath + "/dest.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", content, "out.println(data['jcr:isCheckedOut'])");
+        
+        // move src child
+        params.clear();
+        params.put(SlingPostConstants.RP_OPERATION, SlingPostConstants.OPERATION_MOVE);
+        params.put(":dest", testPath + "/dest/src");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src/child", params);
+
+        // assert content at new location
+        content = getContent(HTTP_BASE_URL + testPath + "/dest.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", content, "out.println(data.src.text)");
+        assertJavascript("false", content, "out.println(data['jcr:isCheckedOut'])");
+
+        // assert no content at old location
+        assertHttpStatus(HTTP_BASE_URL + testPath + "/src/child.json",
+            HttpServletResponse.SC_NOT_FOUND, "Expected Not_Found for old content");
+        oldContent = getContent(HTTP_BASE_URL + testPath + "/src.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+    }
+    
+    public void testCopyingANodeToACheckedInNodeByOp() throws IOException {
+        params.put(":checkinNewVersionableNodes", "true");
+        final String testPath = TEST_BASE_PATH + "/abs/" + System.currentTimeMillis();
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src", params);
+        
+        params.clear();
+        params.put("text", "Hello");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src/child", params);
+
+        // assert content at source location
+        String oldContent = getContent(HTTP_BASE_URL + testPath + "/src.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+        assertJavascript("Hello", oldContent, "out.println(data.child.text)");
+        
+        // create dest as empty
+        params.put("jcr:mixinTypes", "mix:versionable");
+        params.put(":checkinNewVersionableNodes", "true");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/dest", params);
+        
+        String content = getContent(HTTP_BASE_URL + testPath + "/dest.json", CONTENT_TYPE_JSON);
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+        
+        // copy child from src
+        params.clear();
+        params.put(SlingPostConstants.RP_OPERATION, SlingPostConstants.OPERATION_COPY);
+        params.put(":dest", testPath + "/dest/src");
+        testClient.createNode(HTTP_BASE_URL + testPath + "/src/child", params);
+
+        // assert content at new location
+        content = getContent(HTTP_BASE_URL + testPath + "/dest.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", content, "out.println(data.src.text)");
+        assertJavascript("false", content, "out.println(data['jcr:isCheckedOut'])");
+
+        // assert content at source location
+        oldContent = getContent(HTTP_BASE_URL + testPath + "/src.-1.json", CONTENT_TYPE_JSON);
+        assertJavascript("Hello", oldContent, "out.println(data.child.text)");
+        assertJavascript("false", oldContent, "out.println(data['jcr:isCheckedOut'])");
+    }
+    
+    
+ }
\ No newline at end of file



Mime
View raw message