All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.xml2json.TestXml2Json Maven / Gradle / Ivy

Go to download

OpenCms is an enterprise-ready, easy to use website content management system based on Java and XML technology. Offering a complete set of features, OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.

The newest version!
/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * For further information about Alkacon Software, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.xml2json;

import org.opencms.configuration.CmsParameterConfiguration;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsResource;
import org.opencms.file.types.I_CmsResourceType;
import org.opencms.json.JSONObject;
import org.opencms.jsp.util.CmsJspJsonWrapper;
import org.opencms.main.OpenCms;
import org.opencms.test.OpenCmsTestCase;
import org.opencms.test.OpenCmsTestProperties;
import org.opencms.util.CmsStringUtil;
import org.opencms.xml.content.CmsXmlContent;
import org.opencms.xml.content.CmsXmlContentFactory;
import org.opencms.xml.xml2json.CmsJsonAccessPolicy;
import org.opencms.xml.xml2json.CmsJsonResult;
import org.opencms.xml.xml2json.handler.CmsJsonHandlerContext;
import org.opencms.xml.xml2json.handler.CmsJsonHandlerXmlContent;
import org.opencms.xml.xml2json.renderer.CmsJsonRendererXmlContent;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import junit.framework.Test;

/**
 * Tests for the XML2JSON feature.
 */
public class TestXml2Json extends OpenCmsTestCase {

    /** The module path for the test data. */
    public static final String MOD_PATH = "/system/modules/org.opencms.test.xml2json";

    /**
     * Creates a new instance.
     *
     * @param name the name of the test
     */
    public TestXml2Json(String name) {

        super(name);
    }

    /**
     * Returns the test suite.

* * @return the test suite */ public static Test suite() { OpenCmsTestProperties.initialize(org.opencms.test.AllTests.TEST_PROPERTIES_PATH); return generateSetupTestWrapper(TestXml2Json.class, "xml2json", "/", "WEB-INF/xml2json"); } /** * Helper module for generating a full path from the sub-path below the module folder. * * @param subPath the path below the module folder * @return the full path */ static String modPath(String subPath) { return CmsStringUtil.joinPaths(MOD_PATH, subPath); } /** * Test for access policy. * * @throws Exception */ public void testAccessExclude() throws Exception { CmsJsonAccessPolicy access = CmsJsonAccessPolicy.parse(getClass().getResourceAsStream("access-ex.xml")); CmsObject cms = getCmsObject(); assertFalse(access.checkAccess(cms, "/system/foo")); assertFalse(access.checkAccess(cms, "/system/modules/foo")); assertFalse(access.checkAccess(cms, "/shared/foo")); assertTrue(access.checkAccess(cms, "/sites/default/foo")); } /** * Test for access policy. * * @throws Exception */ public void testAccessGroup() throws Exception { CmsObject cms = getCmsObject(); cms.createUser("Test1", "password", "", new HashMap<>()); cms.createGroup("JsonAccessGroup", "", 0, null); CmsJsonAccessPolicy access = CmsJsonAccessPolicy.parse(getClass().getResourceAsStream("access1.xml")); CmsObject otherCms = OpenCms.initCmsObject(cms); otherCms.loginUser("Test1", "password"); assertFalse(access.checkAccess(otherCms, "/foo")); cms.addUserToGroup("Test1", "JsonAccessGroup"); assertTrue(access.checkAccess(otherCms, "/foo")); assertFalse(access.checkAccess(otherCms, "/forbidden/foo")); } /** * Test for access policy. * * @throws Exception */ public void testAccessIncludeExclude() throws Exception { CmsJsonAccessPolicy access = CmsJsonAccessPolicy.parse(getClass().getResourceAsStream("access-in-ex.xml")); CmsObject cms = getCmsObject(); assertTrue(access.checkAccess(cms, "/system/foo")); assertTrue(access.checkAccess(cms, "/shared/foo")); assertFalse(access.checkAccess(cms, "/system/modules/foo")); assertFalse(access.checkAccess(cms, "/sites/default/foo")); } /** * Test case. * * @throws Exception */ public void testChoice() throws Exception { runDataTest("choice-test.xml"); } /** * Tests use of custom XML content renderer. * * @throws Exception */ public void testCustomRenderer() throws Exception { CmsObject cms = getCmsObject(); String folder = "/system/jsontest"; if (cms.existsResource(folder)) { cms.deleteResource(folder, CmsResource.DELETE_PRESERVE_SIBLINGS); } cms.createResource(folder, 0); I_CmsResourceType contentType = OpenCms.getResourceManager().getResourceType("xjparent"); CmsParameterConfiguration data = readXmlTestData(getClass(), "custom-test.xml"); String testFile = folder + "/test.xml"; CmsResource testFileRes = cms.createResource( testFile, contentType, data.get("input").trim().getBytes("UTF-8"), new ArrayList<>()); String expected = new String(data.get("output").trim()); CmsJsonHandlerXmlContent handler = new CmsJsonHandlerXmlContent(); CmsObject rootCms = OpenCms.initCmsObject(cms); Map params = new HashMap<>(); params.put("locale", "en"); CmsJsonHandlerContext context = new CmsJsonHandlerContext( cms, rootCms, testFile, testFileRes, params, new CmsParameterConfiguration(), new CmsJsonAccessPolicy(true)); CmsJsonResult result = handler.renderJson(context); Object jsonObj = result.getJson(); String actual = JSONObject.valueToString(jsonObj, 0, 4); expected = JSONObject.valueToString(new JSONObject(expected), 0, 4); assertEquals(expected, actual); } /** * Test case. * * @throws Exception */ public void testEmpty() throws Exception { runDataTest("empty-test.xml"); } /** * Test case. * * @throws Exception */ public void testRemoveInArray() throws Exception { runRemoveTest("remove-array.xml"); } /** * Test case. * * @throws Exception */ public void testRemoveInvalidType() throws Exception { runRemoveTest("remove-invalid-type.xml"); } /** * Test case. * * @throws Exception */ public void testRemoveSimple() throws Exception { runRemoveTest("remove-simple.xml"); } /** * Test case. * * @throws Exception */ public void testRemoveSuperfluousCharacters() throws Exception { runRemoveTest("remove-superfluous-characters.xml"); } /** * Test case. * * @throws Exception */ public void testRemoveWildcard() throws Exception { runRemoveTest("remove-wildcard.xml"); } /** * Test case. * * @throws Exception */ public void testSimple() throws Exception { runDataTest("simple-test.xml"); } /** * Test case. * * @throws Exception */ public void testTypes() throws Exception { runDataTest("types-test.xml"); } /** * Read XML input and expected output from data file and check if rendered JSON matches expected output. * * @param name the test data file name * @throws Exception */ protected void runDataTest(String name) throws Exception { CmsObject cms = getCmsObject(); String folder = "/system/jsontest"; if (cms.existsResource(folder)) { cms.deleteResource(folder, CmsResource.DELETE_PRESERVE_SIBLINGS); } cms.createResource(folder, 0); I_CmsResourceType contentType = OpenCms.getResourceManager().getResourceType("xjparent"); CmsParameterConfiguration data = readXmlTestData(getClass(), name); String testFile = folder + "/test.xml"; cms.createResource(testFile, contentType, data.get("input").trim().getBytes("UTF-8"), new ArrayList<>()); String expected = new String(data.get("output").trim()); CmsJsonRendererXmlContent renderer = new CmsJsonRendererXmlContent(cms); CmsXmlContent content = CmsXmlContentFactory.unmarshal(cms, cms.readFile(testFile)); Object jsonObj = renderer.render(content, Locale.ENGLISH); String actual = JSONObject.valueToString(jsonObj, 0, 4); expected = JSONObject.valueToString(new JSONObject(expected), 0, 4); assertEquals(expected, actual); } /** * Runs test for JSON path removal with the data file with the given file name. * *

The file contains entries for the JSON input, the path to be removed, and the expected output. * * @param name the test data file name * @throws Exception if something goes wrong */ protected void runRemoveTest(String name) throws Exception { CmsParameterConfiguration data = readXmlTestData(getClass(), name); String inputJson = data.get("input"); String path = data.get("path"); String outputJson = data.get("output"); JSONObject jsonObj = new JSONObject(inputJson); CmsJspJsonWrapper wrapper = new CmsJspJsonWrapper(jsonObj); wrapper.removePath(path); String fmtExpectedJson = JSONObject.valueToString(new JSONObject(outputJson), 0, 4); String fmtActualJson = JSONObject.valueToString(wrapper.getObject(), 0, 4); assertEquals("Failed check in path removal test <" + name + ">", fmtExpectedJson, fmtActualJson); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy