Package org.apache.sling.launchpad.webapp.integrationtest.servlets.post

Source Code of org.apache.sling.launchpad.webapp.integrationtest.servlets.post.PostServletPatchTest

/*
* 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 org.apache.sling.commons.testing.integration.HttpTestBase;
import org.apache.sling.commons.testing.integration.NameValuePairList;
import org.apache.sling.servlets.post.SlingPostConstants;

/**
* Integration test of the @Patch method in the post servlet.
*/
public class PostServletPatchTest extends HttpTestBase {
    public static final String TEST_BASE_PATH = "/sling-tests";
    private String postUrl;

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        postUrl = HTTP_BASE_URL + TEST_BASE_PATH + "/" + System.currentTimeMillis();
    }

    public void testPatch() throws Exception {
        final NameValuePairList props = new NameValuePairList();
       
        // 1. create multi-value property
        props.add("prop@TypeHint", "String[]");
        props.add("prop", "alpha");
        props.add("prop", "beta");
        props.add("prop", "beta");
        props.add("prop", "gamma");
        props.add("prop", "epsilon"); // make sure both epsilons are kept, as they are not touched
        props.add("prop", "epsilon"); // by the patch operations below
       
        String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
                props, null, false);
        props.clear();
       
        // 2. update mv prop through Patch method
        props.add("prop@Patch", "true");
        //props.add("prop@TypeHint", "String[]");
        props.add("prop", "-beta")// remove all betas
        props.add("prop", "+delta"); // add one delta
        props.add("prop", "+alpha"); // already exists, do not add a second alpha
       
        testClient.createNode(location, props, null, false);
        String content = getContent(location + ".json", CONTENT_TYPE_JSON);
        assertJavascript("true", content, "out.println(data.prop.length == 5)");
        assertJavascript("alpha", content, "out.println(data.prop[0])");
        assertJavascript("gamma", content, "out.println(data.prop[1])");
        assertJavascript("epsilon", content, "out.println(data.prop[2])");
        assertJavascript("epsilon", content, "out.println(data.prop[3])");
        assertJavascript("delta", content, "out.println(data.prop[4])");
    }

    public void testInvalidPatch() throws Exception {
        final NameValuePairList props = new NameValuePairList();
       
        // 1. create multi-value property
        props.add("prop@TypeHint", "String[]");
        props.add("prop", "alpha");
        props.add("prop", "beta");
        props.add("prop", "gamma");
        props.add("prop", "delta");
       
        String location = testClient.createNode(postUrl + SlingPostConstants.DEFAULT_CREATE_SUFFIX,
                props, null, false);
        props.clear();
       
        // 2. update mv prop through Patch method
        // but use only invalid values
        props.add("prop@Patch", "true");
        props.add("prop", "wrong");
        props.add("prop", "#noop");
       
        testClient.createNode(location, props, null, false);
        String content = getContent(location + ".json", CONTENT_TYPE_JSON);
        assertJavascript("true", content, "out.println(data.prop.length == 4)");
        assertJavascript("alpha", content, "out.println(data.prop[0])");
        assertJavascript("beta", content, "out.println(data.prop[1])");
        assertJavascript("gamma", content, "out.println(data.prop[2])");
        assertJavascript("delta", content, "out.println(data.prop[3])");
    }
}
TOP

Related Classes of org.apache.sling.launchpad.webapp.integrationtest.servlets.post.PostServletPatchTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.