mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Web Script unit test base class added, helpers for JSON support in web scripts added (JSON reader, JSON error template), update to test webscript server to support easy submit of content, first cut of site service API (JS and HTTP) - create site and listSites available
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@8950 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>Sites</shortname>
|
||||||
|
<description>Get a colleciton of the sites in the repository. The collection can be filtered by name and/or site preset.</description>
|
||||||
|
<url>/api/sites?nf={namefilter?}&spf={sitepresetfilter?}</url>
|
||||||
|
<format default="json"/>
|
||||||
|
<authentication>guest</authentication>
|
||||||
|
<transaction>required</transaction>
|
||||||
|
</webscript>
|
@@ -0,0 +1,9 @@
|
|||||||
|
// Get the filter parameters
|
||||||
|
var nameFilter = args["namefilter"];
|
||||||
|
var sitePreset = args["sitepresetfilter"];
|
||||||
|
|
||||||
|
// Get the list of sites
|
||||||
|
var sites = siteService.listSites(nameFilter, sitePreset);
|
||||||
|
|
||||||
|
// Pass the queried sites to the template
|
||||||
|
model.sites = sites;
|
@@ -0,0 +1,14 @@
|
|||||||
|
<#assign first = true/>
|
||||||
|
[
|
||||||
|
<#list sites as site>
|
||||||
|
<#if first == true><#assign first = false/><#else>,</#if>
|
||||||
|
{
|
||||||
|
"url" : "${url.serviceContext}/api/sites/${site.shortName}",
|
||||||
|
"sitePreset" : "${site.sitePreset}",
|
||||||
|
"shortName" : "${site.shortName}",
|
||||||
|
"title" : "${site.title}",
|
||||||
|
"description" : "${site.description}",
|
||||||
|
"isPublic" : ${site.isPublic?string("true", "false")}
|
||||||
|
}
|
||||||
|
</#list>
|
||||||
|
]
|
@@ -0,0 +1,8 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>Sites</shortname>
|
||||||
|
<description>Creates a new site based on the site preset and details provided.</description>
|
||||||
|
<url>/api/sites</url>
|
||||||
|
<format default="json"/>
|
||||||
|
<authentication>guest</authentication>
|
||||||
|
<transaction>required</transaction>
|
||||||
|
</webscript>
|
@@ -0,0 +1,12 @@
|
|||||||
|
// Get the details of the site
|
||||||
|
var shortName = json.get("shortName");
|
||||||
|
var sitePreset = json.get("sitePreset");
|
||||||
|
var title = json.get("title");
|
||||||
|
var description = json.get("description");
|
||||||
|
var isPublic = json.getBoolean("isPublic");
|
||||||
|
|
||||||
|
// Create the site
|
||||||
|
var site = siteService.createSite(sitePreset, shortName, title, description, isPublic);
|
||||||
|
|
||||||
|
// Put the created site into the model
|
||||||
|
model["site"] = site;
|
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"url" : "${url.serviceContext}/api/sites/${site.shortName}",
|
||||||
|
"sitePreset" : "${site.sitePreset}",
|
||||||
|
"shortName" : "${site.shortName}",
|
||||||
|
"title" : "${site.title}",
|
||||||
|
"description" : "${site.description}",
|
||||||
|
"isPublic" : ${site.isPublic?string("true", "false")}
|
||||||
|
}
|
110
source/java/org/alfresco/repo/web/scripts/BaseWebScriptTest.java
Normal file
110
source/java/org/alfresco/repo/web/scripts/BaseWebScriptTest.java
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2007 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
* This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have recieved a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
package org.alfresco.repo.web.scripts;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.alfresco.web.scripts.TestWebScriptServer;
|
||||||
|
import org.springframework.mock.web.MockHttpServletResponse;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base unit test class for web scripts.
|
||||||
|
*
|
||||||
|
* @author Roy Wetherall
|
||||||
|
*/
|
||||||
|
public abstract class BaseWebScriptTest extends TestCase
|
||||||
|
{
|
||||||
|
/** Standard HTTP method names */
|
||||||
|
protected static final String METHOD_POST = "post";
|
||||||
|
protected static final String METHOD_GET = "get";
|
||||||
|
protected static final String METHOD_PUT = "put";
|
||||||
|
protected static final String METHOD_DELETE = "delete";
|
||||||
|
|
||||||
|
/** Test web script server */
|
||||||
|
private static TestWebScriptServer server = null;
|
||||||
|
|
||||||
|
protected TestWebScriptServer getServer()
|
||||||
|
{
|
||||||
|
if (BaseWebScriptTest.server == null)
|
||||||
|
{
|
||||||
|
BaseWebScriptTest.server = TestWebScriptRepoServer.getTestServer();
|
||||||
|
}
|
||||||
|
return BaseWebScriptTest.server;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* "GET" the url and check for the expected status code
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* @param expectedStatus
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
protected MockHttpServletResponse getRequest(String url, int expectedStatus)
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
return sendRequest(METHOD_GET, url, expectedStatus, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* "POST" the url and check for the expected status code
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* @param expectedStatus
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
protected MockHttpServletResponse postRequest(String url, int expectedStatus, String body, String contentType)
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
return sendRequest(METHOD_POST, url, expectedStatus, body, contentType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param method
|
||||||
|
* @param url
|
||||||
|
* @param expectedStatus
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private MockHttpServletResponse sendRequest(String method, String url, int expectedStatus, String body, String contentType)
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
MockHttpServletResponse response = getServer().submitRequest(method, url, null, body, contentType);
|
||||||
|
if (expectedStatus != response.getStatus())
|
||||||
|
{
|
||||||
|
if (response.getStatus() == 500)
|
||||||
|
{
|
||||||
|
System.out.println(response.getContentAsString());
|
||||||
|
}
|
||||||
|
fail("The expected status code (" + expectedStatus + ") was not returned.");
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2007 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
* This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have recieved a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
package org.alfresco.repo.web.scripts.site;
|
||||||
|
|
||||||
|
import org.alfresco.repo.web.scripts.BaseWebScriptTest;
|
||||||
|
import org.alfresco.util.GUID;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.springframework.mock.web.MockHttpServletResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unit test to test site Web Script API
|
||||||
|
*
|
||||||
|
* @author Roy Wetherall
|
||||||
|
*/
|
||||||
|
public class TestSiteService extends BaseWebScriptTest
|
||||||
|
{
|
||||||
|
private static final String URL_SITES = "/api/sites";
|
||||||
|
|
||||||
|
public void testCreateSite() throws Exception
|
||||||
|
{
|
||||||
|
String shortName = GUID.generate();
|
||||||
|
|
||||||
|
// == Create a new site ==
|
||||||
|
|
||||||
|
JSONObject site = new JSONObject();
|
||||||
|
site.put("sitePreset", "myPreset");
|
||||||
|
site.put("shortName", shortName);
|
||||||
|
site.put("title", "myTitle");
|
||||||
|
site.put("description", "myDescription");
|
||||||
|
site.put("isPublic", true);
|
||||||
|
|
||||||
|
MockHttpServletResponse response = postRequest(URL_SITES, 200, site.toString(), "application/json");
|
||||||
|
|
||||||
|
JSONObject result = new JSONObject(response.getContentAsString());
|
||||||
|
|
||||||
|
assertEquals("myPreset", result.get("sitePreset"));
|
||||||
|
assertEquals(shortName, result.get("shortName"));
|
||||||
|
assertEquals("myTitle", result.get("title"));
|
||||||
|
assertEquals("myDescription", result.get("description"));
|
||||||
|
assertTrue(result.getBoolean("isPublic"));
|
||||||
|
|
||||||
|
// == Create a site with a duplicate shortName ==
|
||||||
|
|
||||||
|
response = postRequest(URL_SITES, 500, site.toString(), "application/json");
|
||||||
|
result = new JSONObject(response.getContentAsString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetSites() throws Exception
|
||||||
|
{
|
||||||
|
// == Test basic GET with no filters ==
|
||||||
|
|
||||||
|
MockHttpServletResponse response = getRequest(URL_SITES, 200);
|
||||||
|
JSONArray result = new JSONArray(response.getContentAsString());
|
||||||
|
|
||||||
|
// TODO formalise this test once i can be sure that i know what's already in the site store
|
||||||
|
// ie: .. i need to clean up after myself in this test
|
||||||
|
|
||||||
|
System.out.println(response.getContentAsString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user