diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.get.desc.xml new file mode 100644 index 0000000000..ebf171a777 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.get.desc.xml @@ -0,0 +1,8 @@ + + Sites + Get a colleciton of the sites in the repository. The collection can be filtered by name and/or site preset. + /api/sites?nf={namefilter?}&spf={sitepresetfilter?} + + guest + required + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.get.js new file mode 100644 index 0000000000..5a7f273ce6 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.get.js @@ -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; \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.get.json.ftl new file mode 100644 index 0000000000..77a270c2ad --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.get.json.ftl @@ -0,0 +1,14 @@ +<#assign first = true/> +[ + <#list sites as site> + <#if first == true><#assign first = false/><#else>, + { + "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")} + } + +] \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.post.desc.xml new file mode 100644 index 0000000000..e91bf752a4 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.post.desc.xml @@ -0,0 +1,8 @@ + + Sites + Creates a new site based on the site preset and details provided. + /api/sites + + guest + required + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.post.js b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.post.js new file mode 100644 index 0000000000..9f3cd4a594 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.post.js @@ -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; \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.post.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.post.json.ftl new file mode 100644 index 0000000000..428223ce33 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.post.json.ftl @@ -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")} +} \ No newline at end of file diff --git a/source/java/org/alfresco/repo/web/scripts/BaseWebScriptTest.java b/source/java/org/alfresco/repo/web/scripts/BaseWebScriptTest.java new file mode 100644 index 0000000000..4a3c0cf95c --- /dev/null +++ b/source/java/org/alfresco/repo/web/scripts/BaseWebScriptTest.java @@ -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; + } + +} diff --git a/source/java/org/alfresco/repo/web/scripts/site/TestSiteService.java b/source/java/org/alfresco/repo/web/scripts/site/TestSiteService.java new file mode 100644 index 0000000000..1957f4b9df --- /dev/null +++ b/source/java/org/alfresco/repo/web/scripts/site/TestSiteService.java @@ -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()); + } + +}