You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mr...@apache.org on 2007/04/20 07:25:44 UTC

svn commit: r530654 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/dispatcher/mapper/Restful2ActionMapper.java test/java/org/apache/struts2/dispatcher/mapper/Restful2ActionMapperTest.java

Author: mrdon
Date: Thu Apr 19 22:25:44 2007
New Revision: 530654

URL: http://svn.apache.org/viewvc?view=rev&rev=530654
Log:
Improve documentation, add more tests, fix put accepting creations
WW-1475

Modified:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/Restful2ActionMapper.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/Restful2ActionMapperTest.java

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/Restful2ActionMapper.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/Restful2ActionMapper.java?view=diff&rev=530654&r1=530653&r2=530654
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/Restful2ActionMapper.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/Restful2ActionMapper.java Thu Apr 19 22:25:44 2007
@@ -58,14 +58,14 @@
  * <p>
  * The following URL's will invoke its methods:
  * </p>
- * <ul>
- *  <li><code>GET:    /movie               => method="index"</code></li>
+ * <ul> 
+ *  <li><code>GET:    /movie                => method="index"</code></li>
  *  <li><code>GET:    /movie/Thrillers      => method="view", id="Thrillers"</code></li>
  *  <li><code>GET:    /movie/Thrillers!edit => method="edit", id="Thrillers"</code></li>
- *  <li><code>GET:    /movie/new           => method="editNew"</code></li>
- *  <li><code>POST:   /movie/Thrillers      => method="create"</code></li>
- *  <li><code>PUT:    /movie/Thrillers      => method="update", id="Thrillers""</code></li>
- *  <li><code>DELETE: /movie/Thrillers      => method="remove"</code></li>
+ *  <li><code>GET:    /movie/new            => method="editNew"</code></li>
+ *  <li><code>POST:   /movie/               => method="create"</code></li>
+ *  <li><code>PUT:    /movie/Thrillers      => method="update", id="Thrillers"</code></li>
+ *  <li><code>DELETE: /movie/Thrillers      => method="remove", id="Thrillers"</code></li>
  * </ul>
  * <p>
  * To simulate the HTTP methods PUT and DELETE, since they aren't supported by HTML,
@@ -83,7 +83,7 @@
 public class Restful2ActionMapper extends DefaultActionMapper {
 
     protected static final Log LOG = LogFactory.getLog(Restful2ActionMapper.class);
-    private static final String HTTP_METHOD_PARAM = "__http_method";
+    public static final String HTTP_METHOD_PARAM = "__http_method";
 
     /*
     * (non-Javadoc)
@@ -116,10 +116,6 @@
                     // Creating a new entry on POST e.g. foo/
                     } else if (isPost(request)) {
                         mapping.setMethod("create");
-                        
-                    // Updating an item e.g. foo/1    
-                    }  else if (isPut(request)) {
-                        mapping.setMethod("update");
                     }
 
                 } else if (lastSlashPos > -1) {
@@ -136,6 +132,10 @@
                     // Removing an item e.g. foo/1
                     } else if (isDelete(request)) {
                         mapping.setMethod("remove");
+                    
+                    // Updating an item e.g. foo/1    
+                    }  else if (isPut(request)) {
+                        mapping.setMethod("update");
                     }
                 }
             }

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/Restful2ActionMapperTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/Restful2ActionMapperTest.java?view=diff&rev=530654&r1=530653&r2=530654
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/Restful2ActionMapperTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/Restful2ActionMapperTest.java Thu Apr 19 22:25:44 2007
@@ -88,18 +88,94 @@
         assertEquals("1", mapping.getParams().get("bar"));
     }
 
-    public void testPutCreate() throws Exception {
+    public void testPostCreate() throws Exception {
         req.setupGetRequestURI("/my/namespace/bar/1/foo/");
         req.setupGetServletPath("/my/namespace/bar/1/foo/");
         req.setupGetAttribute(null);
         req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
-        req.setupGetMethod("PUT");
+        req.setupGetMethod("POST");
 
         ActionMapping mapping = mapper.getMapping(req, configManager);
 
         assertEquals("/my/namespace", mapping.getNamespace());
         assertEquals("foo/", mapping.getName());
+        assertEquals("create", mapping.getMethod());
+        assertEquals(1, mapping.getParams().size());
+        assertEquals("1", mapping.getParams().get("bar"));
+    }
+ 
+    public void testPutUpdate() throws Exception {
+
+        mapper.setSlashesInActionNames("true");
+        req.setupGetRequestURI("/my/namespace/bar/1/foo/2");
+        req.setupGetServletPath("/my/namespace/bar/1/foo/2");
+        req.setupGetAttribute(null);
+        req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
+        req.setupGetMethod("PUT");
+
+        ActionMapping mapping = mapper.getMapping(req, configManager);
+
+        assertEquals("/my/namespace", mapping.getNamespace());
+        assertEquals("foo/2", mapping.getName());
+        assertEquals("update", mapping.getMethod());
+        assertEquals(1, mapping.getParams().size());
+        assertEquals("1", mapping.getParams().get("bar"));
+    }
+
+    public void testPutUpdateWithFakePut() throws Exception {
+
+        mapper.setSlashesInActionNames("true");
+        req.setupGetRequestURI("/my/namespace/bar/1/foo/2");
+        req.setupGetServletPath("/my/namespace/bar/1/foo/2");
+        req.setupAddParameter(Restful2ActionMapper.HTTP_METHOD_PARAM, "put");
+        req.setupAddParameter(Restful2ActionMapper.HTTP_METHOD_PARAM, "put");
+        req.setupGetAttribute(null);
+        req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
+        req.setupGetMethod("POST");
+
+        ActionMapping mapping = mapper.getMapping(req, configManager);
+
+        assertEquals("/my/namespace", mapping.getNamespace());
+        assertEquals("foo/2", mapping.getName());
         assertEquals("update", mapping.getMethod());
+        assertEquals(1, mapping.getParams().size());
+        assertEquals("1", mapping.getParams().get("bar"));
+    }
+
+    public void testDeleteRemove() throws Exception {
+
+        mapper.setSlashesInActionNames("true");
+        req.setupGetRequestURI("/my/namespace/bar/1/foo/2");
+        req.setupGetServletPath("/my/namespace/bar/1/foo/2");
+        req.setupGetAttribute(null);
+        req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
+        req.setupGetMethod("DELETE");
+
+        ActionMapping mapping = mapper.getMapping(req, configManager);
+
+        assertEquals("/my/namespace", mapping.getNamespace());
+        assertEquals("foo/2", mapping.getName());
+        assertEquals("remove", mapping.getMethod());
+        assertEquals(1, mapping.getParams().size());
+        assertEquals("1", mapping.getParams().get("bar"));
+    }
+
+    public void testDeleteRemoveWithFakeDelete() throws Exception {
+
+        mapper.setSlashesInActionNames("true");
+        req.setupGetRequestURI("/my/namespace/bar/1/foo/2");
+        req.setupGetServletPath("/my/namespace/bar/1/foo/2");
+        req.setupAddParameter(Restful2ActionMapper.HTTP_METHOD_PARAM, "DELETE");
+        req.setupAddParameter(Restful2ActionMapper.HTTP_METHOD_PARAM, "DELETE");
+        req.setupGetAttribute(null);
+        req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
+        req.setupGetMethod("POST");
+
+        ActionMapping mapping = mapper.getMapping(req, configManager);
+
+        assertEquals("/my/namespace", mapping.getNamespace());
+        assertEquals("foo/2", mapping.getName());
+        assertEquals("remove", mapping.getMethod());
         assertEquals(1, mapping.getParams().size());
         assertEquals("1", mapping.getParams().get("bar"));
     }