[HippoCMS-svn] [20624] ecm/site-toolkit: HSTTWO-882: Improving unit test cases for jax-rs services

View: New views
1 Messages — Rating Filter:   Alert me  

[HippoCMS-svn] [20624] ecm/site-toolkit: HSTTWO-882: Improving unit test cases for jax-rs services

by abogaart :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Revision: 20624
Author:   wko
Date:     2009-11-10 19:56:19 +0100 (Tue, 10 Nov 2009)
Log Message:
-----------
HSTTWO-882: Improving unit test cases for jax-rs services

Modified Paths:
--------------
    ecm/site-toolkit/trunk/testsuite/sandbox/jaxrs/src/main/java/org/hippoecm/hst/services/support/jaxrs/content/ContentService.java
    ecm/site-toolkit/trunk/testsuite/sandbox/jaxrs/src/main/java/org/hippoecm/hst/services/support/jaxrs/content/PropertyContent.java
    ecm/site-toolkit/trunk/testsuite/sandbox/jaxrs/src/test/java/org/hippoecm/hst/services/support/jaxrs/content/TestContentService.java

Modified: ecm/site-toolkit/trunk/testsuite/sandbox/jaxrs/src/main/java/org/hippoecm/hst/services/support/jaxrs/content/ContentService.java
===================================================================
--- ecm/site-toolkit/trunk/testsuite/sandbox/jaxrs/src/main/java/org/hippoecm/hst/services/support/jaxrs/content/ContentService.java 2009-11-10 16:31:43 UTC (rev 20623)
+++ ecm/site-toolkit/trunk/testsuite/sandbox/jaxrs/src/main/java/org/hippoecm/hst/services/support/jaxrs/content/ContentService.java 2009-11-10 18:56:19 UTC (rev 20624)
@@ -21,7 +21,6 @@
 
 import javax.jcr.Item;
 import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
 import javax.jcr.Property;
 import javax.jcr.PropertyType;
 import javax.servlet.http.HttpServletRequest;
@@ -145,14 +144,6 @@
                 cpm.save();
                 return Response.ok(beanContent).build();
             }
-        } catch (PathNotFoundException e) {
-            if (log.isDebugEnabled()) {
-                log.warn("The path is not found: " + itemPath, e);
-            } else {
-                log.warn("The path is not found: {}. {}", itemPath, e.toString());
-            }
-            
-            throw new WebApplicationException(e);
         } catch (Exception e) {
             if (log.isDebugEnabled()) {
                 log.warn("Failed to retrieve content bean.", e);
@@ -213,7 +204,7 @@
     }
     
     @POST
-    @Path("/{path:.*}")
+    @Path("/node/{path:.*}")
     public Response createContentNode(@PathParam("path") List<PathSegment> pathSegments, NodeContent nodeContent) {
         String itemPath = getContentItemPath(servletRequest, pathSegments);
         

Modified: ecm/site-toolkit/trunk/testsuite/sandbox/jaxrs/src/main/java/org/hippoecm/hst/services/support/jaxrs/content/PropertyContent.java
===================================================================
--- ecm/site-toolkit/trunk/testsuite/sandbox/jaxrs/src/main/java/org/hippoecm/hst/services/support/jaxrs/content/PropertyContent.java 2009-11-10 16:31:43 UTC (rev 20623)
+++ ecm/site-toolkit/trunk/testsuite/sandbox/jaxrs/src/main/java/org/hippoecm/hst/services/support/jaxrs/content/PropertyContent.java 2009-11-10 18:56:19 UTC (rev 20624)
@@ -22,6 +22,8 @@
 import javax.jcr.RepositoryException;
 import javax.jcr.Value;
 import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElements;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.slf4j.Logger;
@@ -76,6 +78,7 @@
         this.multiple = multiple;
     }
     
+    @XmlElements(@XmlElement(name="value"))
     public Object [] getValues() {
         return values;
     }

Modified: ecm/site-toolkit/trunk/testsuite/sandbox/jaxrs/src/test/java/org/hippoecm/hst/services/support/jaxrs/content/TestContentService.java
===================================================================
--- ecm/site-toolkit/trunk/testsuite/sandbox/jaxrs/src/test/java/org/hippoecm/hst/services/support/jaxrs/content/TestContentService.java 2009-11-10 16:31:43 UTC (rev 20623)
+++ ecm/site-toolkit/trunk/testsuite/sandbox/jaxrs/src/test/java/org/hippoecm/hst/services/support/jaxrs/content/TestContentService.java 2009-11-10 18:56:19 UTC (rev 20624)
@@ -16,15 +16,27 @@
 package org.hippoecm.hst.services.support.jaxrs.content;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-import java.io.IOException;
+import java.io.ByteArrayInputStream;
+import java.lang.reflect.Method;
 
-import javax.servlet.ServletException;
+import javax.jcr.Session;
 import javax.servlet.http.HttpServlet;
+import javax.ws.rs.core.Response;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathFactory;
 
+import org.apache.commons.proxy.Invoker;
 import org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet;
+import org.hippoecm.hst.core.container.ContainerConstants;
+import org.hippoecm.hst.core.request.HstRequestContext;
+import org.hippoecm.hst.proxy.ProxyFactory;
+import org.hippoecm.hst.test.AbstractHstTestCase;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -32,15 +44,23 @@
 import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.mock.web.MockServletConfig;
 import org.springframework.mock.web.MockServletContext;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
-public class TestContentService {
-
+public class TestContentService extends AbstractHstTestCase {
+    
+    private static final String PREVIEW_SITE_CONTENT_PATH = "/testpreview/testproject/hst:content";
+    
     private MockServletContext servletContext;
     private MockServletConfig servletConfig;
     private HttpServlet jaxrsServlet;
+    private Session session;
+    private HstRequestContext hstRequestContext;
     
     @Before
-    public void setUp() throws ServletException {
+    public void setUp() throws Exception {
+        super.setUp();
+        
         jaxrsServlet = new CXFNonSpringJaxrsServlet();
         
         servletContext = new MockServletContext();
@@ -51,18 +71,42 @@
         servletConfig.addInitParameter("jaxrs.serviceClasses", "org.hippoecm.hst.services.support.jaxrs.demo.CustomerService org.hippoecm.hst.services.support.jaxrs.content.ContentService");
         
         jaxrsServlet.init(servletConfig);
+        
+        session = getSession();
+        
+        assertNotNull(session);
+        
+        ProxyFactory factory = new ProxyFactory();
+        Invoker invoker = new Invoker() {
+            public Object invoke(Object proxy, Method method, Object [] args) throws Throwable {
+                if ("getSession".equals(method.getName())) {
+                    return session;
+                }
+                throw new UnsupportedOperationException("Unsupported: " + method);
+            }
+        };
+        
+        hstRequestContext = (HstRequestContext) factory.createInvokerProxy(Thread.currentThread().getContextClassLoader(), invoker, new Class [] { HstRequestContext.class });
     }
     
     @After
-    public void tearDown() {
+    public void tearDown() throws Exception {
+        super.tearDown();
+        
+        if (session != null) {
+            try {
+                session.logout();
+            } catch (Exception ignore) {
+            }
+        }
+        
         jaxrsServlet.destroy();
     }
     
     @Test
-    public void testDemo() throws ServletException, IOException {
+    public void testDemo() throws Exception {
         // retrieves customer json data...
         MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
-        MockHttpServletResponse response = new MockHttpServletResponse();
         request.setProtocol("http");
         request.setServerName("localhost");
         request.setServerPort(8085);
@@ -71,16 +115,17 @@
         request.setContextPath("/testapp");
         request.setServletPath("/preview/services");
         request.setPathInfo("/customerservice/customers/123/");
+        
+        MockHttpServletResponse response = new MockHttpServletResponse();
 
         jaxrsServlet.service(request, response);
         
-        assertEquals(200, response.getStatus());
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
         assertNotNull(response.getContentAsString());
         assertEquals("{\"Customer\":{\"id\":123,\"name\":\"John\"}}", response.getContentAsString());
         
         // updating the existing customer...
         request = new MockHttpServletRequest(servletContext);
-        response = new MockHttpServletResponse();
         request.setProtocol("http");
         request.setServerName("localhost");
         request.setServerPort(8085);
@@ -96,11 +141,10 @@
         
         jaxrsServlet.service(request, response);
         
-        assertEquals(200, response.getStatus());
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
         
         // adding a new customer...
         request = new MockHttpServletRequest(servletContext);
-        response = new MockHttpServletResponse();
         request.setProtocol("http");
         request.setServerName("localhost");
         request.setServerPort(8085);
@@ -116,14 +160,13 @@
         
         jaxrsServlet.service(request, response);
         
-        assertEquals(200, response.getStatus());
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
         assertNotNull(response.getContentAsString());
         assertTrue(response.getContentAsString().startsWith("{\"Customer\":"));
         assertTrue(response.getContentAsString().contains("\"name\":\"Jisung Park\""));
         
         // deleting a new customer...
         request = new MockHttpServletRequest(servletContext);
-        response = new MockHttpServletResponse();
         request.setProtocol("http");
         request.setServerName("localhost");
         request.setServerPort(8085);
@@ -133,40 +176,172 @@
         request.setServletPath("/preview/services");
         request.setPathInfo("/customerservice/customers/123/");
 
-        response = new MockHttpServletResponse();
+        response = new MockHttpServletResponse ();
         
         jaxrsServlet.service(request, response);
         
-        assertEquals(200, response.getStatus());
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
     }
     
     @Test
-    public void testGetContentNodeByUUID() throws ServletException, IOException {
-        // TODO:
+    public void testGetContentNodeByUUID() throws Exception {
+        MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
+        request.setAttribute(ContainerConstants.HST_REQUEST_CONTEXT, hstRequestContext);
+        request.setAttribute(BaseHstContentService.SITE_CONTENT_PATH, PREVIEW_SITE_CONTENT_PATH);
+        request.setProtocol("http");
+        request.setServerName("localhost");
+        request.setServerPort(8085);
+        request.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
+        request.setMethod("GET");
+        request.setRequestURI("/testapp/preview/services/contentservice/uuid/abababab-5fa8-48a8-b03b-4524373d992a/");
+        request.setContextPath("/testapp");
+        request.setServletPath("/preview/services");
+        request.setPathInfo("/contentservice/uuid/abababab-5fa8-48a8-b03b-4524373d992a/");
+        
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        
+        jaxrsServlet.service(request, response);
+        
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+        
+        Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(response.getContentAsByteArray()));
+        Element root = document.getDocumentElement();
+        assertEquals("folder", root.getNodeName());
+        assertEquals("abababab-5fa8-48a8-b03b-4524373d992a", root.getAttribute("uuid"));
     }
     
     @Test
-    public void testGetContentItem() throws ServletException, IOException {
-        // TODO:
+    public void testGetContentItem() throws Exception {
+        MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
+        request.setAttribute(ContainerConstants.HST_REQUEST_CONTEXT, hstRequestContext);
+        request.setAttribute(BaseHstContentService.SITE_CONTENT_PATH, PREVIEW_SITE_CONTENT_PATH);
+        request.setProtocol("http");
+        request.setServerName("localhost");
+        request.setServerPort(8085);
+        request.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
+        request.setMethod("GET");
+        request.setRequestURI("/testapp/preview/services/contentservice/Products/HippoCMS");
+        request.setContextPath("/testapp");
+        request.setServletPath("/preview/services");
+        request.setPathInfo("/contentservice/Products/HippoCMS");
+        
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        
+        jaxrsServlet.service(request, response);
+        
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+        Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(response.getContentAsByteArray()));
+        Element root = document.getDocumentElement();
+        assertEquals("document", root.getNodeName());
+        
+        XPath xpath = XPathFactory.newInstance().newXPath();
+        XPathExpression expr = xpath.compile("string(/document/node[@name='testproject:body']/@uri)");
+        assertEquals("http://localhost:8085/testapp/preview/services/contentservice/Products/HippoCMS/HippoCMS/testproject:body",
+                expr.evaluate(document));
+        expr = xpath.compile("string(/document/property[@name='testproject:title']/@uri)");
+        assertEquals("http://localhost:8085/testapp/preview/services/contentservice/Products/HippoCMS/HippoCMS/testproject:title",
+                expr.evaluate(document));
+        
+        request = new MockHttpServletRequest(servletContext);
+        request.setAttribute(ContainerConstants.HST_REQUEST_CONTEXT, hstRequestContext);
+        request.setAttribute(BaseHstContentService.SITE_CONTENT_PATH, PREVIEW_SITE_CONTENT_PATH);
+        request.setProtocol("http");
+        request.setServerName("localhost");
+        request.setServerPort(8085);
+        request.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
+        request.setMethod("GET");
+        request.setRequestURI("/testapp/preview/services/contentservice/Products/HippoCMS/HippoCMS/testproject:title");
+        request.setContextPath("/testapp");
+        request.setServletPath("/preview/services");
+        request.setPathInfo("/contentservice/Products/HippoCMS/HippoCMS/testproject:title");
+        
+        response = new MockHttpServletResponse();
+        
+        jaxrsServlet.service(request, response);
+        
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+        document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(response.getContentAsByteArray()));
+        root = document.getDocumentElement();
+        assertEquals("property", root.getNodeName());
+        expr = xpath.compile("string(/property/value)");
+        assertEquals("Hippo CMS", expr.evaluate(document));
+        
+        request = new MockHttpServletRequest(servletContext);
+        request.setAttribute(ContainerConstants.HST_REQUEST_CONTEXT, hstRequestContext);
+        request.setAttribute(BaseHstContentService.SITE_CONTENT_PATH, PREVIEW_SITE_CONTENT_PATH);
+        request.setProtocol("http");
+        request.setServerName("localhost");
+        request.setServerPort(8085);
+        request.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
+        request.setMethod("GET");
+        request.setRequestURI("/testapp/preview/services/contentservice/Products/HippoCMS/HippoCMS/testproject:body");
+        request.setContextPath("/testapp");
+        request.setServletPath("/preview/services");
+        request.setPathInfo("/contentservice/Products/HippoCMS/HippoCMS/testproject:body");
+        
+        response = new MockHttpServletResponse();
+        
+        jaxrsServlet.service(request, response);
+        
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+        document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(response.getContentAsByteArray()));
+        root = document.getDocumentElement();
+        assertEquals("content", root.getNodeName());
     }
     
     @Test
-    public void testDeleteContentNode() throws ServletException, IOException {
-        // TODO:
+    public void testDeleteContentNode() throws Exception {
+        MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
+        request.setAttribute(ContainerConstants.HST_REQUEST_CONTEXT, hstRequestContext);
+        request.setAttribute(BaseHstContentService.SITE_CONTENT_PATH, PREVIEW_SITE_CONTENT_PATH);
+        request.setProtocol("http");
+        request.setServerName("localhost");
+        request.setServerPort(8085);
+        request.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
+        request.setMethod("DELETE");
+        request.setRequestURI("/testapp/preview/services/contentservice/Solutions/SolutionsPage");
+        request.setContextPath("/testapp");
+        request.setServletPath("/preview/services");
+        request.setPathInfo("/contentservice/Solutions/SolutionsPage");
+        
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        
+        jaxrsServlet.service(request, response);
+        
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+        
+        request = new MockHttpServletRequest(servletContext);
+        request.setAttribute(ContainerConstants.HST_REQUEST_CONTEXT, hstRequestContext);
+        request.setAttribute(BaseHstContentService.SITE_CONTENT_PATH, PREVIEW_SITE_CONTENT_PATH);
+        request.setProtocol("http");
+        request.setServerName("localhost");
+        request.setServerPort(8085);
+        request.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
+        request.setMethod("GET");
+        request.setRequestURI("/testapp/preview/services/contentservice/Solutions/SolutionsPage");
+        request.setContextPath("/testapp");
+        request.setServletPath("/preview/services");
+        request.setPathInfo("/contentservice/Solutions/SolutionsPage");
+        
+        response = new MockHttpServletResponse();
+        
+        jaxrsServlet.service(request, response);
+
+        assertFalse(Response.Status.OK.getStatusCode() == response.getStatus());
     }
     
     @Test
-    public void testCreateContentDocument() throws ServletException, IOException {
+    public void testCreateContentDocument() throws Exception {
         // TODO:
     }
     
     @Test
-    public void testCreateContentNode() throws ServletException, IOException {
+    public void testCreateContentNode() throws Exception {
         // TODO:
     }
     
     @Test
-    public void testSetContentProperty() throws ServletException, IOException {
+    public void testUpdateContentItem() throws Exception {
         // TODO:
     }
     

_______________________________________________
Hippocms-svn mailing list
Hippocms-svn@...
http://lists.hippo.nl/mailman/listinfo/hippocms-svn