mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
ALF-9153 Update the discussions webscript rest tests to cover many more cases and in a greater detail, plus a few webscript fixes and tweaks identified in testing
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29671 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -22,15 +22,22 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.model.ForumModel;
|
||||
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.SiteService;
|
||||
import org.alfresco.service.cmr.site.SiteVisibility;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.service.namespace.RegexQNamePattern;
|
||||
import org.alfresco.util.PropertyMap;
|
||||
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;
|
||||
@@ -47,22 +54,27 @@ import org.json.JSONObject;
|
||||
*/
|
||||
public class DiscussionServiceTest extends BaseWebScriptTest
|
||||
{
|
||||
private static Log logger = LogFactory.getLog(DiscussionServiceTest.class);
|
||||
private static Log logger = LogFactory.getLog(DiscussionServiceTest.class);
|
||||
private static final String DELETED_REPLY_POST_MARKER = "[[deleted]]";
|
||||
|
||||
private MutableAuthenticationService authenticationService;
|
||||
private AuthenticationComponent authenticationComponent;
|
||||
private PersonService personService;
|
||||
private SiteService siteService;
|
||||
private NodeService nodeService;
|
||||
|
||||
private static final String USER_ONE = "UserOneThird";
|
||||
private static final String USER_TWO = "UserTwoThird";
|
||||
private static final String SITE_SHORT_NAME_DISCUSSION = "DiscussionSiteShortNameThree";
|
||||
private static final String COMPONENT_DISCUSSION = "discussion";
|
||||
|
||||
private static final String URL_FORUM_POST = "/api/forum/post/site/" + SITE_SHORT_NAME_DISCUSSION + "/" + COMPONENT_DISCUSSION + "/";
|
||||
private static final String URL_FORUM_POSTS = "/api/forum/site/" + SITE_SHORT_NAME_DISCUSSION + "/" + COMPONENT_DISCUSSION + "/posts";
|
||||
private static final String URL_FORUM_SITE_POST = "/api/forum/post/site/" + SITE_SHORT_NAME_DISCUSSION + "/" + COMPONENT_DISCUSSION + "/";
|
||||
private static final String URL_FORUM_SITE_POSTS = "/api/forum/site/" + SITE_SHORT_NAME_DISCUSSION + "/" + COMPONENT_DISCUSSION + "/posts";
|
||||
private static final String URL_FORUM_NODE_POST_BASE = "/api/forum/post/node/"; // Plus node id
|
||||
private static final String URL_FORUM_NODE_POSTS_BASE = "/api/forum/node/"; // Plus node id + /posts
|
||||
|
||||
private List<String> posts = new ArrayList<String>(5);
|
||||
private NodeRef FORUM_NODE;
|
||||
|
||||
|
||||
// General methods
|
||||
@@ -76,6 +88,7 @@ public class DiscussionServiceTest extends BaseWebScriptTest
|
||||
this.authenticationComponent = (AuthenticationComponent)getServer().getApplicationContext().getBean("authenticationComponent");
|
||||
this.personService = (PersonService)getServer().getApplicationContext().getBean("PersonService");
|
||||
this.siteService = (SiteService)getServer().getApplicationContext().getBean("SiteService");
|
||||
this.nodeService = (NodeService)getServer().getApplicationContext().getBean("NodeService");
|
||||
|
||||
// Authenticate as user
|
||||
this.authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
|
||||
@@ -85,13 +98,26 @@ public class DiscussionServiceTest extends BaseWebScriptTest
|
||||
SiteInfo siteInfo = this.siteService.getSite(SITE_SHORT_NAME_DISCUSSION);
|
||||
if (siteInfo == null)
|
||||
{
|
||||
this.siteService.createSite("DiscussionSitePreset", SITE_SHORT_NAME_DISCUSSION, "DiscussionSiteTitle",
|
||||
"DiscussionSiteDescription", true);
|
||||
siteInfo = this.siteService.createSite("DiscussionSitePreset", SITE_SHORT_NAME_DISCUSSION,
|
||||
"DiscussionSiteTitle", "DiscussionSiteDescription", SiteVisibility.PUBLIC);
|
||||
}
|
||||
|
||||
// Create the forum
|
||||
String forumNodeName = "TestForum";
|
||||
FORUM_NODE = nodeService.getChildByName(siteInfo.getNodeRef(), ContentModel.ASSOC_CONTAINS, forumNodeName);
|
||||
if(FORUM_NODE == null)
|
||||
{
|
||||
FORUM_NODE = nodeService.createNode(
|
||||
siteInfo.getNodeRef(), ContentModel.ASSOC_CONTAINS,
|
||||
QName.createQName(forumNodeName), ForumModel.TYPE_FORUM
|
||||
).getChildRef();
|
||||
nodeService.setProperty(FORUM_NODE, ContentModel.PROP_NAME, forumNodeName);
|
||||
nodeService.setProperty(FORUM_NODE, ContentModel.PROP_TITLE, forumNodeName);
|
||||
}
|
||||
|
||||
// Create users
|
||||
createUser(USER_ONE, SiteModel.SITE_COLLABORATOR);
|
||||
createUser(USER_TWO, SiteModel.SITE_COLLABORATOR);
|
||||
createUser(USER_TWO, SiteModel.SITE_CONTRIBUTOR);
|
||||
|
||||
// Do tests as inviter user
|
||||
this.authenticationComponent.setCurrentUser(USER_ONE);
|
||||
@@ -105,24 +131,34 @@ public class DiscussionServiceTest extends BaseWebScriptTest
|
||||
// admin user required to delete user
|
||||
this.authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
|
||||
|
||||
// delete the inviter user
|
||||
//personService.deletePerson(USER_ONE);
|
||||
//this.authenticationService.deleteAuthentication(USER_ONE);
|
||||
//personService.deletePerson(USER_TWO);
|
||||
//this.authenticationService.deleteAuthentication(USER_TWO);
|
||||
// delete the discussions users
|
||||
personService.deletePerson(USER_ONE);
|
||||
if(this.authenticationService.authenticationExists(USER_ONE))
|
||||
{
|
||||
this.authenticationService.deleteAuthentication(USER_ONE);
|
||||
}
|
||||
|
||||
// delete invite site
|
||||
personService.deletePerson(USER_TWO);
|
||||
if(this.authenticationService.authenticationExists(USER_TWO))
|
||||
{
|
||||
this.authenticationService.deleteAuthentication(USER_TWO);
|
||||
}
|
||||
|
||||
// delete discussions test site
|
||||
siteService.deleteSite(SITE_SHORT_NAME_DISCUSSION);
|
||||
}
|
||||
|
||||
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)
|
||||
if (!this.authenticationService.authenticationExists(userName))
|
||||
{
|
||||
// create user
|
||||
this.authenticationService.createAuthentication(userName, "password".toCharArray());
|
||||
|
||||
}
|
||||
|
||||
if (!this.personService.personExists(userName))
|
||||
{
|
||||
// create person properties
|
||||
PropertyMap personProps = new PropertyMap();
|
||||
personProps.put(ContentModel.PROP_USERNAME, userName);
|
||||
@@ -141,89 +177,155 @@ public class DiscussionServiceTest extends BaseWebScriptTest
|
||||
}
|
||||
|
||||
|
||||
// Test helper methods
|
||||
// -----------------------------------------------------
|
||||
// Test helper methods
|
||||
// -----------------------------------------------------
|
||||
|
||||
private JSONObject createPost(String title, String content, int expectedStatus)
|
||||
/**
|
||||
* Creates a new topic+post in the test site
|
||||
*/
|
||||
private JSONObject createSitePost(String title, String content, int expectedStatus)
|
||||
throws Exception
|
||||
{
|
||||
JSONObject post = new JSONObject();
|
||||
post.put("title", title);
|
||||
post.put("content", content);
|
||||
Response response = sendRequest(new PostRequest(URL_FORUM_POSTS, post.toString(), "application/json"), expectedStatus);
|
||||
|
||||
if (expectedStatus != 200)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
//logger.debug(response.getContentAsString());
|
||||
JSONObject result = new JSONObject(response.getContentAsString());
|
||||
JSONObject item = result.getJSONObject("item");
|
||||
posts.add(item.getString("name"));
|
||||
return item;
|
||||
return doCreatePost(URL_FORUM_SITE_POSTS, title, content, expectedStatus);
|
||||
}
|
||||
|
||||
private JSONObject updatePost(String nodeRef, String title, String content, int expectedStatus)
|
||||
throws Exception
|
||||
/**
|
||||
* Creates a new topic+post under the given node
|
||||
*/
|
||||
private JSONObject createNodePost(NodeRef nodeRef, String title, String content,
|
||||
int expectedStatus) throws Exception
|
||||
{
|
||||
JSONObject post = new JSONObject();
|
||||
post.put("title", title);
|
||||
post.put("content", content);
|
||||
Response response = sendRequest(new PutRequest(getPostUrl(nodeRef), post.toString(), "application/json"), expectedStatus);
|
||||
|
||||
if (expectedStatus != 200)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return doCreatePost(getPostsUrl(nodeRef), title, content, expectedStatus);
|
||||
}
|
||||
private JSONObject doCreatePost(String url, String title, String content,
|
||||
int expectedStatus) throws Exception
|
||||
{
|
||||
JSONObject post = new JSONObject();
|
||||
post.put("title", title);
|
||||
post.put("content", content);
|
||||
Response response = sendRequest(new PostRequest(url, post.toString(), "application/json"), expectedStatus);
|
||||
|
||||
JSONObject result = new JSONObject(response.getContentAsString());
|
||||
return result.getJSONObject("item");
|
||||
if (expectedStatus != Status.STATUS_OK)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
JSONObject result = new JSONObject(response.getContentAsString());
|
||||
JSONObject item = result.getJSONObject("item");
|
||||
posts.add(item.getString("name"));
|
||||
return item;
|
||||
}
|
||||
|
||||
private JSONObject updatePost(NodeRef nodeRef, String title, String content,
|
||||
int expectedStatus) throws Exception
|
||||
{
|
||||
return doUpdatePost(getPostUrl(nodeRef), title, content, expectedStatus);
|
||||
}
|
||||
private JSONObject updatePost(String name, String title, String content,
|
||||
int expectedStatus) throws Exception
|
||||
{
|
||||
return doUpdatePost(URL_FORUM_SITE_POST + name, title, content, expectedStatus);
|
||||
}
|
||||
private JSONObject doUpdatePost(String url, String title, String content,
|
||||
int expectedStatus) throws Exception
|
||||
{
|
||||
JSONObject post = new JSONObject();
|
||||
post.put("title", title);
|
||||
post.put("content", content);
|
||||
Response response = sendRequest(new PutRequest(url, post.toString(), "application/json"), expectedStatus);
|
||||
|
||||
if (expectedStatus != Status.STATUS_OK)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
JSONObject result = new JSONObject(response.getContentAsString());
|
||||
return result.getJSONObject("item");
|
||||
}
|
||||
|
||||
private JSONObject getPost(String name, int expectedStatus)
|
||||
private JSONObject getPost(String name, int expectedStatus) throws Exception
|
||||
{
|
||||
return doGetPost(URL_FORUM_SITE_POST + name, expectedStatus);
|
||||
}
|
||||
private JSONObject getPost(NodeRef nodeRef, int expectedStatus) throws Exception
|
||||
{
|
||||
return doGetPost(getPostUrl(nodeRef), expectedStatus);
|
||||
}
|
||||
private JSONObject doGetPost(String url, int expectedStatus) throws Exception
|
||||
{
|
||||
Response response = sendRequest(new GetRequest(url), expectedStatus);
|
||||
if (expectedStatus == Status.STATUS_OK)
|
||||
{
|
||||
JSONObject result = new JSONObject(response.getContentAsString());
|
||||
return result.getJSONObject("item");
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private JSONObject deletePost(String name, int expectedStatus) throws Exception
|
||||
{
|
||||
return doDeletePost(URL_FORUM_SITE_POST + name, expectedStatus);
|
||||
}
|
||||
private JSONObject deletePost(NodeRef nodeRef, int expectedStatus) throws Exception
|
||||
{
|
||||
return doDeletePost(getPostUrl(nodeRef), expectedStatus);
|
||||
}
|
||||
private JSONObject doDeletePost(String url, int expectedStatus) throws Exception
|
||||
{
|
||||
Response response = sendRequest(new DeleteRequest(url), Status.STATUS_OK);
|
||||
if (expectedStatus == Status.STATUS_OK)
|
||||
{
|
||||
return new JSONObject(response.getContentAsString());
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Method to get replies
|
||||
|
||||
private String getRepliesUrl(NodeRef nodeRef)
|
||||
{
|
||||
return getPostUrl(nodeRef) + "/replies";
|
||||
}
|
||||
private String getRepliesUrl(String postName)
|
||||
{
|
||||
return URL_FORUM_SITE_POST + postName + "/replies";
|
||||
}
|
||||
|
||||
private String getPostUrl(NodeRef nodeRef)
|
||||
{
|
||||
return URL_FORUM_NODE_POST_BASE + nodeRef.toString().replace("://", "/");
|
||||
}
|
||||
private String getPostsUrl(NodeRef nodeRef)
|
||||
{
|
||||
return URL_FORUM_NODE_POSTS_BASE + nodeRef.toString().replace("://", "/") + "/posts";
|
||||
}
|
||||
|
||||
private JSONObject createReply(NodeRef nodeRef, String title, String content, int expectedStatus)
|
||||
throws Exception
|
||||
{
|
||||
Response response = sendRequest(new GetRequest(URL_FORUM_POST + name), expectedStatus);
|
||||
if (expectedStatus == 200)
|
||||
{
|
||||
JSONObject result = new JSONObject(response.getContentAsString());
|
||||
return result.getJSONObject("item");
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
JSONObject reply = new JSONObject();
|
||||
reply.put("title", title);
|
||||
reply.put("content", content);
|
||||
Response response = sendRequest(new PostRequest(getRepliesUrl(nodeRef), reply.toString(), "application/json"), expectedStatus);
|
||||
|
||||
if (expectedStatus != 200)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
JSONObject result = new JSONObject(response.getContentAsString());
|
||||
return result.getJSONObject("item");
|
||||
}
|
||||
|
||||
private String getRepliesUrl(String nodeRef)
|
||||
{
|
||||
return "/api/forum/post/node/" + nodeRef.replace("://", "/") + "/replies";
|
||||
}
|
||||
|
||||
private String getPostUrl(String nodeRef)
|
||||
{
|
||||
return "/api/forum/post/node/" + nodeRef.replace("://", "/");
|
||||
}
|
||||
|
||||
private JSONObject createReply(String nodeRef, String title, String content, int expectedStatus)
|
||||
throws Exception
|
||||
{
|
||||
JSONObject reply = new JSONObject();
|
||||
reply.put("title", title);
|
||||
reply.put("content", content);
|
||||
Response response = sendRequest(new PostRequest(getRepliesUrl(nodeRef), reply.toString(), "application/json"), expectedStatus);
|
||||
|
||||
if (expectedStatus != 200)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
JSONObject result = new JSONObject(response.getContentAsString());
|
||||
return result.getJSONObject("item");
|
||||
}
|
||||
|
||||
private JSONObject updateComment(String nodeRef, String title, String content, int expectedStatus)
|
||||
throws Exception
|
||||
// TODO Non NodeRef version
|
||||
private JSONObject updateComment(NodeRef nodeRef, String title, String content,
|
||||
int expectedStatus) throws Exception
|
||||
{
|
||||
JSONObject comment = new JSONObject();
|
||||
comment.put("title", title);
|
||||
@@ -239,90 +341,248 @@ public class DiscussionServiceTest extends BaseWebScriptTest
|
||||
JSONObject result = new JSONObject(response.getContentAsString());
|
||||
return result.getJSONObject("item");
|
||||
}
|
||||
|
||||
|
||||
// Tests
|
||||
// -----------------------------------------------------
|
||||
// Tests
|
||||
// -----------------------------------------------------
|
||||
|
||||
public void testCreateForumPost() throws Exception
|
||||
{
|
||||
String title = "test";
|
||||
String content = "test";
|
||||
JSONObject item = createPost(title, content, 200);
|
||||
JSONObject item = createSitePost(title, content, Status.STATUS_OK);
|
||||
|
||||
// check that the values
|
||||
// Check that the values in the response are correct
|
||||
assertEquals(title, item.get("title"));
|
||||
assertEquals(content, item.get("content"));
|
||||
assertEquals(0, item.get("replyCount"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("createdOn"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("modifiedOn"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("author"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("permissions"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("url"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("repliesUrl"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("nodeRef"));
|
||||
|
||||
// Save some details
|
||||
String name = item.getString("name");
|
||||
NodeRef nodeRef = new NodeRef(item.getString("nodeRef"));
|
||||
|
||||
|
||||
// Fetch the post by name and check
|
||||
item = getPost(name, Status.STATUS_OK);
|
||||
|
||||
// fetch the post
|
||||
getPost(item.getString("name"), 200);
|
||||
assertEquals(title, item.get("title"));
|
||||
assertEquals(content, item.get("content"));
|
||||
assertEquals(0, item.get("replyCount"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("createdOn"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("modifiedOn"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("author"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("permissions"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("url"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("repliesUrl"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("nodeRef"));
|
||||
|
||||
|
||||
// Fetch the post by noderef and check
|
||||
item = getPost(nodeRef, Status.STATUS_OK);
|
||||
|
||||
assertEquals(title, item.get("title"));
|
||||
assertEquals(content, item.get("content"));
|
||||
assertEquals(0, item.get("replyCount"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("createdOn"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("modifiedOn"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("author"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("permissions"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("url"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("repliesUrl"));
|
||||
assertEquals("Invalid JSON " + item, true, item.has("nodeRef"));
|
||||
|
||||
|
||||
// Create another post, this time by noderef
|
||||
title = "By Node Title";
|
||||
content = "By Node Content";
|
||||
item = createNodePost(FORUM_NODE, title, content, Status.STATUS_OK);
|
||||
|
||||
assertEquals(title, item.get("title"));
|
||||
assertEquals(content, item.get("content"));
|
||||
assertEquals(0, item.get("replyCount"));
|
||||
|
||||
// Check it by noderef
|
||||
nodeRef = new NodeRef(item.getString("nodeRef"));
|
||||
item = getPost(nodeRef, Status.STATUS_OK);
|
||||
|
||||
assertEquals(title, item.get("title"));
|
||||
assertEquals(content, item.get("content"));
|
||||
assertEquals(0, item.get("replyCount"));
|
||||
}
|
||||
|
||||
public void testUpdateForumPost() throws Exception
|
||||
{
|
||||
String title = "test";
|
||||
String content = "test";
|
||||
JSONObject item = createPost(title, content, 200);
|
||||
JSONObject item = createSitePost(title, content, 200);
|
||||
|
||||
// check that the values
|
||||
assertEquals(title, item.get("title"));
|
||||
assertEquals(content, item.get("content"));
|
||||
assertEquals(false, item.getBoolean("isUpdated"));
|
||||
|
||||
// fetch the post
|
||||
getPost(item.getString("name"), 200);
|
||||
assertEquals(true, item.has("name"));
|
||||
String name = item.getString("name");
|
||||
assertEquals(true, item.has("nodeRef"));
|
||||
NodeRef nodeRef = new NodeRef(item.getString("nodeRef"));
|
||||
|
||||
String title2 = "test";
|
||||
String content2 = "test";
|
||||
item = updatePost(item.getString("nodeRef"), title2, content2, 200);
|
||||
|
||||
// check that the values
|
||||
assertEquals(title2, item.get("title"));
|
||||
assertEquals(content2, item.get("content"));
|
||||
assertEquals(true, item.getBoolean("isUpdated"));
|
||||
}
|
||||
|
||||
public void testGetAll() throws Exception
|
||||
{
|
||||
String url = URL_FORUM_POSTS;
|
||||
Response response = sendRequest(new GetRequest(url), 200);
|
||||
JSONObject result = new JSONObject(response.getContentAsString());
|
||||
|
||||
// we should have posts.size + drafts.size together
|
||||
assertEquals(this.posts.size(), result.getInt("total"));
|
||||
}
|
||||
|
||||
public void testDeleteToplevelPost() throws Exception
|
||||
{
|
||||
// create a post
|
||||
JSONObject item = createPost("test", "test", 200);
|
||||
String name = item.getString("name");
|
||||
|
||||
// delete the post
|
||||
Response response = sendRequest(new DeleteRequest(URL_FORUM_POST + name), 200);
|
||||
|
||||
// try to fetch it again
|
||||
sendRequest(new GetRequest(URL_FORUM_POST + name), 404);
|
||||
}
|
||||
// fetch the post by name
|
||||
item = getPost(item.getString("name"), 200);
|
||||
assertEquals(title, item.get("title"));
|
||||
assertEquals(content, item.get("content"));
|
||||
assertEquals(false, item.getBoolean("isUpdated"));
|
||||
|
||||
// Fetch the post by noderef
|
||||
item = getPost(nodeRef, 200);
|
||||
assertEquals(title, item.get("title"));
|
||||
assertEquals(content, item.get("content"));
|
||||
assertEquals(false, item.getBoolean("isUpdated"));
|
||||
|
||||
|
||||
// Update it by name
|
||||
String title2 = "updated test";
|
||||
String content2 = "test updated";
|
||||
item = updatePost(name, title2, content2, 200);
|
||||
|
||||
// Check the response
|
||||
assertEquals(title2, item.get("title"));
|
||||
assertEquals(content2, item.get("content"));
|
||||
assertEquals(name, item.get("name"));
|
||||
assertEquals(nodeRef.toString(), item.get("nodeRef"));
|
||||
assertEquals(true, item.getBoolean("isUpdated"));
|
||||
|
||||
// Fetch and check
|
||||
item = getPost(nodeRef, 200);
|
||||
assertEquals(title2, item.get("title"));
|
||||
assertEquals(content2, item.get("content"));
|
||||
assertEquals(name, item.get("name"));
|
||||
assertEquals(nodeRef.toString(), item.get("nodeRef"));
|
||||
assertEquals(true, item.getBoolean("isUpdated"));
|
||||
|
||||
|
||||
// Update it again, this time by noderef
|
||||
String title3 = "updated 3 test";
|
||||
String content3 = "test 3 updated";
|
||||
item = updatePost(nodeRef, title3, content3, 200);
|
||||
|
||||
// Check that the values returned are correct
|
||||
assertEquals(title3, item.get("title"));
|
||||
assertEquals(content3, item.get("content"));
|
||||
assertEquals(name, item.get("name"));
|
||||
assertEquals(nodeRef.toString(), item.get("nodeRef"));
|
||||
assertEquals(true, item.getBoolean("isUpdated"));
|
||||
|
||||
// Fetch and re-check
|
||||
item = getPost(nodeRef, 200);
|
||||
assertEquals(title3, item.get("title"));
|
||||
assertEquals(content3, item.get("content"));
|
||||
assertEquals(name, item.get("name"));
|
||||
assertEquals(nodeRef.toString(), item.get("nodeRef"));
|
||||
assertEquals(true, item.getBoolean("isUpdated"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that the permissions details included with topics and
|
||||
* posts are correct
|
||||
*/
|
||||
public void testPermissions() throws Exception
|
||||
{
|
||||
// Create a post, and check the details on it
|
||||
JSONObject item = createSitePost("test", "test", Status.STATUS_OK);
|
||||
String name = item.getString("name");
|
||||
|
||||
JSONObject perms = item.getJSONObject("permissions");
|
||||
assertEquals(true, perms.getBoolean("edit"));
|
||||
assertEquals(true, perms.getBoolean("reply"));
|
||||
assertEquals(true, perms.getBoolean("delete"));
|
||||
|
||||
// Check on a fetch too
|
||||
item = getPost(name, Status.STATUS_OK);
|
||||
perms = item.getJSONObject("permissions");
|
||||
assertEquals(true, perms.getBoolean("edit"));
|
||||
assertEquals(true, perms.getBoolean("reply"));
|
||||
assertEquals(true, perms.getBoolean("delete"));
|
||||
|
||||
|
||||
// Switch to another user, see what they see
|
||||
this.authenticationComponent.setCurrentUser(USER_TWO);
|
||||
|
||||
item = getPost(name, Status.STATUS_OK);
|
||||
perms = item.getJSONObject("permissions");
|
||||
assertEquals(false, perms.getBoolean("edit"));
|
||||
assertEquals(true, perms.getBoolean("reply"));
|
||||
assertEquals(false, perms.getBoolean("delete"));
|
||||
|
||||
|
||||
// Remove the user from the site, see the change
|
||||
this.siteService.removeMembership(SITE_SHORT_NAME_DISCUSSION, USER_TWO);
|
||||
|
||||
item = getPost(name, Status.STATUS_OK);
|
||||
perms = item.getJSONObject("permissions");
|
||||
assertEquals(false, perms.getBoolean("edit"));
|
||||
assertEquals(false, perms.getBoolean("reply"));
|
||||
assertEquals(false, perms.getBoolean("delete"));
|
||||
|
||||
|
||||
// Make the site private, will vanish
|
||||
SiteInfo siteInfo = siteService.getSite(SITE_SHORT_NAME_DISCUSSION);
|
||||
siteInfo.setVisibility(SiteVisibility.PRIVATE);
|
||||
this.authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
|
||||
this.siteService.updateSite(siteInfo);
|
||||
this.authenticationComponent.setCurrentUser(USER_TWO);
|
||||
|
||||
// On a private site we're not a member of, shouldn't be visable at all
|
||||
getPost(name, Status.STATUS_NOT_FOUND);
|
||||
}
|
||||
|
||||
public void testAddReply() throws Exception
|
||||
{
|
||||
// create a root post
|
||||
JSONObject item = createPost("test", "test", 200);
|
||||
// Create a root post
|
||||
JSONObject item = createSitePost("test", "test", Status.STATUS_OK);
|
||||
String postName = item.getString("name");
|
||||
String postNodeRef = item.getString("nodeRef");
|
||||
NodeRef topicNodeRef = new NodeRef(item.getString("nodeRef"));
|
||||
|
||||
// add a reply
|
||||
JSONObject reply = createReply(postNodeRef, "test", "test", 200);
|
||||
String replyNodeRef = reply.getString("nodeRef");
|
||||
// Add a reply
|
||||
JSONObject reply = createReply(topicNodeRef, "test", "test", Status.STATUS_OK);
|
||||
NodeRef replyNodeRef = new NodeRef(reply.getString("nodeRef"));
|
||||
assertEquals("test", reply.getString("title"));
|
||||
assertEquals("test", reply.getString("content"));
|
||||
|
||||
// add a reply to the reply
|
||||
// Add a reply to the reply
|
||||
JSONObject reply2 = createReply(replyNodeRef, "test2", "test2", 200);
|
||||
NodeRef reply2NodeRef = new NodeRef(reply2.getString("nodeRef"));
|
||||
assertEquals("test2", reply2.getString("title"));
|
||||
assertEquals("test2", reply2.getString("content"));
|
||||
|
||||
// fetch all replies for the post
|
||||
Response response = sendRequest(new GetRequest(getRepliesUrl(postNodeRef)), 200);
|
||||
|
||||
// Check things were correctly setup. These should all be siblings
|
||||
// of each other, with relations between the replies
|
||||
assertEquals(ForumModel.TYPE_TOPIC, nodeService.getType(topicNodeRef));
|
||||
assertEquals(ForumModel.TYPE_POST, nodeService.getType(replyNodeRef));
|
||||
assertEquals(ForumModel.TYPE_POST, nodeService.getType(reply2NodeRef));
|
||||
assertEquals(topicNodeRef, nodeService.getPrimaryParent(replyNodeRef).getParentRef());
|
||||
assertEquals(topicNodeRef, nodeService.getPrimaryParent(reply2NodeRef).getParentRef());
|
||||
|
||||
// Reply 2 should have an assoc to Reply 1
|
||||
assertEquals(0, nodeService.getSourceAssocs(reply2NodeRef, RegexQNamePattern.MATCH_ALL).size());
|
||||
assertEquals(1, nodeService.getTargetAssocs(reply2NodeRef, RegexQNamePattern.MATCH_ALL).size());
|
||||
assertEquals(replyNodeRef, nodeService.getTargetAssocs(reply2NodeRef, RegexQNamePattern.MATCH_ALL).get(0).getTargetRef());
|
||||
|
||||
assertEquals(1, nodeService.getSourceAssocs(replyNodeRef, RegexQNamePattern.MATCH_ALL).size());
|
||||
assertEquals(1, nodeService.getTargetAssocs(replyNodeRef, RegexQNamePattern.MATCH_ALL).size());
|
||||
assertEquals(reply2NodeRef, nodeService.getSourceAssocs(replyNodeRef, RegexQNamePattern.MATCH_ALL).get(0).getSourceRef());
|
||||
|
||||
|
||||
// Fetch all replies for the post
|
||||
Response response = sendRequest(new GetRequest(getRepliesUrl(topicNodeRef)), 200);
|
||||
logger.debug(response.getContentAsString());
|
||||
JSONObject result = new JSONObject(response.getContentAsString());
|
||||
// check the number of replies
|
||||
@@ -336,46 +596,144 @@ public class DiscussionServiceTest extends BaseWebScriptTest
|
||||
|
||||
public void testUpdateReply() throws Exception
|
||||
{
|
||||
// create a root post
|
||||
JSONObject item = createPost("test", "test", 200);
|
||||
String postName = item.getString("name");
|
||||
String postNodeRef = item.getString("nodeRef");
|
||||
|
||||
// add a reply
|
||||
JSONObject reply = createReply(postNodeRef, "test", "test", 200);
|
||||
String replyNodeRef = reply.getString("nodeRef");
|
||||
assertEquals("test", reply.getString("title"));
|
||||
assertEquals("test", reply.getString("content"));
|
||||
assertEquals(false, reply.getBoolean("isUpdated"));
|
||||
|
||||
// now update it
|
||||
JSONObject reply2 = updatePost(reply.getString("nodeRef"), "test2", "test2", 200);
|
||||
assertEquals("test2", reply2.getString("title"));
|
||||
assertEquals("test2", reply2.getString("content"));
|
||||
assertEquals(true, reply2.getBoolean("isUpdated"));
|
||||
// Create a root post
|
||||
JSONObject item = createSitePost("test", "test", Status.STATUS_OK);
|
||||
String postName = item.getString("name");
|
||||
NodeRef postNodeRef = new NodeRef(item.getString("nodeRef"));
|
||||
assertEquals("test", item.getString("title"));
|
||||
assertEquals("test", item.getString("content"));
|
||||
assertEquals(false, item.getBoolean("isUpdated"));
|
||||
|
||||
|
||||
// Add a reply to it
|
||||
JSONObject reply = createReply(postNodeRef, "rtest", "rtest", Status.STATUS_OK);
|
||||
NodeRef replyNodeRef = new NodeRef(reply.getString("nodeRef"));
|
||||
assertEquals("rtest", reply.getString("title"));
|
||||
assertEquals("rtest", reply.getString("content"));
|
||||
assertEquals(false, reply.getBoolean("isUpdated"));
|
||||
|
||||
|
||||
// Now update the reply
|
||||
JSONObject reply2 = updatePost(replyNodeRef, "test2", "test2", Status.STATUS_OK);
|
||||
assertEquals("test2", reply2.getString("title"));
|
||||
assertEquals("test2", reply2.getString("content"));
|
||||
assertEquals(true, reply2.getBoolean("isUpdated"));
|
||||
|
||||
// Fetch it to check
|
||||
reply2 = getPost(replyNodeRef, Status.STATUS_OK);
|
||||
assertEquals("test2", reply2.getString("title"));
|
||||
assertEquals("test2", reply2.getString("content"));
|
||||
assertEquals(true, reply2.getBoolean("isUpdated"));
|
||||
|
||||
|
||||
// Ensure the original post wasn't changed
|
||||
item = getPost(postName, Status.STATUS_OK);
|
||||
assertEquals("test", item.getString("title"));
|
||||
assertEquals("test", item.getString("content"));
|
||||
assertEquals(false, item.getBoolean("isUpdated"));
|
||||
}
|
||||
|
||||
public void testDeleteToplevelPost() throws Exception
|
||||
{
|
||||
// Create two posts
|
||||
JSONObject item1 = createSitePost("test1", "test1", Status.STATUS_OK);
|
||||
JSONObject item2 = createSitePost("test2", "test2", Status.STATUS_OK);
|
||||
String name1 = item1.getString("name");
|
||||
NodeRef nodeRef1 = new NodeRef(item1.getString("nodeRef"));
|
||||
NodeRef nodeRef2 = new NodeRef(item2.getString("nodeRef"));
|
||||
|
||||
// The node references returned correspond to the topics
|
||||
assertEquals(ForumModel.TYPE_TOPIC, nodeService.getType(nodeRef1));
|
||||
assertEquals(ForumModel.TYPE_TOPIC, nodeService.getType(nodeRef2));
|
||||
|
||||
|
||||
// Delete one post by name
|
||||
deletePost(name1, Status.STATUS_OK);
|
||||
|
||||
// Check it went
|
||||
getPost(name1, Status.STATUS_NOT_FOUND);
|
||||
|
||||
|
||||
// Delete the other post by noderef
|
||||
deletePost(nodeRef2, Status.STATUS_OK);
|
||||
|
||||
// Check it went
|
||||
getPost(nodeRef2, Status.STATUS_NOT_FOUND);
|
||||
|
||||
|
||||
// Check all the nodes have gone
|
||||
assertEquals(false, nodeService.exists(nodeRef1));
|
||||
assertEquals(false, nodeService.exists(nodeRef2));
|
||||
}
|
||||
|
||||
/*
|
||||
public void testDeleteReplyPost() throws Exception
|
||||
{
|
||||
// create a root post
|
||||
JSONObject item = createPost("test", "test", 200);
|
||||
String postName = item.getString("name");
|
||||
String postNodeRef = item.getString("nodeRef");
|
||||
|
||||
// add a reply
|
||||
JSONObject reply = createReply(postNodeRef, "test", "test", 200);
|
||||
String replyNodeRef = reply.getString("nodeRef");
|
||||
assertEquals("test", reply.getString("title"));
|
||||
assertEquals("test", reply.getString("content"));
|
||||
|
||||
// delete the reply
|
||||
deleteRequest(getPostUrl(replyNodeRef), 200);
|
||||
// Create a root post
|
||||
JSONObject item = createSitePost("test", "test", Status.STATUS_OK);
|
||||
String postName = item.getString("name");
|
||||
NodeRef postNodeRef = new NodeRef(item.getString("nodeRef"));
|
||||
|
||||
// It doesn't have any replies yet
|
||||
assertEquals(0, item.getInt("totalReplyCount"));
|
||||
assertEquals(0, item.getInt("replyCount"));
|
||||
|
||||
|
||||
// Add a reply
|
||||
JSONObject reply = createReply(postNodeRef, "testR", "testR", Status.STATUS_OK);
|
||||
NodeRef replyNodeRef = new NodeRef(reply.getString("nodeRef"));
|
||||
String replyName = reply.getString("name");
|
||||
assertEquals("testR", reply.getString("title"));
|
||||
assertEquals("testR", reply.getString("content"));
|
||||
|
||||
// Fetch the reply and check
|
||||
reply = getPost(replyNodeRef, Status.STATUS_OK);
|
||||
assertEquals("testR", reply.getString("title"));
|
||||
assertEquals("testR", reply.getString("content"));
|
||||
|
||||
// Note - you can't fetch a reply by name, only by noderef
|
||||
// It only works for primary posts as they share the topic name
|
||||
getPost(replyName, Status.STATUS_NOT_FOUND);
|
||||
|
||||
|
||||
// Check the main post, ensure the replies show up
|
||||
item = getPost(postName, Status.STATUS_OK);
|
||||
assertEquals(1, item.getInt("totalReplyCount"));
|
||||
assertEquals(1, item.getInt("replyCount"));
|
||||
|
||||
// fetch again the top level post
|
||||
item = getPost(postName, 200);
|
||||
assertEquals(0, item.getInt("totalReplyCount"));
|
||||
assertEquals(0, item.getInt("replyCount"));
|
||||
|
||||
// Delete the reply
|
||||
deletePost(replyNodeRef, Status.STATUS_OK);
|
||||
|
||||
// These nodes don't really get deleted at the moment
|
||||
// Due to threading, we just add special marker text
|
||||
// TODO Really we should probably delete posts with no attached replies
|
||||
reply = getPost(replyNodeRef, Status.STATUS_OK);
|
||||
assertEquals(DELETED_REPLY_POST_MARKER, reply.get("title"));
|
||||
assertEquals(DELETED_REPLY_POST_MARKER, reply.get("content"));
|
||||
|
||||
|
||||
// Fetch the top level post again, replies stay because they
|
||||
// haven't really been deleted...
|
||||
// TODO Really we should probably delete posts with no attached replies
|
||||
item = getPost(postName, Status.STATUS_OK);
|
||||
assertEquals(1, item.getInt("totalReplyCount"));
|
||||
assertEquals(1, item.getInt("replyCount"));
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Test for the various listings:
|
||||
* All, New, Hot (Most Active), Mine
|
||||
*/
|
||||
public void testListings() throws Exception
|
||||
{
|
||||
String url = URL_FORUM_SITE_POSTS;
|
||||
Response response = sendRequest(new GetRequest(url), 200);
|
||||
JSONObject result = new JSONObject(response.getContentAsString());
|
||||
|
||||
// TODO Expand
|
||||
|
||||
// we should have posts.size + drafts.size together
|
||||
assertEquals(this.posts.size(), result.getInt("total"));
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user