/*
* Copyright (C) 2003-2012 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* 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, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.forum.service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.exoplatform.forum.base.BaseForumServiceTestCase;
import org.exoplatform.forum.service.impl.model.PostFilter;
import org.exoplatform.forum.service.impl.model.PostListAccess;
public class PostTestCase extends BaseForumServiceTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
}
@Override
public void tearDown() throws Exception {
//
super.tearDown();
}
public void testPost() throws Exception {
// set Data
initDefaultData();
List<Post> posts = new ArrayList<Post>();
for (int i = 0; i < 25; ++i) {
Post post = createdPost();
posts.add(post);
forumService_.savePost(categoryId, forumId, topicId, post, true, new MessageBuilder());
}
// getPost
assertNotNull(forumService_.getPost(categoryId, forumId, topicId, posts.get(0).getId()));
assertEquals(25, forumService_.getTopic(categoryId, forumId, topicId, "").getPostCount());
// get ListPost
JCRPageList pagePosts = forumService_.getPosts(categoryId, forumId, topicId, "", "", "", "root");
assertEquals(posts.size() + 1, pagePosts.getAvailable());// size = 26 (first post and new postList)
List page1 = pagePosts.getPage(1);
assertEquals(page1.size(), 10);
List page3 = pagePosts.getPage(3);
assertEquals(page3.size(), 6);
// getPost by Ip
JCRPageList pageIpPosts = forumService_.getListPostsByIP("192.168.1.11", null);
assertEquals(pageIpPosts.getAvailable(), 25);// size = 25 (not content first post)
// update Post First
Post newPost = (Post) pagePosts.getPage(1).get(1);
newPost.setMessage("New message");
forumService_.savePost(categoryId, forumId, topicId, newPost, false, new MessageBuilder());
assertEquals("New message", forumService_.getPost(categoryId, forumId, topicId, newPost.getId()).getMessage());
// test movePost
Topic topicnew = createdTopic("root");
forumService_.saveTopic(categoryId, forumId, topicnew, true, false, new MessageBuilder());
topicnew = forumService_.getTopic(categoryId, forumId, topicnew.getId(), "root");
forumService_.movePost(new String[] { newPost.getPath() }, topicnew.getPath(), false, "test mail content", "");
assertEquals(1, forumService_.getTopic(categoryId, forumId, topicnew.getId(), "").getPostCount());
assertNotNull(forumService_.getPost(categoryId, forumId, topicnew.getId(), newPost.getId()));
// test remove Post return post
assertNotNull(forumService_.removePost(categoryId, forumId, topicnew.getId(), newPost.getId()));
assertNull(forumService_.getPost(categoryId, forumId, topicnew.getId(), newPost.getId()));
assertEquals(24, forumService_.getTopic(categoryId, forumId, topicId, "").getPostCount());
assertEquals(0, forumService_.getTopic(categoryId, forumId, topicnew.getId(), "").getPostCount());
// getViewPost
}
public void testPostListAccess() throws Exception {
// set Data
initDefaultData();
List<Post> posts = new ArrayList<Post>();
for (int i = 0; i < 25; ++i) {
Post post = createdPost();
posts.add(post);
forumService_.savePost(categoryId, forumId, topicId, post, true, new MessageBuilder());
}
// getPost
assertNotNull(forumService_.getPost(categoryId, forumId, topicId, posts.get(0).getId()));
// get ListPost
PostListAccess listAccess = (PostListAccess) forumService_.getPosts(new PostFilter(categoryId, forumId, topicId, "", "", "", "root"));
listAccess.initialize(10, 1);
assertEquals(listAccess.getSize(), posts.size() + 1);// size = 26 (first post and new postList)
//Page 1
List<Post> got = Arrays.asList(listAccess.load(1));
assertEquals(got.size(), 10);
//Page 2
got = Arrays.asList(listAccess.load(2));
assertEquals(got.size(), 10);
//Page 3
got = Arrays.asList(listAccess.load(3));
assertEquals(got.size(), 6);
}
public void testGetPostByUser() throws Exception {
// set Data
initDefaultData();
List<Post> posts = new ArrayList<Post>();
for (int i = 0; i < 25; ++i) {
Post post = createdPost();
posts.add(post);
forumService_.savePost(categoryId, forumId, topicId, post, true, new MessageBuilder());
}
// getPost
assertNotNull(forumService_.getPost(categoryId, forumId, topicId, posts.get(0).getId()));
JCRPageList pageList = forumService_.getPagePostByUser("root", "root", true, "exo:createdDate");
pageList.setPageSize(10);
List<Post> got = pageList.getPage(0);
assertEquals(10, got.size());
//
got = pageList.getPage(1);
assertEquals(10, got.size());
}
public void testGetPostByUserAbnormal() throws Exception {
// get ListPost
JCRPageList pageList;
try {
pageList = forumService_.getPagePostByUser(null, "root", true, "exo:createdDate");
fail("userName");
} catch (Exception e) {
}
try {
pageList = forumService_.getPagePostByUser("root", null, true, "exo:createdDate");
fail("userLogin");
} catch (Exception e) {
}
try {
pageList = forumService_.getPagePostByUser(null, null, true, "exo:createdDate");
fail();
} catch (Exception e) {
}
}
public void testGetPostForSplitTopic() throws Exception {
initDefaultData();
List<Post> posts = new ArrayList<Post>();
for (int i = 0; i < 5; ++i) {
Post post = createdPost();
posts.add(post);
forumService_.savePost(categoryId, forumId, topicId, post, true, new MessageBuilder());
}
String topicPath = categoryId + "/" + forumId + "/" + topicId;
JCRPageList pageList = forumService_.getPostForSplitTopic(topicPath);
assertEquals(5, pageList.getAvailable());
}
public void testCensoredPost() throws Exception {
initDefaultData();
Topic topic = forumService_.getTopic(categoryId, forumId, topicId, "");
//number of posts is 0
assertEquals(0, topic.getPostCount());
//add new post
Post post = createdPost();
forumService_.savePost(categoryId, forumId, topicId, post, true, new MessageBuilder());
topic = forumService_.getTopic(categoryId, forumId, topicId, "");
assertEquals(1, topic.getPostCount());
//add new pending post
post = createdPost();
post.setIsWaiting(true);
forumService_.savePost(categoryId, forumId, topicId, post, true, new MessageBuilder());
topic = forumService_.getTopic(categoryId, forumId, topicId, "");
assertEquals(1, topic.getPostCount());
//approve the pending post
post.setIsWaiting(false);
List<Post> posts = new ArrayList<Post>();
posts.add(post);
forumService_.modifyPost(posts, 5);
topic = forumService_.getTopic(categoryId, forumId, topicId, "");
assertEquals(2, topic.getPostCount());
}
public void testAddPostInSpaceContext() throws Exception {
String groupId = "/spaces/new_space";
String groupName = "new_space";
String cateSpaceId = Utils.CATEGORY + "spaces";
String forumSpaceId = Utils.FORUM_SPACE_ID_PREFIX + groupName;
Category category = createCategory(cateSpaceId);
category.setCategoryName("spaces");
category.setUserPrivate(new String[] { groupId });
forumService_.saveCategory(category, true);
Forum forum = createdForum();
forum.setForumName("New Space");
forum.setId(forumSpaceId);
forumService_.saveForum(cateSpaceId, forum, true);
Topic topicSpace = createdTopic("mary");
forumService_.saveTopic(cateSpaceId, forumSpaceId, topicSpace, true, false, new MessageBuilder());
Post post = createdPost();
forumService_.savePost(cateSpaceId, forumSpaceId, topicSpace.getId(), post, true, new MessageBuilder());
topicSpace = forumService_.getTopic(cateSpaceId, forumSpaceId, topicSpace.getId(), "");
assertEquals(1, topicSpace.getPostCount());
}
public void testAddPostsInSpaceContext() throws Exception {
String groupId = "/spaces/new_space";
String groupName = "new_space";
String cateSpaceId = Utils.CATEGORY + "spaces";
String forumSpaceId = Utils.FORUM_SPACE_ID_PREFIX + groupName;
Category category = createCategory(cateSpaceId);
category.setCategoryName("spaces");
category.setUserPrivate(new String[] { groupId });
forumService_.saveCategory(category, true);
Forum forum = createdForum();
forum.setForumName("New Space");
forum.setId(forumSpaceId);
forumService_.saveForum(cateSpaceId, forum, true);
Topic topicSpace = createdTopic("mary");
forumService_.saveTopic(cateSpaceId, forumSpaceId, topicSpace, true, false, new MessageBuilder());
Post post = createdPost();
forumService_.savePost(cateSpaceId, forumSpaceId, topicSpace.getId(), post, true, new MessageBuilder());
topicSpace = forumService_.getTopic(cateSpaceId, forumSpaceId, topicSpace.getId(), "");
assertEquals(1, topicSpace.getPostCount());
post = createdPost();
forumService_.savePost(cateSpaceId, forumSpaceId, topicSpace.getId(), post, true, new MessageBuilder());
topicSpace = forumService_.getTopic(cateSpaceId, forumSpaceId, topicSpace.getId(), "");
assertEquals(2, topicSpace.getPostCount());
}
}