/*
* Copyright (C) 2003-2007 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.faq.service.test;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.exoplatform.faq.service.Answer;
import org.exoplatform.faq.service.Category;
import org.exoplatform.faq.service.CategoryInfo;
import org.exoplatform.faq.service.Comment;
import org.exoplatform.faq.service.DataStorage;
import org.exoplatform.faq.service.FAQEventQuery;
import org.exoplatform.faq.service.FAQService;
import org.exoplatform.faq.service.FAQSetting;
import org.exoplatform.faq.service.FileAttachment;
import org.exoplatform.faq.service.JCRPageList;
import org.exoplatform.faq.service.ObjectSearchResult;
import org.exoplatform.faq.service.Question;
import org.exoplatform.faq.service.QuestionLanguage;
import org.exoplatform.faq.service.Utils;
import org.exoplatform.faq.service.Watch;
import org.exoplatform.faq.service.impl.JCRDataStorage;
import org.exoplatform.faq.test.FAQServiceTestCase;
import org.exoplatform.ks.common.NotifyInfo;
import org.exoplatform.services.jcr.ext.app.SessionProviderService;
import org.exoplatform.services.jcr.ext.common.SessionProvider;
/**
* Created by The eXo Platform SARL
* Author : Hung Nguyen
* hung.nguyen@exoplatform.com
* July 3, 2008
*/
@SuppressWarnings("unused")
public class TestFAQService extends FAQServiceTestCase {
private FAQService faqService_;
private FAQSetting faqSetting_ = new FAQSetting();
private SessionProvider sProvider_;
private List<FileAttachment> listAttachments = new ArrayList<FileAttachment>();
private static String USER_ROOT = "root";
private static String USER_JOHN = "john";
private static String USER_DEMO = "demo";
private static String categoryId1;
private static String categoryId2;
private static String questionId1;
private static String questionId2;
private static String questionId3;
private static String questionId4;
private static String questionId5;
private DataStorage datastorage;
public TestFAQService() throws Exception {
super();
}
public void setUp() throws Exception {
super.setUp();
faqService_ = (FAQService) container.getComponentInstanceOfType(FAQService.class);
datastorage = (DataStorage) container.getComponentInstanceOfType(JCRDataStorage.class);
SessionProviderService sessionProviderService = (SessionProviderService) container.getComponentInstanceOfType(SessionProviderService.class);
sProvider_ = sessionProviderService.getSystemSessionProvider(null);
faqSetting_.setDisplayMode("both");
faqSetting_.setOrderBy("created");
faqSetting_.setOrderType("asc");
faqSetting_.setSortQuestionByVote(true);
faqSetting_.setIsAdmin("TRUE");
faqSetting_.setEmailMoveQuestion("content email move question");
faqSetting_.setEmailSettingSubject("Send notify watched");
faqSetting_.setEmailSettingContent("Question content: &questionContent_ <br/>Response: &questionResponse_ <br/> link: &questionLink_");
}
public void testFAQService() throws Exception {
assertNotNull(faqService_);
assertNotNull(sProvider_);
}
public Category createCategory(String categoryName) {
Date date = new Date();
Category category = new Category();
category.setName(categoryName);
category.setDescription("Description");
category.setModerateQuestions(true);
category.setModerateAnswers(true);
category.setViewAuthorInfor(true);
category.setModerators(new String[] { "root" });
category.setCreatedDate(date);
category.setUserPrivate(new String[] { "" });
category.setIndex(0);
category.setView(true);
return category;
}
public Question createQuestion(String cateId) throws Exception {
Question question = new Question();
question.setLanguage("English");
question.setQuestion("What is FAQ?");
question.setDetail("Add new question 1");
question.setAuthor("root");
question.setEmail("maivanha1610@gmail.com");
question.setActivated(true);
question.setApproved(true);
question.setCreatedDate(new Date());
question.setCategoryId(cateId);
question.setRelations(new String[] {});
question.setAttachMent(listAttachments);
question.setAnswers(new Answer[] {});
question.setComments(new Comment[] {});
question.setUsersVote(new String[] {});
question.setMarkVote(0.0);
question.setUsersWatch(new String[] {});
question.setEmailsWatch(new String[] {});
question.setTopicIdDiscuss(null);
return question;
}
private QuestionLanguage createQuestionLanguage(String language) {
QuestionLanguage questionLanguage = new QuestionLanguage();
questionLanguage.setAnswers(null);
questionLanguage.setComments(null);
questionLanguage.setDetail("detail for language " + language);
questionLanguage.setLanguage(language);
questionLanguage.setQuestion("question for language " + language);
return questionLanguage;
}
private Answer createAnswer(String user, String content) {
Answer answer = new Answer();
answer.setActivateAnswers(true);
answer.setApprovedAnswers(true);
answer.setDateResponse(new Date());
answer.setMarksVoteAnswer(0);
answer.setMarkVotes(0);
answer.setNew(true);
answer.setPostId(null);
answer.setResponseBy(user);
answer.setResponses(content);
answer.setUsersVoteAnswer(null);
answer.setLanguage("English");
return answer;
}
private Comment createComment(String user, String content) {
Comment comment = new Comment();
comment.setCommentBy(user);
comment.setComments(content);
comment.setDateComment(new Date());
comment.setNew(true);
comment.setPostId(null);
comment.setFullName(user + " " + user);
return comment;
}
private Watch createNewWatch(String user, String mail) {
Watch watch = new Watch();
watch.setUser(user);
watch.setEmails(mail);
return watch;
}
private FileAttachment createUserAvatar(String fileName) throws Exception {
FileAttachment attachment = new FileAttachment();
try {
File file = new File("../service/src/test/resources/conf/portal/defaultAvatar.jpg");
attachment.setName(fileName);
InputStream is = new FileInputStream(file);
attachment.setInputStream(is);
attachment.setMimeType("");
} catch (Exception e) {
log.error("Fail to create user avatar: ", e);
}
return attachment;
}
private void removeData() throws Exception {
FAQSetting faqSetting = new FAQSetting();
faqSetting.setIsAdmin("TRUE");
List<Category> categories = faqService_.getSubCategories(Utils.CATEGORY_HOME, faqSetting, false, null);
for (Category category : categories) {
faqService_.removeCategory(category.getPath());
}
}
private void defaultData() throws Exception {
// remove old data.
removeData();
// Create some category default
Category cate = createCategory("Category to test question");
categoryId1 = Utils.CATEGORY_HOME + "/" + cate.getId();
Category cate2 = createCategory("Category 2 to test question");
categoryId2 = Utils.CATEGORY_HOME + "/" + cate2.getId();
Category cate3 = createCategory("Category 3 has not question");
cate3.setModerators(new String[] { "demo" });
faqService_.saveCategory(Utils.CATEGORY_HOME, cate, true);
faqService_.saveCategory(Utils.CATEGORY_HOME, cate2, true);
faqService_.saveCategory(Utils.CATEGORY_HOME, cate3, true);
Question question1 = createQuestion(categoryId1);
questionId1 = question1.getId();
Question question2 = createQuestion(categoryId1);
question2.setRelations(new String[] {});
question2.setLanguage("English");
question2.setAuthor("root");
question2.setEmail("truong_tb1984@yahoo.com");
question2.setDetail("Nguyen van truong test question 2222222 ?");
question2.setCreatedDate(new Date());
questionId2 = question2.getId();
Question question3 = createQuestion(categoryId1);
question3.setRelations(new String[] {});
question3.setLanguage("English");
question3.setAuthor("Phung Hai Nam");
question3.setEmail("phunghainam@yahoo.com");
question3.setDetail("Nguyen van truong test question 33333333 nguyenvantruong ?");
question3.setCreatedDate(new Date());
questionId3 = question3.getId();
Question question4 = createQuestion(categoryId1);
question4.setRelations(new String[] {});
question4.setLanguage("English");
question4.setAuthor("Pham Dinh Tan");
question4.setEmail("phamdinhtan@yahoo.com");
question4.setDetail("Nguyen van truong test question nguyenvantruong ?");
question4.setCreatedDate(new Date());
questionId4 = question4.getId();
Question question5 = createQuestion(categoryId1);
question5.setRelations(new String[] {});
question5.setLanguage("English");
question5.setAuthor("Ly Dinh Quang");
question5.setEmail("lydinhquang@yahoo.com");
question5.setDetail("Nguyen van truong test question 55555555555 ?");
question5.setCreatedDate(new Date());
questionId5 = question5.getId();
// save questions
faqService_.saveQuestion(question1, true, faqSetting_);
faqService_.saveQuestion(question2, true, faqSetting_);
faqService_.saveQuestion(question3, true, faqSetting_);
faqService_.saveQuestion(question4, true, faqSetting_);
faqService_.saveQuestion(question5, true, faqSetting_);
}
public void testCategory() throws Exception {
// remove Data before testing category.
removeData();
// add category Id
faqService_.getAllCategories();
Category cate1 = createCategory("Cate 1");
cate1.setIndex(1);
faqService_.saveCategory(Utils.CATEGORY_HOME, cate1, true);
Category cate2 = createCategory("Cate 2");
cate2.setIndex(2);
cate2.setName("Nguyen van truong test category222222");
cate2.setModerators(new String[] { "Demo" });
faqService_.saveCategory(Utils.CATEGORY_HOME, cate2, true);
// add sub category 1
Category subCate1 = createCategory("Sub Cate 1");
subCate1.setIndex(1);
subCate1.setName("Nguyen van truong test Sub category 1");
subCate1.setModerators(new String[] { "marry", "Demo" });
faqService_.saveCategory(Utils.CATEGORY_HOME + "/" + cate1.getId(), subCate1, true);
// is Category Exist
assertEquals("Category has name:" + cate1.getName() + " is no longer exists.", faqService_.isCategoryExist(cate1.getName(), Utils.CATEGORY_HOME), true);
// Get category by id
cate1 = faqService_.getCategoryById(Utils.CATEGORY_HOME + "/" + cate1.getId());
assertNotNull("Category have not been added", cate1);
// Check category is already exist
assertEquals("This category is't already exist", faqService_.isExisting(cate1.getPath()), true);
// get infor of root category:
assertEquals("Have two categories in root category", faqService_.getCategoryInfo(Utils.CATEGORY_HOME, faqSetting_)[0], 2);
// Get path of category
assertNotNull("Path of category node is null", faqService_.getCategoryPath(cate1.getPath()));
// Swap 2 category
cate2 = faqService_.getCategoryById(Utils.CATEGORY_HOME + "/" + cate2.getId());
assertEquals("Index of category 1 before swap is't 2", cate1.getIndex(), 1);
assertEquals("Index of category 2 before swap is't 1", cate2.getIndex(), 2);
faqService_.swapCategories(cate1.getPath(), cate2.getPath());
cate1 = faqService_.getCategoryById(cate1.getPath());
cate2 = faqService_.getCategoryById(cate2.getPath());
assertEquals("Index of category 1 after swap is't 1", cate1.getIndex(), 2);
assertEquals("Index of category 2 after swap is't 2", cate2.getIndex(), 1);
// update category
cate1.setName("Nguyen van truong test category111111");
cate1.setCreatedDate(new Date());
faqService_.saveCategory(Utils.CATEGORY_HOME, cate1, false);
cate1 = faqService_.getCategoryById(cate1.getPath());
assertEquals("Name of category 1 haven't been changed", "Nguyen van truong test category111111", cate1.getName());
// get Categories
List<Category> listCate = faqService_.getSubCategories(Utils.CATEGORY_HOME, faqSetting_, true, null);
assertEquals("In root category don't have two subcategories", listCate.size(), 2);
// Get Maxindex of cateogry
assertEquals("Root have two category and maxIndex of subcategories in root is't 2", faqService_.getMaxindexCategory(Utils.CATEGORY_HOME), 2);
// get sub category
List<Category> listSubCate = faqService_.getSubCategories(cate1.getPath(), faqSetting_, false, null);
assertEquals("Category 1 not only have one subcategory", listSubCate.size(), 1);
// update sub category
subCate1 = listSubCate.get(0);
subCate1.setName("Sub category 1");
faqService_.saveCategory(cate1.getPath(), subCate1, false);
assertEquals("Name of SubCategory 1 have not been changed from \"Sub Cate 1\" to \"Sub category 1\"", "Sub category 1", subCate1.getName());
// get all Category
List<Category> listAll = faqService_.getAllCategories();
assertEquals("In FAQ System have less than 3 categories", listAll.size(), 3);
// move category
faqService_.moveCategory(cate2.getPath(), cate1.getPath());
cate2 = faqService_.getCategoryById(cate1.getPath() + "/" + cate2.getId());
assertNotNull("Category 2 is not already exist in FAQ", cate2);
// Delete category 2
faqService_.removeCategory(cate2.getPath());
List<Category> listAllAfterRemove = faqService_.getAllCategories();
assertEquals("Category 2 have not been removed, in system have more than 2 categoies", listAllAfterRemove.size(), 2);
// get list category by moderator
List<String> listCateByModerator = faqService_.getListCateIdByModerator(USER_ROOT);
assertEquals("User Root is't moderator of category Home and cate1", listCateByModerator.size(), 2);
// remove Data when tested category
// faqService_.removeCategory(Utils.CATEGORY_HOME);
}
// FAQPortlet
public void testCategoryInfo() throws Exception {
// Add new data default
defaultData();
// Get categoryInfo
List<String> categoryIdScoped = new ArrayList<String>();
CategoryInfo categoryInfo = faqService_.getCategoryInfo(Utils.CATEGORY_HOME, categoryIdScoped);
assertEquals("Can not get info of category by categoryInfo.", categoryInfo.getSubCateInfos().size(), 3);
// get QuestionInfo
categoryIdScoped = new ArrayList<String>();
categoryInfo = faqService_.getCategoryInfo(categoryId1, categoryIdScoped);
assertEquals("Can not questionInfo of category.", categoryInfo.getQuestionInfos().size(), 5);
// remove Data when tested category
// faqService_.removeCategory(Utils.CATEGORY_HOME);
}
public void testQuestion() throws Exception {
// Add new data default
defaultData();
// get question 1
String questionId = categoryId1 + "/" + Utils.QUESTION_HOME + "/" + questionId1;
String qsId2 = categoryId1 + "/" + Utils.QUESTION_HOME + "/" + questionId2;
Question question1 = faqService_.getQuestionById(questionId);
assertNotNull("Question 1 have not been saved into data", question1);
List<Question> listQuestion = faqService_.getQuestionsNotYetAnswer(Utils.CATEGORY_HOME, false).getAll();
assertEquals("have some questions are not yet answer", listQuestion.size(), 0);
// update question 1
question1.setDetail("Nguyen van truong test question 11111111 ?");
faqService_.saveQuestion(question1, false, faqSetting_);
assertNotNull(question1);
assertEquals("Detail of question 1 have not been changed", "Nguyen van truong test question 11111111 ?", question1.getDetail());
// update Question Relatives
faqService_.updateQuestionRelatives(questionId, new String[] { qsId2 });
question1 = faqService_.getQuestionById(questionId);
assertNotNull("Question not save relatives ", faqService_.getQuestionById(question1.getRelations()[0]));
// move question 2 to category 2
Category cate2 = faqService_.getCategoryById(categoryId2);
List<String> listId = new ArrayList<String>();
listId.add(qsId2);
assertEquals("Category 2 have some questions before move question 2", faqService_.getQuestionsByCatetory(cate2.getPath(), faqSetting_).getAll().size(), 0);
faqService_.moveQuestions(listId, cate2.getPath(), "", faqSetting_);
assertEquals("Category 2 have more than one question after move question 2", faqService_.getQuestionsByCatetory(cate2.getPath(), faqSetting_).getAll().size(), 1);
// Get question by list category
listId = new ArrayList<String>();
String catId = Utils.CATEGORY_HOME;
if (!categoryId1.equals(Utils.CATEGORY_HOME)) {
catId = categoryId1.substring(categoryId1.lastIndexOf("/") + 1);
}
listId.add(catId);
JCRPageList pageList = faqService_.getQuestionsByListCatetory(listId, false);
pageList.setPageSize(10);
assertEquals("Can't move question 2 to category 2", pageList.getPage(1, "root").size(), 4);
// get list all question
List<Question> listAllQuestion = faqService_.getAllQuestions().getAll();
assertEquals("the number of categories in FAQ is not 5", listAllQuestion.size(), 5);
// get list question by category of question 1
List<Question> listQuestionByCategory = faqService_.getQuestionsByCatetory(categoryId1, faqSetting_).getAll();
assertEquals("the number of question in category which contain question 1 is not 4", listQuestionByCategory.size(), 4);
// Get list paths of all question in category - removed
// List<String> listPaths = faqService_.getListPathQuestionByCategory(cate.getId());
// assertEquals("In Category 1 have more than 4 questions, because can't move question 2 to category 2", listPaths.size(), 4);
// Get question node by id - removed
// assertNotNull("Question1 is not already existing in system", faqService_.getQuestionNodeById(question1.getId()));
// remove question
faqService_.removeQuestion(categoryId1 + "/" + Utils.QUESTION_HOME + "/" + questionId5);
List<Question> listAllQuestionAfterRemove = faqService_.getAllQuestions().getAll();
assertEquals("Question 5 have not been removed, in system have 5 questions", listAllQuestionAfterRemove.size(), 4);
}
public void testSearch() throws Exception {
// set Data default
defaultData();
FAQEventQuery eventQuery = new FAQEventQuery();
// search with text = "test"
eventQuery.setText("test");
eventQuery.setAdmin(true);
eventQuery.setUserId(USER_ROOT);
// quick search (for all questions and categories)
eventQuery.setType(FAQEventQuery.CATEGORY_AND_QUESTION);
List<ObjectSearchResult> listQuickSearch = faqService_.getSearchResults(eventQuery);
assertEquals("Can't get all questions and categories have \"test\" charaters in content", listQuickSearch.size(), 6);// 2 category and 4 question
// for all category
eventQuery.setType(FAQEventQuery.FAQ_CATEGORY);
listQuickSearch = faqService_.getSearchResults(eventQuery);
assertEquals("Can't get all categories have \"test\" charaters in content", listQuickSearch.size(), 2);// 2 category
// search categories by moderator.
eventQuery.setText("");
eventQuery.setModerator("demo");
listQuickSearch = faqService_.getSearchResults(eventQuery);
assertEquals("Can't get all categories have moderator is 'demo'", listQuickSearch.size(), 1);
// for all questions
eventQuery.setText("test");
eventQuery.setType(FAQEventQuery.FAQ_QUESTION);
eventQuery.setLanguage("English");
listQuickSearch = faqService_.getSearchResults(eventQuery);
assertEquals("Can't get all questions have \"test\" charaters in content", listQuickSearch.size(), 4);// 4 question
// Search with Disapprove question by demo.
Question question = faqService_.getQuestionById(categoryId1 + "/" + Utils.QUESTION_HOME + "/" + questionId2);
assertNotNull("Get question is null! ", question);
question.setApproved(false);
faqService_.saveQuestion(question, false, faqSetting_);
eventQuery.setAdmin(false);
eventQuery.setUserId(USER_DEMO);
listQuickSearch = faqService_.getSearchResults(eventQuery);
assertEquals("Can't search by demo for all question approved have \"test\" charaters in content", listQuickSearch.size(), 3);
// Search with UnActivate question by demo.
question = faqService_.getQuestionById(categoryId1 + "/" + Utils.QUESTION_HOME + "/" + questionId3);
assertNotNull("Get question is null! ", question);
question.setActivated(false);
faqService_.saveQuestion(question, false, faqSetting_);
listQuickSearch = faqService_.getSearchResults(eventQuery);
// System.out.println("\n\n ====> " + listQuickSearch.size());
assertEquals("Can't search by demo for all question activate have \"test\" charaters in content", listQuickSearch.size(), 2);
// search by author
eventQuery.setAuthor("Ly Dinh Quang");
eventQuery.setText("");
listQuickSearch = faqService_.getSearchResults(eventQuery);
assertEquals("Can't search for all questions have auther is 'Phung Hai Nam'.", listQuickSearch.size(), 1);
// search by
}
public void testAnswer() throws Exception {
// set data default
defaultData();
// create Answer
Answer answer1 = createAnswer(USER_ROOT, "Root answer 1 for question");
Answer answer2 = createAnswer(USER_DEMO, "Demo answer 2 for question");
// Save answer:
String questionId = categoryId1 + "/" + Utils.QUESTION_HOME + "/" + questionId1;
faqService_.saveAnswer(questionId, new Answer[] { answer1, answer2 });
// Get answer by id:
assertNotNull("Answer 2 have not been added", faqService_.getAnswerById(questionId, answer2.getId()));
// Update answers:
assertEquals(answer1.getResponses(), "Root answer 1 for question");
String content = "Root answer 1 for question edit";
answer1.setResponses(content);
faqService_.saveAnswer(questionId, answer1, false);
assertEquals("Content of Answer have not been changed to \"Root answer 1 for question edit\"", faqService_.getAnswerById(questionId, answer1.getId()).getResponses(), content);
// Get all answers of question:
JCRPageList pageList = faqService_.getPageListAnswer(questionId, false);
pageList.setPageSize(10);
assertEquals("Question have 2 answers", pageList.getPageItem(0).size(), 2);
// Delete answer
faqService_.deleteAnswer(questionId, answer1.getId());
pageList = faqService_.getPageListAnswer(questionId, false);
pageList.setPageSize(10);
assertEquals("Answer 1 have not been removed, question only have one answer", pageList.getPageItem(0).size(), 1);
// remove Data when tested answer
// faqService_.removeCategory(Utils.CATEGORY_HOME);
}
public void testComment() throws Exception {
// set default data
defaultData();
Comment comment1 = createComment(USER_ROOT, "Root comment 1 for question");
Comment comment2 = createComment(USER_DEMO, "Demo comment 2 for question");
// Save comment
String questionId = categoryId1 + "/" + Utils.QUESTION_HOME + "/" + questionId1;
faqService_.saveComment(questionId, comment1, true);
faqService_.saveComment(questionId, comment2, true);
// Get comment by Id:
assertNotNull("Comment 1 have not been added ", faqService_.getCommentById(questionId, comment1.getId()));
assertNotNull("Comment 1 have not been added ", faqService_.getCommentById(questionId, comment2.getId()));
// Get all comment of question
JCRPageList pageList = faqService_.getPageListComment(questionId);
pageList.setPageSize(10);
assertEquals("Question have two comments", pageList.getPageItem(0).size(), 2);
// Delete comment by id
faqService_.deleteComment(questionId, comment1.getId());
pageList = faqService_.getPageListComment(questionId);
pageList.setPageSize(10);
assertEquals("Comment 1 is not removed", pageList.getPageItem(0).size(), 1);
// remove Data when tested comment
// faqService_.removeCategory(Utils.CATEGORY_HOME);
}
public void _testImportData() throws Exception {
// remove old data;
removeData();
// Before import data, number question is 0
assertEquals("Before import data, number question is not 0", faqService_.getAllQuestions().getAvailable(), 0);
try {
File file = new File("../service/src/test/resources/conf/portal/Data.xml");
String content = FileUtils.readFileToString(file, "UTF-8");
byte currentXMLBytes[] = content.getBytes();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(currentXMLBytes);
faqService_.importData(Utils.CATEGORY_HOME, byteArrayInputStream, false);
} catch (IOException e) {
log.debug("Testing import data fail: ", e);
}
// After imported data, number questions is 5
assertEquals("Before import data, number question is not 5", faqService_.getAllQuestions().getAvailable(), 5);
// remove Data when tested comment
// faqService_.removeCategory(Utils.CATEGORY_HOME);
}
public void testWatchCategory() throws Exception {
// add default data
defaultData();
// add watch
faqService_.addWatchCategory(categoryId1, createNewWatch(USER_ROOT, "maivanha1610@gmail.com"));
faqService_.addWatchCategory(categoryId1, createNewWatch(USER_DEMO, "maivanha1610@yahoo.com"));
faqService_.addWatchCategory(categoryId1, createNewWatch(USER_JOHN, "john@localhost.com"));
// Check hasWatch of category
assertEquals("This category has not watch.", faqService_.hasWatch(categoryId1), true);
// check get All watch in category.
assertEquals("Size of all watch in this category is not 3", faqService_.getWatchByCategory(categoryId1).size(), 3);
// Check category is watched by user
assertEquals("User root didn't watch this category", faqService_.isUserWatched(USER_ROOT, categoryId1), true);
// get all categories are watched by user
assertEquals("user root have not watched some categories", faqService_.getWatchedCategoryByUser(USER_ROOT).getAvailable(), 1);
// Check unWatch Category by user
faqService_.unWatchCategory(categoryId1, USER_ROOT);
assertEquals("User root has watching this category", faqService_.isUserWatched(USER_ROOT, categoryId1), false);
// remove Data when tested comment
// faqService_.removeCategory(Utils.CATEGORY_HOME);
}
public void testQuestionMultilanguage() throws Exception {
// set data default
defaultData();
// Add question language for question
String questionId = categoryId1 + "/" + Utils.QUESTION_HOME + "/" + questionId1;
faqService_.addLanguage(questionId, createQuestionLanguage("VietNam"));
faqService_.addLanguage(questionId, createQuestionLanguage("French"));
// Get all question language (it is 3: English(default), VietNam and French):
List<QuestionLanguage> questionLanguages = faqService_.getQuestionLanguages(questionId);
assertEquals("Language of this question is not 3", questionLanguages.size(), 3);
// Get Question_language by language
QuestionLanguage questionLanguage = faqService_.getQuestionLanguageByLanguage(questionId, "VietNam");
assertNotNull("QuestionLanguage is Null.", questionLanguage);
// add answer1 in question language by questionLanguage
Answer answer = createAnswer(USER_ROOT, "Answer of language VietNam 1");
String answerId = answer.getId();
answer.setLanguage("VietNam");
questionLanguage.setAnswers(new Answer[] { answer });
faqService_.saveAnswer(questionId, questionLanguage);
assertNotNull("Answer1 in question language is not save.", faqService_.getAnswerById(questionId, answerId, "VietNam"));
// add answer2 in question language by answer
answer = createAnswer(USER_ROOT, "Answer of language VietNam 2");
answerId = answer.getId();
answer.setLanguage("VietNam");
faqService_.saveAnswer(questionId, answer, "VietNam");
assertNotNull("Answer2 in question language is not save.", faqService_.getAnswerById(questionId, answerId, "VietNam"));
// add comment in question language
Comment comment = createComment(USER_ROOT, "New comment of question language");
String commentId = comment.getId();
comment.setNew(true);
faqService_.saveComment(questionId, comment, "VietNam");
assertNotNull("Comment in question language is not save.", faqService_.getCommentById(questionId, commentId, "VietNam"));
// Delete answer in question language.
faqService_.deleteAnswerQuestionLang(questionId, answerId, "VietNam");
assertNull("Answer2 in question language is not deleted.", faqService_.getAnswerById(questionId, answerId, "VietNam"));
// Delete comment in question language.
faqService_.deleteCommentQuestionLang(questionId, commentId, "VietNam");
assertNull("Comment in question language is not deleted.", faqService_.getCommentById(questionId, commentId, "VietNam"));
}
public void testUserSetting() throws Exception {
// save userSetting information into user node
faqSetting_.setDisplayMode("both");
faqSetting_.setOrderBy("created");
faqSetting_.setOrderType("asc");
assertEquals("All data is not sorted by created date", faqSetting_.getOrderBy(), "created");
assertEquals("Data is not sorted asc", faqSetting_.getOrderType(), "asc");
faqService_.saveFAQSetting(faqSetting_, USER_ROOT);
// get all userSetting information from user node and set for FAQSetting object
FAQSetting setting = new FAQSetting();
setting.setOrderBy(null);
setting.setOrderType(null);
assertNull("Set order by is not null before get user Setting", setting.getOrderBy());
assertNull("Set order type is not null before get user setting", setting.getOrderType());
faqService_.getUserSetting(USER_ROOT, setting);
assertEquals("Get setting of user,data is not order by created date", setting.getOrderBy(), "created");
assertEquals("Get setting of user,data is not order asc", setting.getOrderType(), "asc");
// update userSetting information in to user node
setting.setSortQuestionByVote(false);
setting.setOrderBy("alpha");
setting.setOrderType("des");
faqService_.saveFAQSetting(setting, USER_ROOT);
assertEquals("user setting before save,do not order by created date", faqSetting_.getOrderBy(), "created");
assertEquals("user setting before save,do not order asc", faqSetting_.getOrderType(), "asc");
faqService_.getUserSetting(USER_ROOT, faqSetting_);
assertEquals("user setting after saved,do not order by created alphabet", faqSetting_.getOrderBy(), "alpha");
assertEquals("user setting before saveddo ,do not order des", faqSetting_.getOrderType(), "des");
// Get all admins of FAQ
List<String> list = faqService_.getAllFAQAdmin();
assertNotNull(list);
assertEquals("User demo is addmin of FAQ System", faqService_.isAdminRole(USER_DEMO), false);
/*
* // Test send mail for user: Message message = new Message(); message.setMimeType("text/htm") ; message.setFrom("maivanha1610@yahoo.com") ; message.setTo("maivanha1610@gmail.com") ; message.setSubject("Test send mail") ; message.setBody("run JUnit test") ; try { faqService_.sendMessage(message) ; } catch(Exception e) { }
*/
}
public void testUserAvatar() throws Exception {
// Add new avatar for user:
faqService_.saveUserAvatar(USER_ROOT, createUserAvatar("rootAvatar"));
// Get user avatar
assertNotNull(faqService_.getUserAvatar(USER_ROOT));
// Set default avartar for user
faqService_.setDefaultAvatar(USER_ROOT);
assertNull(faqService_.getUserAvatar(USER_ROOT));
}
public void testGetPendingMessages() throws Exception {
// set data default
defaultData();
Question question = faqService_.getQuestionById(categoryId1 + "/" + Utils.QUESTION_HOME + "/" + questionId1);
question.setEmail("dttempmail@gmail.com");
question.setEmailsWatch(new String[] { "duytucntt@gmail.com, tu.duy@exoplatform.com" });
question.setUsersWatch(new String[] { "root, demo" });
Answer answer = createAnswer(USER_ROOT, "Answer Content");
question.setAnswers(new Answer[] { answer });
question.setLink("http://domain.com/portal/public/classic");
faqSetting_.setDisplayMode("approved");
// save question for send email watched
faqService_.saveQuestion(question, false, faqSetting_);
Iterator<NotifyInfo> iterator = faqService_.getPendingMessages();
List<String> emails = new ArrayList<String>();
while (iterator.hasNext()) {
NotifyInfo notifyInfo = iterator.next();
emails = notifyInfo.getEmailAddresses();
}
assertEquals(emails.toString(), "[dttempmail@gmail.com, duytucntt@gmail.com, tu.duy@exoplatform.com]");
}
}