/* * 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 org.apache.commons.collections.IteratorUtils; import org.apache.commons.io.FileUtils; import org.exoplatform.forum.base.BaseForumServiceTestCase; import org.exoplatform.forum.common.UserHelper; import org.exoplatform.forum.service.impl.JCRDataStorage; import org.exoplatform.services.organization.Group; import org.exoplatform.services.organization.GroupHandler; import org.exoplatform.services.organization.MembershipType; import org.exoplatform.services.organization.OrganizationService; import org.exoplatform.services.organization.User; import org.exoplatform.services.organization.UserStatus; import javax.jcr.ImportUUIDBehavior; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ForumServiceTestCase extends BaseForumServiceTestCase { @Override public void setUp() throws Exception { super.setUp(); // for (String userId : Arrays.asList(USER_DEMO, USER_JOHN, USER_ROOT, "mary", "ghost", "paul")) { UserProfile profile = createdUserProfile(userId); profile.setUserRole(2l); forumService_.saveUserProfile(profile, true, true); } } @Override public void tearDown() throws Exception { sendNotificationManager.clear(); queryLastPostManager.clear(); // removeAllData(); super.tearDown(); } public void testCategoriesListWithoutSpacesCategory() throws Exception { // Given String cateId = Utils.CATEGORY_SPACE_ID_PREFIX; Category categorySpace = createCategory(cateId); categorySpace.setCategoryName("spaces"); forumService_.saveCategory(categorySpace, true); Category category = createCategory(getId(Utils.CATEGORY)); forumService_.saveCategory(category, true); // When List<Category> categories = forumService_.getCategories(false); // Then assertFalse(categories.contains(categorySpace)); assertTrue(categories.contains(category)); } public void testCategoriesListWithSpacesCategory() throws Exception { // Given String cateId = Utils.CATEGORY_SPACE_ID_PREFIX; Category categorySpace = createCategory(cateId); categorySpace.setCategoryName("spaces"); forumService_.saveCategory(categorySpace, true); Category category = createCategory(getId(Utils.CATEGORY)); forumService_.saveCategory(category, true); // When List<Category> categories = forumService_.getCategories(true); // Then assertTrue(categories.contains(categorySpace)); assertTrue(categories.contains(category)); } public void testCategories() throws Exception { // Given String cateId = Utils.CATEGORY_SPACE_ID_PREFIX; Category categorySpace = createCategory(cateId); categorySpace.setCategoryName("spaces"); forumService_.saveCategory(categorySpace, true); Category category = createCategory(getId(Utils.CATEGORY)); forumService_.saveCategory(category, true); // When List<Category> categories = forumService_.getCategories(); // Then assertTrue(categories.contains(categorySpace)); assertTrue(categories.contains(category)); } public void testGetObjectNameByPathAfterDeleted() throws Exception { Category cate = createCategory(getId(Utils.CATEGORY)); forumService_.saveCategory(cate, true); String catId = cate.getId(); Forum forum = createdForum(); forumService_.saveForum(catId, forum, true); String forumId = forum.getId(); forumService_.removeCategory(catId); Object objectForum = forumService_.getObjectNameByPath(catId+"/"+forumId); assertNull(objectForum); } public void testForumStatic() throws Exception { // resetAllUserProfile(); ForumStatistic forumStatistic = forumService_.getForumStatistic(); assertNotNull(forumStatistic); assertEquals(8, forumStatistic.getMembersCount()); forumStatistic.setPostCount(20); forumStatistic.setTopicCount(10); forumService_.saveForumStatistic(forumStatistic); forumStatistic = forumService_.getForumStatistic(); assertEquals(10, forumStatistic.getTopicCount()); assertEquals(20, forumStatistic.getPostCount()); // reset forumService_.saveForumStatistic(new ForumStatistic()); // make one topic initDefaultData(); // create 10 topics and 10 posts for each topic. On each topic contain one post is first post. for (int i = 0; i < 10; i++) { forumService_.saveTopic(categoryId, forumId, createdTopic(USER_DEMO), true, false, new MessageBuilder()); forumService_.savePost(categoryId, forumId, topicId, createdPost(), true, new MessageBuilder()); } forumStatistic = forumService_.getForumStatistic(); // we have 11 topics and 21 posts. assertEquals(11, forumStatistic.getTopicCount()); assertEquals(21, forumStatistic.getPostCount()); UserProfile profile = forumService_.getUserInfo(USER_ROOT); assertEquals(1, profile.getTotalTopic()); assertEquals(11, profile.getTotalPost()); profile = forumService_.getUserInfo(USER_DEMO); assertEquals(10, profile.getTotalTopic()); assertEquals(10, profile.getTotalPost()); } public void testForumAdministration() throws Exception { ForumAdministration administration = createForumAdministration(); forumService_.saveForumAdministration(administration); administration = forumService_.getForumAdministration(); assertNotNull(administration); assertEquals(administration.getForumSortBy(), "forumName"); } public void testGetObjectNameByPath() throws Exception { // set Data initDefaultData(); // Test get object by path String topicPath = forumService_.getForumHomePath(); topicPath = categoryId + "/" + forumId + "/" + topicId; assertNotNull(forumService_.getObjectNameByPath(topicPath)); // Test get object by path in case the object has been updated // by saveForum String forumPath = categoryId + "/" + forumId; Forum originalForum = convertToForum(forumService_.getObjectNameByPath(forumPath)); assertNotNull(originalForum); originalForum.setForumName("aaa"); forumService_.saveForum(categoryId, originalForum, false); Forum updatedForum = convertToForum(forumService_.getObjectNameByPath(forumPath)); assertNotNull(updatedForum); assertEquals(originalForum.getForumName(), updatedForum.getForumName()); // by modifyForum originalForum.setIsLock(true); forumService_.modifyForum(originalForum, Utils.LOCK); updatedForum = convertToForum(forumService_.getObjectNameByPath(forumPath)); assertNotNull(updatedForum); assertTrue(updatedForum.getIsLock()); // by saveModerateOfForums List<String> list = new ArrayList<String>(); list.add(forumPath); forumService_.saveModerateOfForums(list, "demo", false); updatedForum = convertToForum(forumService_.getObjectNameByPath(forumPath)); assertNotNull(updatedForum); list.clear(); list.addAll(Arrays.asList(updatedForum.getModerators())); assertTrue(list.contains("demo")); // by moveForum Category cate = createCategory(getId(Utils.CATEGORY)); forumService_.saveCategory(cate, true); Category cateNew = forumService_.getCategory(cate.getId()); List<Forum> forums = new ArrayList<Forum>(); forums.add(originalForum); forumService_.moveForum(forums, cateNew.getPath()); originalForum = convertToForum(forumService_.getObjectNameByPath(forumPath)); assertNull(originalForum); updatedForum = convertToForum(forumService_.getObjectNameByPath(cateNew.getId() + "/" + forumId)); assertNotNull(updatedForum); // by removeForum forumService_.removeForum(cateNew.getId(), forumId); updatedForum = convertToForum(forumService_.getObjectNameByPath(cateNew.getId() + "/" + forumId)); assertNull(updatedForum); } public void testGetObjectNameById() throws Exception { // set Data initDefaultData(); UserProfile profile = createdUserProfile(USER_DEMO); forumService_.saveUserProfile(profile, false, false); // Test get object by id assertNotNull(forumService_.getObjectNameById(forumId, Utils.FORUM)); // Test get object by id in case the object has been updated // by saveForum Forum originalForum = convertToForum(forumService_.getObjectNameById(forumId, Utils.FORUM)); assertNotNull(originalForum); originalForum.setForumName("aaa"); forumService_.saveForum(categoryId, originalForum, false); Forum updatedForum = convertToForum(forumService_.getObjectNameById(forumId, Utils.FORUM)); assertNotNull(updatedForum); assertEquals(originalForum.getForumName(), updatedForum.getForumName()); // by modifyForum originalForum.setIsLock(true); forumService_.modifyForum(originalForum, Utils.LOCK); updatedForum = convertToForum(forumService_.getObjectNameById(forumId, Utils.FORUM)); assertNotNull(updatedForum); assertTrue(updatedForum.getIsLock()); // by saveModerateOfForums List<String> list = new ArrayList<String>(); list.add(categoryId + "/" + forumId); forumService_.saveModerateOfForums(list, USER_DEMO, false); updatedForum = convertToForum(forumService_.getObjectNameById(forumId, Utils.FORUM)); assertNotNull(updatedForum); list.clear(); list.addAll(Arrays.asList(updatedForum.getModerators())); assertTrue(list.contains(USER_DEMO)); // by moveForum Category cate = createCategory(getId(Utils.CATEGORY)); forumService_.saveCategory(cate, true); Category cateNew = forumService_.getCategory(cate.getId()); List<Forum> forums = new ArrayList<Forum>(); forums.add(originalForum); forumService_.moveForum(forums, cateNew.getPath()); updatedForum = convertToForum(forumService_.getObjectNameById(forumId, Utils.FORUM)); assertNotNull(updatedForum); assertEquals(cateNew.getPath() + "/" + forumId, updatedForum.getPath()); // by removeForum forumService_.removeForum(cateNew.getId(), forumId); updatedForum = convertToForum(forumService_.getObjectNameById(forumId, Utils.FORUM)); assertNull(updatedForum); } // Private Message public void testPrivateMessage() throws Exception { ForumPrivateMessage privateMessage = new ForumPrivateMessage(); privateMessage.setFrom("demo"); privateMessage.setIsUnread(false); privateMessage.setName("privateMessage Name"); privateMessage.setMessage("Content privateMessage"); privateMessage.setSendTo("root"); // savePtivateMs forumService_.savePrivateMessage(privateMessage); // get Private Message is SEND_MESSAGE JCRPageList pageList = forumService_.getPrivateMessage("demo", Utils.SEND_MESSAGE); assertNotNull(pageList); assertEquals(pageList.getAvailable(), 1); privateMessage = (ForumPrivateMessage) pageList.getPage(1).get(0); String privateMessageId_SEND = privateMessage.getId(); // get Private Message is RECEIVE_MESSAGE pageList = forumService_.getPrivateMessage("root", Utils.RECEIVE_MESSAGE); assertNotNull(pageList); assertEquals(pageList.getAvailable(), 1); privateMessage = (ForumPrivateMessage) pageList.getPage(1).get(0); String privateMessageId_RECEIVE = privateMessage.getId(); // long t = forumService_.getNewPrivateMessage("root"); assertEquals(t, 1); // Remove PrivateMessage forumService_.removePrivateMessage(privateMessageId_SEND, "demo", Utils.SEND_MESSAGE); pageList = forumService_.getPrivateMessage("demo", Utils.SEND_MESSAGE); assertEquals(pageList.getAvailable(), 0); forumService_.removePrivateMessage(privateMessageId_RECEIVE, "root", Utils.RECEIVE_MESSAGE); pageList = forumService_.getPrivateMessage("root", Utils.RECEIVE_MESSAGE); assertEquals(pageList.getAvailable(), 0); // } // BookMark public void testBookMark() throws Exception { // set Data initDefaultData(); // add bookmark String bookMark = Utils.CATEGORY + "//" + categoryId; forumService_.saveUserBookmark("root", bookMark, true); bookMark = Utils.FORUM + "//" + categoryId + "/" + forumId; forumService_.saveUserBookmark("root", bookMark, true); // get bookmark List<String> bookMarks = new ArrayList<String>(); bookMarks.addAll(forumService_.getBookmarks("root")); assertEquals(bookMarks.size(), 2); } private List<Tag> getTagsByTopic(Topic topic, String userName) throws Exception { List<String> listTagId = new ArrayList<String>(); String[] tagIds = topic.getTagId(); String[] temp; for (int i = 0; i < tagIds.length; i++) { temp = tagIds[i].split(":"); if (temp[0].equals(userName)) { listTagId.add(temp[1]); } } return forumService_.getMyTagInTopic(listTagId.toArray(new String[listTagId.size()])); } public void testTag() throws Exception { // set Data initDefaultData(); List<Tag> tags = new ArrayList<Tag>(); int size = 5; for (int i = 0; i < size; i++) { Tag tag = createTag("tag" + i, USER_ROOT); tags.add(tag); } Topic topic = forumService_.getTopic(categoryId, forumId, topicId, ""); forumService_.addTag(tags, USER_ROOT, topic.getPath()); // get tags in topic by user root topic = forumService_.getTopic(categoryId, forumId, topicId, ""); assertEquals(size, topic.getTagId().length); List<Tag> tags_ = getTagsByTopic(topic, USER_ROOT); assertEquals(size, tags_.size()); //test get other tags on topic for (int i = 10; i < 16; i++) { Tag tag = createTag("tag" + i, USER_ROOT); tags.add(tag); } forumService_.addTag(tags, USER_DEMO, topic.getPath()); // List<String> list = forumService_.getTagNameInTopic(USER_ROOT+","+topicId); assertEquals(5, list.size()); // Test get tag String id = Utils.TAG + tags.get(0).getName(); assertNotNull(forumService_.getTag(id)); // Get all tag assertEquals(11, forumService_.getAllTags().size()); } public void testWatch() throws Exception { // set Data initDefaultData(); // addWatch String forumPath = categoryId + "/" + forumId; List<String> values = new ArrayList<String>(); values.add("exo@exoplf.com"); forumService_.addWatch(1, forumPath, values, "root"); // watch by user List<Watch> watchs = forumService_.getWatchByUser(USER_ROOT); assertEquals(watchs.get(0).getEmail(), values.get(0)); // remove watched forumService_.removeWatch(1, forumPath, "/" + values.get(0)); watchs = forumService_.getWatchByUser("root"); assertEquals(watchs.size(), 0); // add watch for category forumService_.addWatch(1, categoryId, values, USER_DEMO); // assertEquals(1, forumService_.getCategory(categoryId).getEmailNotification().length); // remove watched forumService_.removeWatch(1, categoryId, "/" + values.get(0)); assertEquals(0, forumService_.getCategory(categoryId).getEmailNotification().length); // Sleep to done run task notification. } public void testIpBan() throws Exception { // set Data initDefaultData(); // set Ip ban String ip = "192.168.1.10"; // save Ip ban forumService_.addBanIP(ip); // get Ip ban List<String> listBans = forumService_.getBanList(); assertEquals("Ip have adding in listBans", listBans.get(0), ip); // addBanIPForum forumService_.addBanIPForum(ip, categoryId + "/" + forumId); // getForumBanList List<String> listIpBanInForum = forumService_.getForumBanList(categoryId + "/" + forumId); assertEquals("Ip add in forum", listIpBanInForum.get(0), ip); // removeBanIPForum forumService_.removeBanIPForum(ip, categoryId + "/" + forumId); listIpBanInForum = forumService_.getForumBanList(categoryId + "/" + forumId); assertEquals("Ip is removed in listIpBanInForum, size is not 0 ", listIpBanInForum.size(), 0); // removeIpBan forumService_.removeBan(ip); listBans = forumService_.getBanList(); assertEquals("Ip is removed in listBans, size is not 0 ", listBans.size(), 0); } public void testCalculateDeletedGroupForSpace() throws Exception { removeAllData(); // test for case in spaces: String groupId = "/spaces/new_space"; String groupName = "new_space"; String cateId = Utils.CATEGORY + "spaces"; String forumId = Utils.FORUM_SPACE_ID_PREFIX + groupName; Category category = createCategory(cateId); category.setCategoryName("spaces"); category.setUserPrivate(new String[] { groupId }); forumService_.saveCategory(category, true); Forum forum = createdForum(); forum.setForumName("New Space"); forum.setId(forumId); forumService_.saveForum(cateId, forum, true); assertNotNull(String.format("The forum %s in space %s is null", forumId, groupName), forumService_.getForum(cateId, forumId)); forumService_.calculateDeletedGroup(groupId, groupName); assertNull(String.format("The forum %s is not null after deleted the group %s ", forumId, groupId), forumService_.getForum(cateId, forumId)); } public void testCalculateDeletedGroupForNormal() throws Exception { removeAllData(); // set group in categories/forums/topics String groupId = "/platform/users"; String groupName = "users"; UserProfile profile = createdUserProfile(USER_JOHN); profile.setUserRole(UserProfile.USER); profile.setUserTitle("User"); profile.setModerateForums(new String[] { "" }); profile.setModerateCategory(new String[] { "" }); forumService_.saveUserProfile(profile, false, false); forumService_.saveUserModerator(USER_JOHN, new ArrayList<String>(), false); assertEquals(UserProfile.USER, forumService_.getUserInfo(USER_JOHN).getUserRole()); // profile = createdUserProfile(USER_ROOT); profile.setUserRole(UserProfile.ADMIN); forumService_.saveUserProfile(profile, false, false); String[] groupUser = new String[] { groupId, USER_ROOT }; Category category = createCategory(getId(Utils.CATEGORY)); category.setUserPrivate(groupUser); category.setCreateTopicRole(groupUser); category.setModerators(groupUser); category.setViewer(groupUser); category.setPoster(groupUser); forumService_.saveCategory(category, true); Forum forum = createdForum(); forum.setViewer(groupUser); forum.setCreateTopicRole(groupUser); forum.setPoster(groupUser); forum.setModerators(groupUser); forumService_.saveForum(category.getId(), forum, true); // the user demo in group "/platform/users" is moderator of forum, checking it assertEquals(UserProfile.MODERATOR, forumService_.getUserInfo(USER_JOHN).getUserRole()); Topic topic = createdTopic(USER_JOHN); topic.setCanView(groupUser); topic.setCanPost(groupUser); forumService_.saveTopic(category.getId(), forum.getId(), topic, true, false, new MessageBuilder()); // checking data assertEquals(ArrayToString(groupUser), ArrayToString(forumService_.getCategory(category.getId()).getUserPrivate())); assertEquals(ArrayToString(groupUser), ArrayToString(forumService_.getForum(category.getId(), forum.getId()).getModerators())); topic = forumService_.getTopic(category.getId(), forum.getId(), topic.getId(), null); assertEquals(ArrayToString(groupUser), ArrayToString(topic.getCanView())); // deleted group in system forumService_.calculateDeletedGroup(groupId, groupName); // checking again data assertEquals(UserProfile.USER, forumService_.getUserInfo(USER_JOHN).getUserRole()); assertEquals(USER_ROOT, ArrayToString(forumService_.getCategory(category.getId()).getUserPrivate())); assertEquals(USER_ROOT, ArrayToString(forumService_.getForum(category.getId(), forum.getId()).getModerators())); assertEquals(USER_ROOT, ArrayToString(forumService_.getTopic(category.getId(), forum.getId(), topic.getId(), null).getCanView())); //update forum moderator profile = createdUserProfile("mary"); profile.setUserRole(UserProfile.USER); profile.setUserTitle("User"); profile.setModerateForums(new String[] { "" }); profile.setModerateCategory(new String[] { "" }); forumService_.saveUserProfile(profile, false, false); groupUser = new String[] {"mary"}; forum.setModerators(groupUser); forumService_.saveForum(category.getId(), forum, false); assertEquals(UserProfile.MODERATOR, forumService_.getUserInfo("mary").getUserRole()); } public void testCallDisableUserListener() throws Exception { OrganizationService organizationService = getService(OrganizationService.class); // initDefaultData(); // add watch email for demo List<String> emailsDemo = Arrays.asList("demo@test.com"); String path = forumService_.getForum(categoryId, forumId).getPath(); forumService_.addWatch(1, path, emailsDemo, USER_DEMO); // check value watched assertEquals(1, forumService_.getForum(categoryId, forumId).getEmailNotification().length); // Call user listener to disable user organizationService.getUserHandler().setEnabled(USER_DEMO, false, true); // check value watch assertEquals(0, forumService_.getForum(categoryId, forumId).getEmailNotification().length); } public void testCallEnableUserListener() throws Exception { OrganizationService organizationService = getService(OrganizationService.class); // initDefaultData(); // add watch email for demo List<String> emailsDemo = Arrays.asList("demo@test.com"); String path = forumService_.getForum(categoryId, forumId).getPath(); // Call user listener to disable user organizationService.getUserHandler().setEnabled(USER_DEMO, false, true); // Enable user organizationService.getUserHandler().setEnabled(USER_DEMO, true, true); // Add watch again forumService_.addWatch(1, path, emailsDemo, USER_DEMO); // check value watched assertEquals(1, forumService_.getForum(categoryId, forumId).getEmailNotification().length); // Call enable again organizationService.getUserHandler().setEnabled(USER_DEMO, true, true); // check value watched again assertEquals(1, forumService_.getForum(categoryId, forumId).getEmailNotification().length); } public void testProcessDisabledUser() throws Exception { // initDefaultData(); // add watch email for demo List<String> emailsDemo = Arrays.asList("demo@test.com"); String path = forumService_.getCategory(categoryId).getPath(); forumService_.addWatch(1, path, emailsDemo, USER_DEMO); forumService_.saveCategory(forumService_.getCategory(categoryId), false); // path = forumService_.getForum(categoryId, forumId).getPath(); forumService_.addWatch(1, path, emailsDemo, USER_DEMO); // path = forumService_.getTopic(categoryId, forumId, topicId, null).getPath(); forumService_.addWatch(1, path, emailsDemo, USER_DEMO); // add mails notification on forum Forum forum = forumService_.getForum(categoryId, forumId); forum.setNotifyWhenAddTopic(new String[]{"demo@exoplatform.com", "test2@gmail.com"}); forum.setNotifyWhenAddPost(new String[]{"demo@exoplatform.com", "test3@gmail.com"}); forumService_.saveForum(categoryId, forum, false); // before disabled assertEquals(1, forumService_.getCategory(categoryId).getEmailNotification().length); assertEquals(1, forumService_.getForum(categoryId, forumId).getEmailNotification().length); assertEquals(1, forumService_.getTopic(categoryId, forumId, topicId, null).getEmailNotification().length); // forum = forumService_.getForum(categoryId, forumId); assertEquals(2, forum.getNotifyWhenAddTopic().length); assertEquals(2, forum.getNotifyWhenAddPost().length); //run disabled user. forumService_.processEnabledUser(USER_DEMO, "demo@exoplatform.com", false); // after disabled assertEquals(0, forumService_.getCategory(categoryId).getEmailNotification().length); assertEquals(0, forumService_.getForum(categoryId, forumId).getEmailNotification().length); assertEquals(0, forumService_.getTopic(categoryId, forumId, topicId, null).getEmailNotification().length); // forum = forumService_.getForum(categoryId, forumId); assertEquals(1, forum.getNotifyWhenAddTopic().length); assertEquals(1, forum.getNotifyWhenAddPost().length); } public void testImportXML() throws Exception { Category cat = createCategory(getId(Utils.CATEGORY)); forumService_.saveCategory(cat, true); cat = forumService_.getCategory(cat.getId()); String pathNode = cat.getPath(); assertEquals("Before import data, category don't have any forum", forumService_.getForums(cat.getId(), "").size(), 0); try { File file = new File(System.getProperty("user.dir") + "/src/test/resources/conf/portal/Data.xml"); String content = FileUtils.readFileToString(file, "UTF-8"); byte currentXMLBytes[] = content.getBytes(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(currentXMLBytes); // Import forum into category forumService_.importXML(pathNode, byteArrayInputStream, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW); assertEquals("Can't import forum into category", forumService_.getForums(cat.getId(), "").size(), 1); } catch (IOException e) { log.debug("Failed to test importXML", e); } } public void testImportXXE() throws Exception { Category cat = createCategory(getId(Utils.CATEGORY)); forumService_.saveCategory(cat, true); cat = forumService_.getCategory(cat.getId()); String pathNode = cat.getPath(); assertEquals("Before import data, category don't have any forum", forumService_.getForums(cat.getId(), "").size(), 0); try { File file = new File(System.getProperty("user.dir") + "/src/test/resources/conf/content/XXE_CONTENT.xml"); String content = FileUtils.readFileToString(file, "UTF-8"); byte currentXMLBytes[] = content.getBytes(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(currentXMLBytes); // Import forum into category forumService_.importXML(pathNode, byteArrayInputStream, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW); fail(); } catch (Exception e) { log.info("XXE content not imported: "+e.getMessage()); } } public void testExportXML() throws Exception { Category cat = createCategory(getId(Utils.CATEGORY)); forumService_.saveCategory(cat, true); cat = forumService_.getCategory(cat.getId()); Forum forum = createdForum(); forumService_.saveForum(cat.getId(), forum, true); forum = forumService_.getForum(cat.getId(), forum.getId()); ByteArrayOutputStream bos = new ByteArrayOutputStream(); forumService_.exportXML(cat.getId(), forum.getId(), new ArrayList<String>(), forum.getPath(), bos, false); assertEquals("can't export Forum into XML file", bos.size() > 0, true); } public void testGetScreenName() throws Exception { UserProfile userProfile = createdUserProfile(USER_DEMO); userProfile.setScreenName("Jack Miller"); // save UserProfile forumService_.saveUserProfile(userProfile, true, true); // getUserInfo userProfile = forumService_.getUserInfo(USER_DEMO); assertEquals("Jack Miller",forumService_.getScreenName("demo")); // change screenName userProfile.setScreenName("John Smith"); forumService_.saveUserSettingProfile(userProfile); userProfile = forumService_.getUserInfo(USER_DEMO); assertEquals("John Smith",forumService_.getScreenName("demo")); } public void testGetAllLink() throws Exception { // save normal category Category cat = createCategory(new Category().getId()); forumService_.saveCategory(cat, true); // save normal forum Forum forum = createdForum(); forumService_.saveForum(cat.getId(), forum, true); forum.setId(new Forum().getId()); forumService_.saveForum(cat.getId(), forum, true); // save category in space String cateIdSpace = Utils.CATEGORY_SPACE_ID_PREFIX; cat = createCategory(cateIdSpace); forumService_.saveCategory(cat, true); // save forum in space 1 forum.setId("forumSpaceroot_space"); forum.setForumName("Root spcase"); forumService_.saveForum(cat.getId(), forum, true); // save forum in space 2 forum.setId("forumSpacetest_space"); forumService_.saveForum(cat.getId(), forum, true); // save forum in space 3 forum.setId("forumSpaceabc_space"); forumService_.saveForum(cat.getId(), forum, true); List<ForumLinkData> forumLinks = new ArrayList<ForumLinkData>(); StringBuilder strQueryCate = new StringBuilder(); strQueryCate.append("[@exo:id !='").append(cateIdSpace).append("']"); forumLinks.addAll(forumService_.getAllLink(strQueryCate.toString(), "")); strQueryCate = new StringBuilder(); strQueryCate.append("[@exo:id='").append(cateIdSpace).append("']"); String forumQr = "[(jcr:like(@" + Utils.EXO_ID + ",'%" + "test_space" + "%'))]"; forumLinks.addAll(forumService_.getAllLink(strQueryCate.toString(), forumQr)); // list has size is 5 (2 categories and 2 normal forums and 1 forum in category space) assertEquals("The size of list forumLinks not equals 5.", forumLinks.size(), 5); } public void testMoveForum() throws Exception { Category cat1 = createCategory(new Category().getId()); forumService_.saveCategory(cat1, true); Forum forum = createdForum(); forumService_.saveForum(cat1.getId(), forum, true); Category cat2 = createCategory(new Category().getId()); forumService_.saveCategory(cat2, true); String forumId = forum.getId(); cat1 = forumService_.getCategory(cat1.getId()); assertNotNull(cat1); cat2 = forumService_.getCategory(cat2.getId()); assertNotNull(cat2); List<Forum> forums = new ArrayList<Forum>(); forums.add(forum); forumService_.moveForum(forums, cat2.getPath()); //make sure forum is moved out of cat1 forum = forumService_.getForum(cat1.getId(), forumId); assertNull(forum); //make sure forum is moved to cat2 forum = forumService_.getForum(cat2.getId(), forumId); assertNotNull(forum); forums = new ArrayList<Forum>(); forums.add(forum); forumService_.moveForum(forums, cat1.getPath()); //make sure forum is moved out of cat2 forum = forumService_.getForum(cat2.getId(), forumId); assertNull(forum); //make sure forum is moved to cat1 forum = forumService_.getForum(cat1.getId(), forumId); assertNotNull(forum); //Move a forum from category space to a normal category String cateIdSpace = Utils.CATEGORY_SPACE_ID_PREFIX; Category catSpace = createCategory(cateIdSpace); forumService_.saveCategory(catSpace, true); // save forum in space 1 Forum forumSpace = createdForum(); forumSpace.setId("forumSpaceroot_space"); forumSpace.setForumName("Root spase"); forumService_.saveForum(catSpace.getId(), forumSpace, true); forums = new ArrayList<Forum>(); forums.add(forumSpace); //move to cat1 forumService_.moveForum(forums, cat1.getPath()); forumSpace = forumService_.getForum(cat1.getId(), forumSpace.getId()); assertNotNull(forumSpace); } public void testSplitTopic() throws Exception { Category cat = createCategory(getId(Utils.CATEGORY)); forumService_.saveCategory(cat, true); Forum forum = createdForum(); forumService_.saveForum(cat.getId(), forum, true); forum = forumService_.getForum(cat.getId(), forum.getId()); Topic topic = createdTopic(USER_ROOT); forumService_.saveTopic(cat.getId(), forum.getId(), topic, true, false, new MessageBuilder()); topic = forumService_.getTopic(cat.getId(), forum.getId(), topic.getId(), ""); List<String> postPath = new ArrayList<String>(); String firstPostId = ""; for (int i = 0; i < 5; ++i) { Post post = createdPost(); if (i == 2) { firstPostId = post.getId(); } if (i > 1) { postPath.add(topic.getPath() + "/" + post.getId()); } forumService_.savePost(cat.getId(), forum.getId(), topic.getId(), post, true, new MessageBuilder()); } topic = forumService_.getTopic(cat.getId(), forum.getId(), topic.getId(), ""); assertEquals(5, topic.getPostCount()); Post firstPost = forumService_.getPost(cat.getId(), forum.getId(), topic.getId(), firstPostId); Topic newTopic = createdTopic(USER_ROOT); newTopic.setPath(forum.getPath() + "/" + newTopic.getId()); forumService_.splitTopic(newTopic, firstPost, postPath, "", ""); newTopic = forumService_.getTopic(cat.getId(), forum.getId(), newTopic.getId(), ""); topic = forumService_.getTopic(cat.getId(), forum.getId(), topic.getId(), ""); assertEquals(2, topic.getPostCount()); assertEquals(2, newTopic.getPostCount()); // Clean all data forumService_.removeCategory(cat.getId()); } public void testLastTopicOfForum() throws Exception { initDefaultData(); // JCRDataStorage dataStorage = getService(JCRDataStorage.class); // create 20 topics Topic topic = null; for (int i = 0; i < 20; i++) { topic = createdTopic(USER_ROOT); dataStorage.saveTopic(categoryId, forumId, topic, true, false, new MessageBuilder()); } // String lastTopicPath = dataStorage.getForum(categoryId, forumId).getLastTopicPath(); assertNotSame(topic.getId(), Utils.getTopicId(lastTopicPath)); Thread.sleep(1000); queryLastPostManager.doneSignal().await(); // lastTopicPath = dataStorage.getForum(categoryId, forumId).getLastTopicPath(); assertEquals(topic.getId(), Utils.getTopicId(lastTopicPath)); } public void testSendEmailNotification() throws Exception { //reset old mails forumService_.getPendingMessages(); // Category cat = createCategory(getId(Utils.CATEGORY)); String categoryId = cat.getId(); forumService_.saveCategory(cat, true); Forum forum = createdForum(); String forumId = forum.getId(); forumService_.saveForum(categoryId, forum, true); // String owner = "user_email"; UserProfile profile = createdUserProfile(owner); forumService_.saveUserProfile(profile, false, false); // JCRDataStorage dataStorage = getService(JCRDataStorage.class); // Add watch dataStorage.addWatch(1, categoryId + "/" + forumId, Arrays.asList(profile.getEmail()), owner); // create 20 topics Topic topic = null; for (int i = 0; i < 20; i++) { topic = createdTopic(USER_ROOT); dataStorage.saveTopic(categoryId, forumId, topic, true, false, new MessageBuilder()); } // Thread.sleep(500); sendNotificationManager.doneSignal().await(); // assertEquals(20, IteratorUtils.toList(dataStorage.getPendingMessages()).size()); } public void testSendNotificationEmail () throws Exception { //reset old mails forumService_.getPendingMessages(); // String postMsg = "test notification email"; Category cat = createCategory(getId(Utils.CATEGORY)); forumService_.saveCategory(cat, true); Forum forum = createdForum(); forumService_.saveForum(cat.getId(), forum, true); forum = forumService_.getForum(cat.getId(), forum.getId()); // test send notification email if user registered for the Forum and Topic Watching notification String owner = "user_test_mail"; User user = getOrCreateUser(owner); // UserProfile profile = forumService_.getUserInfo(owner); assertNotNull(profile); assertEquals(user.getEmail(), profile.getEmail()); // MessageBuilder messageBuilder = new MessageBuilder(); messageBuilder.setContent(Utils.DEFAULT_EMAIL_CONTENT); Topic topicNTF = createdTopic(owner); topicNTF.setIsNotifyWhenAddPost(profile.getEmail()); // Save topic forumService_.saveTopic(cat.getId(), forum.getId(), topicNTF, true, false, messageBuilder); Post post = createdPost(); post.setMessage(postMsg); // Save post forumService_.savePost(cat.getId(), forum.getId(), topicNTF.getId(), post, true, messageBuilder); Thread.sleep(5000); sendNotificationManager.doneSignal().await(); // check result test List messages = IteratorUtils.toList(forumService_.getPendingMessages()); assertEquals(1, messages.size()); SendMessageInfo msgInfo = (SendMessageInfo) messages.get(0); assertTrue(msgInfo.getEmailAddresses().contains(profile.getEmail())); assertTrue(msgInfo.getMessage().getBody().contains(postMsg)); } public void testEmailPermissionOnSpace() throws Exception { // reset old mails forumService_.getPendingMessages(); // Create space group Group parent = createGroup(null, "spaces"); Group spaceTest = createGroup(parent, "test_space"); // Add users to space group addUserToGroup(USER_DEMO, spaceTest, "member"); addUserToGroup(USER_JOHN, spaceTest, "member"); addUserToGroup("mary", spaceTest, "member"); // Set root is administrator UserProfile profile = forumService_.getUserProfileManagement(USER_ROOT); profile.setUserRole(UserProfile.ADMIN); forumService_.saveUserProfile(profile, false, false); // MessageBuilder messageBuilder = new MessageBuilder(); messageBuilder.setContent(Utils.DEFAULT_EMAIL_CONTENT); // Create category, forum of space Category spaceCat = createCategory(Utils.CATEGORY_SPACE_ID_PREFIX); spaceCat.setViewer(new String[] { USER_ROOT }); forumService_.saveCategory(spaceCat, true); Forum spaceForum = createdForum(); spaceForum.setId(Utils.FORUM_SPACE_ID_PREFIX + "test_space"); spaceForum.setModerators(new String[] { "manager:" + spaceTest.getId() }); spaceForum.setViewer(new String[] { spaceTest.getId() }); forumService_.saveForum(spaceCat.getId(), spaceForum, true); // demo watch forum of space forumService_.addWatch(1, spaceCat.getId() + "/" + spaceForum.getId(), Arrays.asList(USER_DEMO + "@mail.com"), USER_DEMO); // root watch category of space forumService_.addWatch(1, spaceCat.getId(), Arrays.asList(USER_ROOT + "@mail.com"), USER_ROOT); // Add topic Topic topic = createdTopic(USER_JOHN); forumService_.saveTopic(spaceCat.getId(), spaceForum.getId(), topic, true, false, messageBuilder); // sendNotificationManager.doneSignal().await(); List<?> messages = IteratorUtils.toList(forumService_.getPendingMessages()); // have one type of watched assertEquals(1, messages.size()); // only one email sent to user Demo assertEquals(1, ((SendMessageInfo) messages.get(0)).getEmailAddresses().size()); assertTrue(((SendMessageInfo) messages.get(0)).getEmailAddresses().get(0).contains(USER_DEMO)); // Mary watch on topic of space forumService_.addWatch(1, spaceCat.getId() + "/" + spaceForum.getId() + "/" + topic.getId(), Arrays.asList("mary@mail.com"), "mary"); // Add post Post post = createdPost(); post.setOwner(USER_JOHN); forumService_.savePost(spaceCat.getId(), spaceForum.getId(), topic.getId(), post, true, messageBuilder); // messages = IteratorUtils.toList(forumService_.getPendingMessages()); // we have two types of watched email, one for on topic and one for on forum. assertEquals(2, messages.size()); // have one email sent to Demo SendMessageInfo messageInfo = (SendMessageInfo) messages.get(0); assertEquals(1, messageInfo.getEmailAddresses().size()); // have one email sent to Mary messageInfo = (SendMessageInfo) messages.get(1); assertEquals(1, messageInfo.getEmailAddresses().size()); } public void testEmailPermissionOnIntranet() throws Exception { // reset old mails forumService_.getPendingMessages(); // Set root is administrator UserProfile profile = forumService_.getUserProfileManagement(USER_ROOT); profile.setUserRole(UserProfile.ADMIN); forumService_.saveUserProfile(profile, false, false); // MessageBuilder messageBuilder = new MessageBuilder(); messageBuilder.setContent(Utils.DEFAULT_EMAIL_CONTENT); // Forum on intranet Category normalCat = createCategory(getId(Utils.CATEGORY)); normalCat.setViewer(new String[] { "mary" }); forumService_.saveCategory(normalCat, true); Forum forum = createdForum(); forum.setViewer(new String[] { USER_JOHN, USER_DEMO }); forumService_.saveForum(normalCat.getId(), forum, true); forum = forumService_.getForum(normalCat.getId(), forum.getId()); // Root watch category forumService_.addWatch(1, normalCat.getId(), Arrays.asList(USER_ROOT + "@mail.com"), USER_ROOT); // Demo watch forum forumService_.addWatch(1, normalCat.getId() + "/" + forum.getId(), Arrays.asList(USER_DEMO + "@mail.com"), USER_DEMO); // Mary watch forum forumService_.addWatch(1, normalCat.getId() + "/" + forum.getId(), Arrays.asList("mary@mail.com"), "mary"); // Topic topic = createdTopic(USER_JOHN); forumService_.saveTopic(normalCat.getId(), forum.getId(), topic, true, false, messageBuilder); // sendNotificationManager.doneSignal().await(); List<?> messages = IteratorUtils.toList(forumService_.getPendingMessages()); // 1 email sent for Root (administrator) watched on category SendMessageInfo messageInfo = (SendMessageInfo) messages.get(0); assertEquals(1, messageInfo.getEmailAddresses().size()); assertTrue(messageInfo.getEmailAddresses().get(0).contains(USER_ROOT)); // 2 email sent for Demo and Mary (can view topic) watched on forum. messageInfo = (SendMessageInfo) messages.get(1); assertEquals(2, messageInfo.getEmailAddresses().size()); // topic.setCanView(new String[] { "paul" }); forumService_.saveTopic(normalCat.getId(), forum.getId(), topic, false, false, messageBuilder); // Paul watch space forum (Paul has permission to view topics) forumService_.addWatch(1, normalCat.getId() + "/" + forum.getId() + "/" + topic.getId(), Arrays.asList("paul@mail.com"), "paul"); // Post post = createdPost(); post.setOwner(USER_JOHN); forumService_.savePost(normalCat.getId(), forum.getId(), topic.getId(), post, true, messageBuilder); // messages = IteratorUtils.toList(forumService_.getPendingMessages()); // we have 3 types of watched email, one for on topic, one for on forum and // one for on category. assertEquals(3, messages.size()); // one email for Root messageInfo = (SendMessageInfo) messages.get(0); assertEquals(1, messageInfo.getEmailAddresses().size()); // 2 email sent for Demo and Mary (can view topic) watched on forum. messageInfo = (SendMessageInfo) messages.get(1); assertEquals(2, messageInfo.getEmailAddresses().size()); // one email for Paul messageInfo = (SendMessageInfo) messages.get(2); assertEquals(1, messageInfo.getEmailAddresses().size()); } private Group createGroup(Group parent, String groupName) throws Exception { GroupHandler groupHandler = UserHelper.getGroupHandler(); String parentId = (parent == null) ? "" : parent.getId() + "/"; if(groupHandler.findGroupById(parentId + groupName) == null) { Group group = groupHandler.createGroupInstance(); group.setGroupName(groupName); group.setLabel(groupName); group.setDescription(groupName); // groupHandler.addChild(parent, group, true); } // return groupHandler.findGroupById(parentId + groupName); } private void addUserToGroup(String userId, Group group, String type) throws Exception { MembershipType m = (MembershipType) UserHelper.getOrganizationService().getMembershipTypeHandler().findMembershipType(type); UserHelper.getMembershipHandler().linkMembership(getOrCreateUser(userId), group, m, true); } private User getOrCreateUser(String userId) throws Exception { User user = UserHelper.getUserHandler().findUserByName(userId, UserStatus.ANY); if (user == null) { user = UserHelper.getUserHandler().createUserInstance(userId); user.setEmail(userId + "@plf.com"); user.setFirstName(userId); user.setLastName(userId); user.setDisplayName(userId); user.setPassword("password"); // UserHelper.getUserHandler().createUser(user, true); } return user; } }