/** * Copyright (C) 2010 eXo Platform SAS. * * This 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 software 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. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xcmis.restatom; import org.everrest.core.impl.ContainerResponse; import org.everrest.core.tools.ByteArrayContainerResponseWriter; import org.w3c.dom.NodeList; import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathFactory; /** * Created by The eXo Platform SAS . * * @author <a href="mailto:alexey.zavizionov@exoplatform.com.ua">Alexey * Zavizionov</a> * @version $Id: RepositoryServiceTest.java 2734 2009-08-19 15:42:18Z andrew00x * $ Jul 20, 2009 */ public class RepositoryServiceTest extends BaseTest { public void testGetRepositories() throws Exception { String requestURI = "http://localhost:8080/rest/cmisatom"; ByteArrayContainerResponseWriter writer = new ByteArrayContainerResponseWriter(); ContainerResponse resp = service("GET", requestURI, "http://localhost:8080/rest", null, null, writer); //printBody(writer.getBody()); assertEquals(200, resp.getStatus()); DocumentBuilderFactory f = DocumentBuilderFactory.newInstance(); f.setNamespaceAware(true); org.w3c.dom.Document xmlDoc = f.newDocumentBuilder().parse(new ByteArrayInputStream(writer.getBody())); NodeList workspaces = getNodeSet("/app:service/app:workspace", xmlDoc); int length = workspaces.getLength(); assertEquals(1, length); for (int i = 0; i < length; i++) { validateWorkspaceElement(workspaces.item(i), true); } } public void testGetRepositoryInfo() throws Exception { String requestURI = "http://localhost:8080/rest" + "/cmisatom/" + cmisRepositoryId; ByteArrayContainerResponseWriter writer = new ByteArrayContainerResponseWriter(); ContainerResponse resp = service("GET", requestURI, "http://localhost:8080/rest", null, null, writer); //printBody(writer.getBody()); assertEquals(200, resp.getStatus()); DocumentBuilderFactory f = DocumentBuilderFactory.newInstance(); f.setNamespaceAware(true); org.w3c.dom.Document xmlDoc = f.newDocumentBuilder().parse(new ByteArrayInputStream(writer.getBody())); org.w3c.dom.Node workspace = getNode("/app:service/app:workspace", xmlDoc); assertEquals(cmisRepositoryId, getStringElement("cmisra:repositoryInfo/cmis:repositoryId", workspace)); validateWorkspaceElement(workspace, false); } public void testCapability() throws Exception { String requestURI = "http://localhost:8080/rest/cmisatom/" + cmisRepositoryId + "/"; ByteArrayContainerResponseWriter writer = new ByteArrayContainerResponseWriter(); ContainerResponse resp = service("GET", requestURI, "http://localhost:8080/rest", null, null, writer); // printBody(writer.getBody()); DocumentBuilderFactory f = DocumentBuilderFactory.newInstance(); f.setNamespaceAware(true); org.w3c.dom.Document xmlDoc = f.newDocumentBuilder().parse(new ByteArrayInputStream(writer.getBody())); XPath xp = XPathFactory.newInstance().newXPath(); xp.setNamespaceContext(new NamespaceResolver()); String capabilities = "/app:service/app:workspace/cmisra:repositoryInfo/cmis:capabilities"; org.w3c.dom.Node capabilitiesNode = getNode(capabilities, xmlDoc); assertTrue("Not found xml element " + "cmis:capabilityACL", hasElementValue("cmis:capabilityACL", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityAllVersionsSearchable", hasElementValue( "cmis:capabilityAllVersionsSearchable", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityChanges", hasElementValue("cmis:capabilityChanges", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityContentStreamUpdatability", hasElementValue( "cmis:capabilityContentStreamUpdatability", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityGetDescendants", hasElementValue( "cmis:capabilityGetDescendants", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityGetFolderTree", hasElementValue( "cmis:capabilityGetFolderTree", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityMultifiling", hasElementValue("cmis:capabilityMultifiling", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityPWCSearchable", hasElementValue( "cmis:capabilityPWCSearchable", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityPWCUpdateable", hasElementValue( "cmis:capabilityPWCUpdateable", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityQuery", hasElementValue("cmis:capabilityQuery", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityRenditions", hasElementValue("cmis:capabilityRenditions", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityUnfiling", hasElementValue("cmis:capabilityUnfiling", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityVersionSpecificFiling", hasElementValue( "cmis:capabilityVersionSpecificFiling", capabilitiesNode)); assertTrue("Not found xml element " + "cmis:capabilityJoin", hasElementValue("cmis:capabilityJoin", capabilitiesNode)); } private void validateWorkspaceElement(org.w3c.dom.Node workspace, boolean isShortInfo) throws Exception { assertTrue("Not found xml element " + "atom:title", hasElementValue("atom:title", workspace)); assertTrue("Not found xml element " + "cmisra:repositoryInfo", hasElementValue("cmisra:repositoryInfo", workspace)); assertTrue("Not found xml element " + "cmisra:repositoryInfo/cmis:repositoryId", hasElementValue( "cmisra:repositoryInfo/cmis:repositoryId", workspace)); assertTrue("Not found xml element " + "cmisra:repositoryInfo/cmis:repositoryName", hasElementValue( "cmisra:repositoryInfo/cmis:repositoryName", workspace)); if (!isShortInfo) { assertTrue("Not found xml element " + "cmisra:repositoryInfo/cmis:cmisVersionSupported", hasElementValue( "cmisra:repositoryInfo/cmis:cmisVersionSupported", workspace)); assertTrue("Not found xml element " + "cmisra:repositoryInfo/cmis:capabilities", hasElementValue( "cmisra:repositoryInfo/cmis:capabilities", workspace)); NodeList templates = getNodeSet("cmisra:uritemplate", workspace); int length = templates.getLength(); List<String> list = new ArrayList<String>(); for (int i = 0; i < length; i++) { org.w3c.dom.Node template = templates.item(i); list.add(getStringElement("cmisra:type", template)); } assertTrue("URI Template 'objectbyid' not found", list.contains("objectbyid")); assertTrue("URI Template 'objectbypath' not found", list.contains("objectbypath")); assertTrue("URI Template 'typebyid' not found", list.contains("typebyid")); } } }