diff --git a/source/test-java/org/alfresco/repo/web/scripts/wiki/WikiRestApiTest.java b/source/test-java/org/alfresco/repo/web/scripts/wiki/WikiRestApiTest.java
deleted file mode 100644
index c48599acee..0000000000
--- a/source/test-java/org/alfresco/repo/web/scripts/wiki/WikiRestApiTest.java
+++ /dev/null
@@ -1,1007 +0,0 @@
-/*
- * Copyright (C) 2005-2011 Alfresco Software Limited.
- *
- * This file is part of Alfresco
- *
- * Alfresco 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 3 of the License, or
- * (at your option) any later version.
- *
- * Alfresco 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 Alfresco. If not, see .
- */
-package org.alfresco.repo.web.scripts.wiki;
-
-import java.util.Date;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.transaction.UserTransaction;
-
-import org.alfresco.model.ContentModel;
-import org.alfresco.repo.node.archive.NodeArchiveService;
-import org.alfresco.repo.policy.BehaviourFilter;
-import org.alfresco.repo.security.authentication.AuthenticationComponent;
-import org.alfresco.repo.security.authentication.AuthenticationUtil;
-import org.alfresco.repo.site.SiteModel;
-import org.alfresco.repo.web.scripts.BaseWebScriptTest;
-import org.alfresco.service.cmr.repository.NodeRef;
-import org.alfresco.service.cmr.repository.NodeService;
-import org.alfresco.service.cmr.security.MutableAuthenticationService;
-import org.alfresco.service.cmr.security.PersonService;
-import org.alfresco.service.cmr.site.SiteInfo;
-import org.alfresco.service.cmr.site.SiteRole;
-import org.alfresco.service.cmr.site.SiteService;
-import org.alfresco.service.cmr.site.SiteVisibility;
-import org.alfresco.service.cmr.wiki.WikiPageInfo;
-import org.alfresco.service.cmr.wiki.WikiService;
-import org.alfresco.service.transaction.TransactionService;
-import org.alfresco.util.PropertyMap;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.json.JSONArray;
-import org.json.JSONObject;
-import org.springframework.extensions.webscripts.Status;
-import org.springframework.extensions.webscripts.TestWebScriptServer.DeleteRequest;
-import org.springframework.extensions.webscripts.TestWebScriptServer.GetRequest;
-import org.springframework.extensions.webscripts.TestWebScriptServer.PostRequest;
-import org.springframework.extensions.webscripts.TestWebScriptServer.PutRequest;
-import org.springframework.extensions.webscripts.TestWebScriptServer.Response;
-
-/**
- * Unit Test to test the Wiki Web Script API
- *
- * @author Nick Burch
- * @since 4.0
- */
-public class WikiRestApiTest extends BaseWebScriptTest
-{
- @SuppressWarnings("unused")
- private static Log logger = LogFactory.getLog(WikiRestApiTest.class);
-
- private MutableAuthenticationService authenticationService;
- private AuthenticationComponent authenticationComponent;
- private TransactionService transactionService;
- private BehaviourFilter policyBehaviourFilter;
- private PersonService personService;
- private NodeService nodeService;
- private NodeService internalNodeService;
- private SiteService siteService;
- private WikiService wikiService;
- private NodeArchiveService nodeArchiveService;
-
- private static final String USER_ONE = "UserOneSecondToo";
- private static final String USER_TWO = "UserTwoSecondToo";
- private static final String USERDETAILS_FIRSTNAME = "FirstName123";
- private static final String USERDETAILS_LASTNAME = "LastName123";
- private static final String SITE_SHORT_NAME_WIKI = "WikiSiteShortNameTest";
-
- private static final String PAGE_TITLE_ONE = "TestPageOne";
- private static final String PAGE_TITLE_TWO = "Test_Page_Two";
- private static final String PAGE_TITLE_THREE = "Still_Test_Page_Three";
- private static final String PAGE_CONTENTS_ONE = "http://google.com/";
- private static final String PAGE_CONTENTS_TWO = "http://alfresco.com/";
- private static final String PAGE_CONTENTS_THREE = "http://share.alfresco.com/";
- private static final String PAGE_CONTENTS_LINK = "Text text [[TestPageOne|P1]] [[Test_Page_Two|P2]] [[Invalid|Invalid]] text";
-
- private static final String URL_WIKI_BASE = "/slingshot/wiki/page";
- private static final String URL_WIKI_LIST = URL_WIKI_BASE + "s/" + SITE_SHORT_NAME_WIKI;
- private static final String URL_WIKI_FETCH = URL_WIKI_BASE + "/" + SITE_SHORT_NAME_WIKI + "/"; // plus title
- private static final String URL_WIKI_UPDATE = URL_WIKI_BASE + "/" + SITE_SHORT_NAME_WIKI + "/"; // plus title
- private static final String URL_WIKI_DELETE = URL_WIKI_BASE + "/" + SITE_SHORT_NAME_WIKI + "/"; // plus title
- private static final String URL_WIKI_RENAME = URL_WIKI_BASE + "/" + SITE_SHORT_NAME_WIKI + "/"; // plus title
- private static final String URL_WIKI_VERSION = "/slingshot/wiki/version/" + SITE_SHORT_NAME_WIKI + "/";
-
-
- // General methods
-
- @Override
- protected void setUp() throws Exception
- {
- super.setUp();
-
- this.authenticationService = (MutableAuthenticationService)getServer().getApplicationContext().getBean("AuthenticationService");
- this.authenticationComponent = (AuthenticationComponent)getServer().getApplicationContext().getBean("authenticationComponent");
- this.policyBehaviourFilter = (BehaviourFilter)getServer().getApplicationContext().getBean("policyBehaviourFilter");
- this.transactionService = (TransactionService)getServer().getApplicationContext().getBean("transactionService");
- this.personService = (PersonService)getServer().getApplicationContext().getBean("PersonService");
- this.nodeService = (NodeService)getServer().getApplicationContext().getBean("NodeService");
- this.siteService = (SiteService)getServer().getApplicationContext().getBean("SiteService");
- this.wikiService = (WikiService)getServer().getApplicationContext().getBean("WikiService");
- this.internalNodeService = (NodeService)getServer().getApplicationContext().getBean("nodeService");
- this.nodeArchiveService = (NodeArchiveService)getServer().getApplicationContext().getBean("nodeArchiveService");
-
- // Authenticate as user
- this.authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
-
- // Create test site
- // - only create the site if it doesn't already exist
- SiteInfo siteInfo = this.siteService.getSite(SITE_SHORT_NAME_WIKI);
- if (siteInfo == null)
- {
- this.siteService.createSite("WikiSitePreset", SITE_SHORT_NAME_WIKI, "WikiSiteTitle", "TestDescription", SiteVisibility.PUBLIC);
- }
-
- // Ensure the links container is there
- if(!siteService.hasContainer(SITE_SHORT_NAME_WIKI, "wiki"))
- {
- siteService.createContainer(SITE_SHORT_NAME_WIKI, "wiki", null, null);
- }
-
- // Create users
- createUser(USER_ONE, SiteModel.SITE_COLLABORATOR);
- createUser(USER_TWO, SiteModel.SITE_COLLABORATOR);
-
- // Do tests as inviter user
- this.authenticationComponent.setCurrentUser(USER_ONE);
- }
-
- @Override
- protected void tearDown() throws Exception
- {
- super.tearDown();
-
- // admin user required to delete user
- this.authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
-
- SiteInfo siteInfo = this.siteService.getSite(SITE_SHORT_NAME_WIKI);
- if (siteInfo != null)
- {
- // delete the site
- siteService.deleteSite(SITE_SHORT_NAME_WIKI);
- nodeArchiveService.purgeArchivedNode(nodeArchiveService.getArchivedNode(siteInfo.getNodeRef()));
- }
-
- // delete the users
- if(personService.personExists(USER_ONE))
- {
- personService.deletePerson(USER_ONE);
- }
- if(this.authenticationService.authenticationExists(USER_ONE))
- {
- this.authenticationService.deleteAuthentication(USER_ONE);
- }
-
- if(personService.personExists(USER_TWO))
- {
- personService.deletePerson(USER_TWO);
- }
- if(this.authenticationService.authenticationExists(USER_TWO))
- {
- this.authenticationService.deleteAuthentication(USER_TWO);
- }
- }
-
- private void createUser(String userName, String role)
- {
- // if user with given user name doesn't already exist then create user
- if (this.authenticationService.authenticationExists(userName) == false)
- {
- // create user
- this.authenticationService.createAuthentication(userName, "password".toCharArray());
-
- // create person properties
- PropertyMap personProps = new PropertyMap();
- personProps.put(ContentModel.PROP_USERNAME, userName);
- personProps.put(ContentModel.PROP_FIRSTNAME, USERDETAILS_FIRSTNAME);
- personProps.put(ContentModel.PROP_LASTNAME, USERDETAILS_LASTNAME);
- personProps.put(ContentModel.PROP_EMAIL, "FirstName123.LastName123@email.com");
- personProps.put(ContentModel.PROP_JOBTITLE, "JobTitle123");
- personProps.put(ContentModel.PROP_JOBTITLE, "Organisation123");
-
- // create person node for user
- this.personService.createPerson(personProps);
- }
-
- // add the user as a member with the given role
- this.siteService.setMembership(SITE_SHORT_NAME_WIKI, userName, role);
- }
-
-
- // Test helper methods
-
- private JSONObject getPages(String filter, String username) throws Exception
- {
- String origUser = this.authenticationComponent.getCurrentUserName();
- if (username != null)
- {
- this.authenticationComponent.setCurrentUser(username);
- filter = "myPages";
- }
-
- String url = URL_WIKI_LIST;
- if (filter == null)
- {
- filter = "all";
- }
- url += "?filter=" + filter;
- url += "&startIndex=0&page=1&pageSize=4";
-
- Response response = sendRequest(new GetRequest(url), 200);
- JSONObject result = new JSONObject(response.getContentAsString());
-
- if (username != null)
- {
- this.authenticationComponent.setCurrentUser(origUser);
- }
-
- return result;
- }
-
- private JSONObject getPage(String name, int expectedStatus) throws Exception
- {
- Response response = sendRequest(new GetRequest(URL_WIKI_FETCH + name), expectedStatus);
- if (expectedStatus == Status.STATUS_OK)
- {
- JSONObject result = new JSONObject(response.getContentAsString());
- if (result.has("page"))
- {
- return result.getJSONObject("page");
- }
- return result;
- }
- else if (expectedStatus == Status.STATUS_NOT_FOUND)
- {
- JSONObject result = new JSONObject(response.getContentAsString());
- return result;
- }
- else
- {
- return null;
- }
- }
-
- /**
- * Fetches the content of a page at a given version
- * Note - not JSON based.
- */
- private String getPageAtVersion(String name, String version, int expectedStatus) throws Exception
- {
- Response response = sendRequest(new GetRequest(URL_WIKI_VERSION + name + "/" + version), expectedStatus);
- if (expectedStatus == Status.STATUS_OK)
- {
- return response.getContentAsString();
- }
- else if (expectedStatus == Status.STATUS_NOT_FOUND)
- {
- return response.getContentAsString();
- }
- else
- {
- return null;
- }
- }
-
- /**
- * Creates a single wiki page based on the supplied details
- */
- private JSONObject createOrUpdatePage(String title, String contents, String version, int expectedStatus)
- throws Exception
- {
- return createOrUpdatePage(null, title, contents, version, expectedStatus);
- }
-
- /**
- * Creates a single wiki page based on the supplied details
- */
- private JSONObject createOrUpdatePage(String pageName, String title, String contents, String version, int expectedStatus) throws Exception
- {
- String name = null;
- if (pageName == null)
- {
- name = title.replace(' ', '_');
- }
- else
- {
- name = pageName;
- }
-
- JSONObject json = new JSONObject();
- json.put("site", SITE_SHORT_NAME_WIKI);
- json.put("title", title);
- json.put("pagecontent", contents);
- json.put("tags", "");
- json.put("page", "wiki-page"); // TODO Is this really needed?
-
- if (version == null || "force".equals(version))
- {
- // Allow the save as-is, no versioning check
- json.put("forceSave", "true"); // Allow the save as-is
- }
- else
- {
- if ("none".equals(version))
- {
- // No versioning
- }
- else
- {
- json.put("currentVersion", version);
- }
- }
-
- Response response = sendRequest(new PutRequest(URL_WIKI_UPDATE + name, json.toString(), "application/json"), expectedStatus);
- if (expectedStatus == Status.STATUS_OK)
- {
- JSONObject result = new JSONObject(response.getContentAsString());
- if (result.has("page"))
- {
- return result.getJSONObject("page");
- }
- return result;
- }
- else
- {
- return null;
- }
- }
-
- /**
- * Renames the page
- */
- private JSONObject renamePage(String oldTitle, String newTitle, int expectedStatus) throws Exception
- {
- String name = oldTitle.replace(' ', '_');
-
- JSONObject json = new JSONObject();
- json.put("site", SITE_SHORT_NAME_WIKI);
- json.put("name", newTitle);
- json.put("page", "wiki-page"); // TODO Is this really needed?
-
- Response response = sendRequest(new PostRequest(URL_WIKI_RENAME + name, json.toString(), "application/json"), expectedStatus);
- if (expectedStatus == Status.STATUS_OK)
- {
- JSONObject result = new JSONObject(response.getContentAsString());
- return result;
- }
- else
- {
- return null;
- }
- }
-
- /**
- * Deletes the page
- */
- private JSONObject deletePage(String title, int expectedStatus) throws Exception
- {
- String name = title.replace(' ', '_');
-
- Response response = sendRequest(new DeleteRequest(URL_WIKI_DELETE + name), expectedStatus);
- if (expectedStatus == Status.STATUS_OK)
- {
- JSONObject result = new JSONObject(response.getContentAsString());
- return result;
- }
- else
- {
- return null;
- }
- }
-
- /**
- * Monkeys with the created date on a wiki page
- */
- private void pushPageCreatedDateBack(String name, int daysAgo) throws Exception
- {
- NodeRef container = siteService.getContainer(SITE_SHORT_NAME_WIKI, "wiki");
- NodeRef node = nodeService.getChildByName(container, ContentModel.ASSOC_CONTAINS, name);
-
- Date created = (Date)nodeService.getProperty(node, ContentModel.PROP_CREATED);
- Date newCreated = new Date(created.getTime() - daysAgo*24*60*60*1000);
-
- UserTransaction txn = transactionService.getUserTransaction();
- txn.begin();
-
- this.policyBehaviourFilter.disableBehaviour(ContentModel.ASPECT_AUDITABLE);
- internalNodeService.setProperty(node, ContentModel.PROP_CREATED, newCreated);
- this.policyBehaviourFilter.enableBehaviour(ContentModel.ASPECT_AUDITABLE);
-
- txn.commit();
-
- // Now chance something else on the node to have it re-indexed
- nodeService.setProperty(node, ContentModel.PROP_CREATED, newCreated);
- nodeService.setProperty(node, ContentModel.PROP_DESCRIPTION, "Forced change");
- }
-
-
- // Tests
-
- /**
- * Creating, editing, fetching and deleting a link
- */
- public void testCreateEditDeleteEntry() throws Exception
- {
- JSONObject page;
- JSONObject permissions;
- String name;
-
-
- // None to start with
- page = getPages(null, null);
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("totalPages"));
- assertEquals(0, page.getInt("totalPages"));
-
-
- // Won't be there to start with
- page = getPage(PAGE_TITLE_ONE, Status.STATUS_NOT_FOUND);
-
- // Create
- page = createOrUpdatePage(PAGE_TITLE_ONE, PAGE_CONTENTS_ONE, null, Status.STATUS_OK);
- name = PAGE_TITLE_ONE.replace(' ', '_');
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("title"));
-
- assertEquals(name, page.getString("name"));
- assertEquals(PAGE_TITLE_ONE, page.getString("title"));
- assertEquals(PAGE_CONTENTS_ONE, page.getString("pagetext"));
- assertEquals(0, page.getJSONArray("tags").length());
-
-
- // Fetch
- page = getPage(name, Status.STATUS_OK);
-
- assertEquals(name, page.getString("name"));
- assertEquals(PAGE_TITLE_ONE, page.getString("title"));
- assertEquals(PAGE_CONTENTS_ONE, page.getString("pagetext"));
- assertEquals(0, page.getJSONArray("tags").length());
- assertEquals(0, page.getJSONArray("links").length());
-
- // Check the permissions
- assertEquals(true, page.has("permissions"));
- permissions = page.getJSONObject("permissions");
- assertEquals(true, permissions.getBoolean("create"));
- assertEquals(true, permissions.getBoolean("edit"));
- assertEquals(true, permissions.getBoolean("delete"));
-
-
- // Edit
- // We should get a simple message
- page = createOrUpdatePage(PAGE_TITLE_ONE, "M"+PAGE_CONTENTS_ONE, null, Status.STATUS_OK);
- assertEquals(name, page.getString("name"));
- assertEquals(PAGE_TITLE_ONE, page.getString("title"));
- assertEquals("M"+PAGE_CONTENTS_ONE, page.getString("pagetext"));
- assertEquals(0, page.getJSONArray("tags").length());
-
-
-
- // Fetch
- page = getPage(name, Status.STATUS_OK);
-
- assertEquals(name, page.getString("name"));
- assertEquals(PAGE_TITLE_ONE, page.getString("title"));
- assertEquals("M"+PAGE_CONTENTS_ONE, page.getString("pagetext"));
- assertEquals(0, page.getJSONArray("tags").length());
- assertEquals(0, page.getJSONArray("links").length());
-
-
- // Fetch as a different user, permissions different
- this.authenticationComponent.setCurrentUser(USER_TWO);
- page = getPage(name, Status.STATUS_OK);
-
- // Check the basics
- assertEquals(name, page.getString("name"));
- assertEquals(PAGE_TITLE_ONE, page.getString("title"));
- assertEquals("M"+PAGE_CONTENTS_ONE, page.getString("pagetext"));
- assertEquals(0, page.getJSONArray("tags").length());
- assertEquals(0, page.getJSONArray("links").length());
-
- // Different user in the site, can edit but not delete
- assertEquals(true, page.has("permissions"));
- permissions = page.getJSONObject("permissions");
- assertEquals(true, permissions.getBoolean("create"));
- assertEquals(true, permissions.getBoolean("edit"));
- assertEquals(false, permissions.getBoolean("delete"));
-
- this.authenticationComponent.setCurrentUser(USER_ONE);
-
-
- // Delete
- page = deletePage(name, Status.STATUS_NO_CONTENT);
- assertEquals(null, page); // No response
-
-
- // Fetch, will have gone
- page = getPage(name, Status.STATUS_NOT_FOUND);
-
- // On a page that isn't there, you do get permissions
- assertEquals(true, page.has("permissions"));
- permissions = page.getJSONObject("permissions");
- assertEquals(true, permissions.getBoolean("create"));
- assertEquals(true, permissions.getBoolean("edit"));
- assertEquals(false, permissions.has("delete")); // No delete for non existing page
-
-
- // Can't delete again
- deletePage(name, Status.STATUS_NOT_FOUND);
- }
-
- public void testRenaming() throws Exception
- {
- JSONObject page;
- String name;
- String name2;
-
-
- // Create a page
- page = createOrUpdatePage(PAGE_TITLE_TWO, PAGE_CONTENTS_ONE, null, Status.STATUS_OK);
- name = PAGE_TITLE_TWO.replace(' ', '_');
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("title"));
-
-
- // Fetch it and check
- page = getPage(name, Status.STATUS_OK);
- assertEquals(name, page.getString("name"));
- assertEquals(PAGE_TITLE_TWO, page.getString("title"));
-
-
- // Have it renamed
- page = renamePage(PAGE_TITLE_TWO, PAGE_TITLE_THREE, Status.STATUS_OK);
- name2 = PAGE_TITLE_THREE.replace(' ', '_');
- assertEquals(PAGE_TITLE_THREE, page.getString("title"));
-
-
- // Fetch it at the new address
- page = getPage(name2, Status.STATUS_OK);
- assertEquals(name2, page.getString("name"));
- assertEquals(PAGE_TITLE_THREE, page.getString("title"));
-
-
- // Get the old one, and ensure we see the "has been moved"
- page = getPage(name, Status.STATUS_OK);
- assertEquals(name, page.getString("name"));
- assertEquals(PAGE_TITLE_TWO, page.getString("title"));
- assertEquals("This page has been moved [["+PAGE_TITLE_THREE+"|here]].", page.getString("pagetext"));
-
-
- // Ensure you can't rename onto an existing page
- page = createOrUpdatePage(PAGE_TITLE_ONE, PAGE_CONTENTS_THREE, null, Status.STATUS_OK);
- String name1 = PAGE_TITLE_ONE.replace(' ', '_');
-
- // Check the rename won't work
- renamePage(PAGE_TITLE_THREE, PAGE_TITLE_ONE, Status.STATUS_CONFLICT);
-
- // Check that the pages weren't changed
- page = getPage(name2, Status.STATUS_OK);
- assertEquals(name2, page.getString("name"));
- assertEquals(PAGE_TITLE_THREE, page.getString("title"));
-
- page = getPage(name1, Status.STATUS_OK);
- assertEquals(name1, page.getString("name"));
- assertEquals(PAGE_TITLE_ONE, page.getString("title"));
- }
-
- public void testRenamePageWithEmptyTitle() throws Exception
- {
- JSONObject page;
- String name = System.currentTimeMillis()+"";
- String name2 = System.currentTimeMillis()+1+"";
-
- // Create a page
- page = createOrUpdatePage(name, name, null, Status.STATUS_OK);
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("title"));
-
- // Fetch it and check
- page = getPage(name, Status.STATUS_OK);
- assertEquals(name, page.getString("name"));
- assertEquals(name, page.getString("title"));
-
- //update title
- SiteInfo site = siteService.getSite(SITE_SHORT_NAME_WIKI);
- WikiPageInfo pageInfo = wikiService.getWikiPage(site.getShortName(), name);
- NodeRef pageRef = pageInfo.getNodeRef();
- nodeService.setProperty(pageRef, ContentModel.PROP_TITLE, "");
-
- // Fetch it and check
- page = getPage(name, Status.STATUS_OK);
- JSONArray versions = page.getJSONArray("versionhistory");
-
- int maxVersionIndex = versions.length()-1;
- double vNum = Double.parseDouble(versions.getJSONObject(maxVersionIndex).getString("version"));
- String newTitle =versions.getJSONObject(maxVersionIndex).getString("title");
- for (int i = versions.length()-2; i>=0; i--)
- {
- JSONObject version = versions.getJSONObject(i);
- String ver = version.getString("version");
- if (Double.parseDouble(ver)>vNum)
- {
- maxVersionIndex = i;
- vNum = Double.parseDouble(ver);
- newTitle =versions.getJSONObject(maxVersionIndex).getString("title");
- }
- }
- assertEquals(name, page.getString("name"));
- assertEquals("", newTitle);
-
- renamePage(name, name2, Status.STATUS_OK);
-
- // Fetch it at the new address
- page = getPage(name2, Status.STATUS_OK);
- assertEquals(name2, page.getString("name"));
- assertEquals(name2, page.getString("title"));
- }
-
- public void testVersioning() throws Exception
- {
- WikiPageInfo wikiInfo;
- JSONObject page;
- JSONArray versions;
- String name;
-
- // Create a page
- page = createOrUpdatePage(PAGE_TITLE_TWO, PAGE_CONTENTS_ONE, null, Status.STATUS_OK);
- name = PAGE_TITLE_TWO.replace(' ', '_');
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("title"));
-
-
- // Check it was versioned by default
- wikiInfo = wikiService.getWikiPage(SITE_SHORT_NAME_WIKI, name);
- assertNotNull(wikiInfo);
- assertEquals(true, nodeService.hasAspect(wikiInfo.getNodeRef(), ContentModel.ASPECT_VERSIONABLE));
-
- // Check the JSON for versioning
- page = getPage(name, Status.STATUS_OK);
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("versionhistory"));
-
- versions = page.getJSONArray("versionhistory");
- assertEquals(1, versions.length());
- assertEquals("1.0", versions.getJSONObject(0).get("version"));
- assertEquals(USER_ONE, versions.getJSONObject(0).get("author"));
-
-
- // Fetch it at this version
- String content = getPageAtVersion(name, "1.0", Status.STATUS_OK);
- assertEquals(PAGE_CONTENTS_ONE, content);
-
-
- // Upload a new copy without a version flag, denied
- createOrUpdatePage(PAGE_TITLE_TWO, "Changed Contents", "none", Status.STATUS_CONFLICT);
-
-
- // Upload a new copy with the appropriate version, allowed
- String PAGE_CONTENTS_CHANGED = "Changed Contents 2";
- page = createOrUpdatePage(PAGE_TITLE_TWO, PAGE_CONTENTS_CHANGED, "1.0", Status.STATUS_OK);
-
- page = getPage(name, Status.STATUS_OK);
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("versionhistory"));
-
- versions = page.getJSONArray("versionhistory");
- assertEquals(2, versions.length());
- assertEquals("1.1", versions.getJSONObject(0).get("version"));
- assertEquals(USER_ONE, versions.getJSONObject(0).get("author"));
- assertEquals("1.0", versions.getJSONObject(1).get("version"));
- assertEquals(USER_ONE, versions.getJSONObject(1).get("author"));
-
-
- // Check the version contents
- content = getPageAtVersion(name, "1.1", Status.STATUS_OK);
- assertEquals(PAGE_CONTENTS_CHANGED, content);
- content = getPageAtVersion(name, "1.0", Status.STATUS_OK);
- assertEquals(PAGE_CONTENTS_ONE, content);
-
-
- // Upload a new copy with the force flag, allowed
- String PAGE_CONTENTS_CHANGED3 = "Changed Contents 3";
- page = createOrUpdatePage(PAGE_TITLE_TWO, PAGE_CONTENTS_CHANGED3, "force", Status.STATUS_OK);
-
- page = getPage(name, Status.STATUS_OK);
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("versionhistory"));
-
- versions = page.getJSONArray("versionhistory");
- assertEquals(3, versions.length());
- assertEquals("1.2", versions.getJSONObject(0).get("version"));
- assertEquals(USER_ONE, versions.getJSONObject(0).get("author"));
- assertEquals("1.1", versions.getJSONObject(1).get("version"));
- assertEquals(USER_ONE, versions.getJSONObject(1).get("author"));
- assertEquals("1.0", versions.getJSONObject(2).get("version"));
- assertEquals(USER_ONE, versions.getJSONObject(2).get("author"));
-
- // Check the version contents
- content = getPageAtVersion(name, "1.2", Status.STATUS_OK);
- assertEquals(PAGE_CONTENTS_CHANGED3, content);
- content = getPageAtVersion(name, "1.1", Status.STATUS_OK);
- assertEquals(PAGE_CONTENTS_CHANGED, content);
- content = getPageAtVersion(name, "1.0", Status.STATUS_OK);
- assertEquals(PAGE_CONTENTS_ONE, content);
-
- // You get an empty string back for invalid versions
- content = getPageAtVersion(name, "1.4", Status.STATUS_OK);
- assertEquals("", content);
- }
-
- public void testLinks() throws Exception
- {
- JSONObject page;
- JSONArray links;
- String name;
- String name2;
-
- // Create a page with no links
- page = createOrUpdatePage(PAGE_TITLE_TWO, PAGE_CONTENTS_TWO, null, Status.STATUS_OK);
- name = PAGE_TITLE_TWO.replace(' ', '_');
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("title"));
-
-
- // Check, won't have any links shown
- page = getPage(name, Status.STATUS_OK);
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("links"));
- links = page.getJSONArray("links");
- assertEquals(0, links.length());
-
-
- // Create a page with links
- // Should have links to pages 1 and 2
- page = createOrUpdatePage(PAGE_TITLE_THREE, PAGE_CONTENTS_LINK, null, Status.STATUS_OK);
- name2 = PAGE_TITLE_THREE.replace(' ', '_');
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("title"));
-
- // Check
- page = getPage(name2, Status.STATUS_OK);
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("links"));
-
- links = page.getJSONArray("links");
- assertEquals(3, links.length());
- assertEquals(PAGE_TITLE_ONE, links.getString(0));
- assertEquals(name, links.getString(1));
- assertEquals("Invalid", links.getString(2));
-
-
- // Create the 1st page, now change
- page = createOrUpdatePage(PAGE_TITLE_ONE, PAGE_CONTENTS_ONE, null, Status.STATUS_OK);
-
- page = getPage(name2, Status.STATUS_OK);
- assertEquals("Incorrect JSON: " + page.toString(), true, page.has("links"));
-
- links = page.getJSONArray("links");
- assertEquals(3, links.length());
- assertEquals(PAGE_TITLE_ONE, links.getString(0));
- assertEquals(name, links.getString(1));
- assertEquals("Invalid", links.getString(2));
- }
-
- /**
- * Listing
- */
- public void testOverallListing() throws Exception
- {
- JSONObject pages;
- JSONArray entries;
-
- // Initially, there are no events
- pages = getPages(null, null);
- assertEquals("Incorrect JSON: " + pages.toString(), true, pages.has("totalPages"));
- assertEquals(0, pages.getInt("totalPages"));
-
-
- // Add two links to get started with
- createOrUpdatePage(PAGE_TITLE_ONE, PAGE_CONTENTS_ONE, null, Status.STATUS_OK);
- createOrUpdatePage(PAGE_TITLE_TWO, PAGE_CONTENTS_TWO, null, Status.STATUS_OK);
-
- // Check again
- pages = getPages(null, null);
-
- // Should have two links
- assertEquals("Incorrect JSON: " + pages.toString(), true, pages.has("totalPages"));
- assertEquals(2, pages.getInt("totalPages"));
-
- entries = pages.getJSONArray("pages");
- assertEquals(2, entries.length());
- // Sorted by newest created first
- assertEquals(PAGE_TITLE_TWO, entries.getJSONObject(0).getString("title"));
- assertEquals(PAGE_TITLE_ONE, entries.getJSONObject(1).getString("title"));
-
-
- // Add a third, which is internal, and created by the other user
- this.authenticationComponent.setCurrentUser(USER_TWO);
- JSONObject page3 = createOrUpdatePage(PAGE_TITLE_THREE, PAGE_CONTENTS_THREE, null, Status.STATUS_OK);
- String name3 = PAGE_TITLE_THREE.replace(' ', '_');
- createOrUpdatePage(PAGE_TITLE_THREE, "UD"+PAGE_CONTENTS_THREE, null, Status.STATUS_OK);
- this.authenticationComponent.setCurrentUser(USER_ONE);
-
-
- // Check now, should have three links
- pages = getPages(null, null);
- assertEquals(3, pages.getInt("totalPages"));
-
- entries = pages.getJSONArray("pages");
- assertEquals(3, entries.length());
- assertEquals(PAGE_TITLE_THREE, entries.getJSONObject(0).getString("title"));
- assertEquals(PAGE_TITLE_TWO, entries.getJSONObject(1).getString("title"));
- assertEquals(PAGE_TITLE_ONE, entries.getJSONObject(2).getString("title"));
-
-
- // Ask for filtering by user
- pages = getPages(null, USER_ONE);
- assertEquals(2, pages.getInt("totalPages"));
-
- entries = pages.getJSONArray("pages");
- assertEquals(2, entries.length());
- assertEquals(PAGE_TITLE_TWO, entries.getJSONObject(0).getString("title"));
- assertEquals(PAGE_TITLE_ONE, entries.getJSONObject(1).getString("title"));
-
- pages = getPages(null, USER_TWO);
- assertEquals(1, pages.getInt("totalPages"));
-
- entries = pages.getJSONArray("pages");
- assertEquals(1, entries.length());
- assertEquals(PAGE_TITLE_THREE, entries.getJSONObject(0).getString("title"));
-
-
-
- // Ask for filtering by recently added docs
- pages = getPages("recentlyAdded", null);
- assertEquals(3, pages.getInt("totalPages"));
-
- entries = pages.getJSONArray("pages");
- assertEquals(3, entries.length());
- assertEquals(PAGE_TITLE_THREE, entries.getJSONObject(0).getString("title"));
- assertEquals(PAGE_TITLE_TWO, entries.getJSONObject(1).getString("title"));
- assertEquals(PAGE_TITLE_ONE, entries.getJSONObject(2).getString("title"));
-
- // Push one back into the past
- pushPageCreatedDateBack(name3, 10);
-
- pages = getPages("recentlyAdded", null);
- assertEquals(2, pages.getInt("totalPages"));
-
- entries = pages.getJSONArray("pages");
- assertEquals(2, entries.length());
- assertEquals(PAGE_TITLE_TWO, entries.getJSONObject(0).getString("title"));
- assertEquals(PAGE_TITLE_ONE, entries.getJSONObject(1).getString("title"));
-
-
- // Now for recently modified ones
- pages = getPages("recentlyModified", null);
- assertEquals(3, pages.getInt("totalPages"));
-
- entries = pages.getJSONArray("pages");
- assertEquals(3, entries.length());
- assertEquals(PAGE_TITLE_THREE, entries.getJSONObject(0).getString("title"));
- assertEquals(PAGE_TITLE_TWO, entries.getJSONObject(1).getString("title"));
- assertEquals(PAGE_TITLE_ONE, entries.getJSONObject(2).getString("title"));
-// assertEquals(PAGE_TITLE_THREE, entries.getJSONObject(2).getString("title"));
-
-
- // Change the owner+creator of one of the pages to System, ensure that
- // this doesn't break anything in the process
- String pageTwoName = entries.getJSONObject(1).getString("name");
- WikiPageInfo pageTwo = wikiService.getWikiPage(SITE_SHORT_NAME_WIKI, pageTwoName);
- nodeService.setProperty(pageTwo.getNodeRef(), ContentModel.PROP_OWNER, AuthenticationUtil.SYSTEM_USER_NAME);
- nodeService.setProperty(pageTwo.getNodeRef(), ContentModel.PROP_CREATOR, AuthenticationUtil.SYSTEM_USER_NAME);
- nodeService.setProperty(pageTwo.getNodeRef(), ContentModel.PROP_MODIFIER, AuthenticationUtil.SYSTEM_USER_NAME);
-
- // Check the listing still works (note - order will have changed)
- pages = getPages("recentlyModified", null);
- assertEquals(3, pages.getInt("totalPages"));
-
- entries = pages.getJSONArray("pages");
- assertEquals(3, entries.length());
- assertEquals(PAGE_TITLE_TWO, entries.getJSONObject(0).getString("title"));
- assertEquals(PAGE_TITLE_THREE, entries.getJSONObject(1).getString("title"));
- assertEquals(PAGE_TITLE_ONE, entries.getJSONObject(2).getString("title"));
-
-
- // Delete User Two, who owns the 3rd page, and ensure that this
- // doesn't break anything
- this.authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
- personService.deletePerson(USER_TWO);
- this.authenticationComponent.setCurrentUser(USER_ONE);
-
- // Check the listing still works
- pages = getPages("recentlyModified", null);
- assertEquals(3, pages.getInt("totalPages"));
-
- entries = pages.getJSONArray("pages");
- assertEquals(3, entries.length());
- assertEquals(PAGE_TITLE_TWO, entries.getJSONObject(0).getString("title"));
- assertEquals(PAGE_TITLE_THREE, entries.getJSONObject(1).getString("title"));
- assertEquals(PAGE_TITLE_ONE, entries.getJSONObject(2).getString("title"));
-
-
- // Now hide the site, and remove the user from it, won't be allowed to see it
- this.authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
- SiteInfo site = siteService.getSite(SITE_SHORT_NAME_WIKI);
- site.setVisibility(SiteVisibility.PRIVATE);
- siteService.updateSite(site);
- siteService.removeMembership(SITE_SHORT_NAME_WIKI, USER_ONE);
- this.authenticationComponent.setCurrentUser(USER_ONE);
-
- sendRequest(new GetRequest(URL_WIKI_LIST), Status.STATUS_NOT_FOUND);
- }
-
- public void test_MNT11595() throws Exception
- {
- final String user = "wikiUser";
-
- try
- {
- // admin authentication
- this.authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
-
- MutableAuthenticationService mas = (MutableAuthenticationService) getServer().getApplicationContext().getBean("authenticationService");
-
- // create user
- createUser(user, SiteModel.SITE_MANAGER);
-
- assertTrue(personService.personExists(user));
-
- // invite user to a site with 'Manager' role
- siteService.setMembership(SITE_SHORT_NAME_WIKI, user, SiteRole.SiteManager.toString());
-
- // user authentication
- this.authenticationComponent.setCurrentUser(user);
-
- // create wiki page by user ('Manager' role)
- WikiPageInfo wikiPage = this.wikiService.createWikiPage(SITE_SHORT_NAME_WIKI, "test wiki page",
- "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals. Sir Winston Churchill");
-
- String uri = "/slingshot/wiki/page/" + SITE_SHORT_NAME_WIKI + "/Main_Page?alf_ticket=" + mas.getCurrentTicket() + "application/json";
-
- Response responseManagerRole = sendRequest(new GetRequest(uri), 404);
- JSONObject resultManagerRole = new JSONObject(responseManagerRole.getContentAsString());
- JSONObject permissionsManagerRole = resultManagerRole.getJSONObject("permissions");
- assertTrue(permissionsManagerRole.getBoolean("create"));
- assertTrue(permissionsManagerRole.getBoolean("edit"));
-
- // admin authentication
- this.authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
-
- // change user role - 'Consumer' role
- siteService.setMembership(SITE_SHORT_NAME_WIKI, user, SiteRole.SiteConsumer.toString());
-
- // user authentication
- this.authenticationComponent.setCurrentUser(user);
-
- Response responseConsumerRole = sendRequest(new GetRequest(uri), 404);
- JSONObject resultConsumerRole = new JSONObject(responseConsumerRole.getContentAsString());
- JSONObject permissionsConsumerRole = resultConsumerRole.getJSONObject("permissions");
- assertFalse(permissionsConsumerRole.getBoolean("create"));
- assertFalse(permissionsConsumerRole.getBoolean("edit"));
- }
- finally
- {
- this.authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
-
- if (personService.personExists(user))
- {
- personService.deletePerson(user);
- }
-
- if (this.authenticationService.authenticationExists(user))
- {
- this.authenticationService.deleteAuthentication(user);
- }
- }
- }
-
- public void testXSSInjection() throws Exception
- {
- WikiPageInfo wikiPage = null;
- WikiPageInfo wikiPageNew = null;
- try{
- wikiPage = this.wikiService.createWikiPage(SITE_SHORT_NAME_WIKI, "test_wiki", "[[Test]]");
- wikiPageNew = this.wikiService.createWikiPage(SITE_SHORT_NAME_WIKI, "Test", "test_content");
- Pattern LINK_PATTERN_MATCH = Pattern.compile("\\[\\[([^\\|\\]]+)");
- Matcher m = LINK_PATTERN_MATCH.matcher(wikiPage.getContents());
- while (m.find())
- {
- String link = m.group(1);
- link += "?title=";
- WikiPageInfo wikiPage2 = this.wikiService.getWikiPage(SITE_SHORT_NAME_WIKI, link);
- WikiPageInfo wikiPage1 = this.wikiService.getWikiPage(SITE_SHORT_NAME_WIKI, StringEscapeUtils.unescapeHtml(link));
- assertEquals(wikiPage2, wikiPage1);
- }
-
- }
- finally{
- this.wikiService.deleteWikiPage(wikiPage);
- this.wikiService.deleteWikiPage(wikiPageNew);
- }
- }
-}
\ No newline at end of file