/* * Copyright (C) 2003-2009 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; import java.util.Arrays; import java.util.Calendar; import java.util.GregorianCalendar; import junit.framework.TestCase; import org.exoplatform.commons.utils.ISO8601; /** * @author <a href="mailto:patrice.lamarque@exoplatform.com">Patrice Lamarque</a> * @version $Revision$ */ public class TestFAQEventQuery extends TestCase { protected void setUp() throws Exception { super.setUp(); } public void testQuickSearch() throws Exception { FAQEventQuery queryObject = new FAQEventQuery(); /* * eventQuery.setAdmin(uiQuickSearch.faqSetting_.isAdmin()) ; eventQuery.setUserMembers(UserHelper.getAllGroupAndMembershipOfUser(FAQUtils.getCurrentUser())); eventQuery.setUserId(FAQUtils.getCurrentUser()) ; eventQuery.setText(text); eventQuery.setType("categoryAndQuestion"); */ queryObject.setPath("/foo"); queryObject.setType(FAQEventQuery.CATEGORY_AND_QUESTION); queryObject.setAdmin(true); String selector = "/jcr:root/foo//*"; assertEquals(selector + "[]", queryObject.getQuery()); queryObject.setText("bar"); assertEquals(selector + "[ jcr:contains(., 'bar')]", queryObject.getQuery()); queryObject.setAdmin(false); String predicate = "jcr:contains(., 'bar') and ( not(@exo:isApproved) or @exo:isApproved='true' )"; assertEquals(selector + "[ " + predicate + " ]", queryObject.getQuery()); queryObject.setUserId("zed"); predicate = "jcr:contains(., 'bar') and ( not(@exo:isApproved) or @exo:isApproved='true' or exo:author='zed' )"; assertEquals(selector + "[ " + predicate + " ]", queryObject.getQuery()); queryObject.setViewingCategories(Arrays.asList("cat1")); predicate += " and (@exo:categoryId='cat1' or @exo:id='cat1' and ( @exo:userPrivate='' ) )"; assertEquals(selector + "[ " + predicate + "]", queryObject.getQuery()); } public void testBuildCategoryQuery() throws Exception { final FAQEventQuery queryObject = new FAQEventQuery(); queryObject.setPath("/foo"); queryObject.setType(FAQEventQuery.FAQ_CATEGORY); queryObject.setAdmin(true); String selector = "/jcr:root/foo//element(*,exo:faqCategory)[(@exo:isView='true') "; assertEquals(selector + "]", queryObject.getQuery()); queryObject.setText("bar"); String predicate = " and (jcr:contains(., 'bar'))"; assertEquals(selector + predicate + "]", queryObject.getQuery()); queryObject.setName("zed"); predicate += " and (jcr:contains(@exo:name, 'zed'))"; assertEquals(selector + predicate + "]", queryObject.getQuery()); queryObject.setIsModeQuestion("blah"); predicate += " and (@exo:isModerateQuestions='blah')"; assertEquals(selector + predicate + "]", queryObject.getQuery()); queryObject.setModerator("john"); predicate += " and (jcr:contains(@exo:moderators, 'john'))"; assertEquals(selector + predicate + "]", queryObject.getQuery()); queryObject.setAdmin(false); queryObject.setUserMembers(Arrays.asList("jack", "jerry")); predicate += " and (not(@exo:userPrivate) or @exo:userPrivate='' or @exo:userPrivate='jack' or @exo:moderators='jack' or @exo:userPrivate='jerry' or @exo:moderators='jerry')"; assertEquals(selector + predicate + "]", queryObject.getQuery()); } public void testBuildQuestionQuery() throws Exception { String selector = "/jcr:root/foo//* [("; String predicate; final FAQEventQuery eventQuery = new FAQEventQuery(); eventQuery.setType(FAQEventQuery.FAQ_QUESTION); eventQuery.setPath("/foo"); eventQuery.setAuthor("root"); predicate = "jcr:contains(@exo:author, 'root')"; assertEquals(selector + predicate + ")]".trim(), eventQuery.getQuery().trim()); eventQuery.setEmail("root@exoplatform"); predicate += " and jcr:contains(@exo:email, 'root@exoplatform')"; assertEquals(selector + predicate + ")]".trim(), eventQuery.getQuery().trim()); Calendar calendar = GregorianCalendar.getInstance(); eventQuery.setFromDate(calendar); predicate += " and ((@exo:createdDate >= xs:dateTime('" + ISO8601.format(calendar) + "')) " + "or (@exo:dateResponse >= xs:dateTime('" + ISO8601.format(calendar) + "')) " + "or (@exo:dateComment >= xs:dateTime('" + ISO8601.format(calendar) + "')))"; assertEquals(selector + predicate + ")]".trim(), eventQuery.getQuery().trim()); calendar = GregorianCalendar.getInstance(); eventQuery.setToDate(calendar); predicate += " and ((@exo:createdDate <= xs:dateTime('" + ISO8601.format(calendar) + "')) " + "or (@exo:dateResponse <= xs:dateTime('" + ISO8601.format(calendar) + "')) " + "or (@exo:dateComment <= xs:dateTime('" + ISO8601.format(calendar) + "')))"; assertEquals(selector + predicate + ")]".trim(), eventQuery.getQuery().trim()); eventQuery.setLanguage("English"); eventQuery.setResponse("response"); predicate += ") and (( exo:responseLanguage='English' and jcr:contains(@exo:responses,'response'))"; assertEquals(selector + predicate + ")]".trim(), eventQuery.getQuery().trim()); eventQuery.setComment("comment"); predicate += " or ( exo:commentLanguage='English' and jcr:contains(@exo:comments,'comment'))"; assertEquals(selector + predicate + ")]".trim(), eventQuery.getQuery().trim()); /* * String tempPredicate = predicate; eventQuery.setText("") ; //tempPredicate += ") and (exo:language='English')"; assertEquals(selector + tempPredicate + "]", eventQuery.getQuery()); */ eventQuery.setText("text"); predicate += " or (jcr:contains(., 'text') and ( exo:language='English' or exo:commentLanguage='English' or exo:responseLanguage='English'))"; assertEquals(selector + predicate + " )]".trim(), eventQuery.getQuery().trim()); eventQuery.setViewingCategories(Arrays.asList("categoryId1", "categoryId2")); predicate += ") and (exo:categoryId='categoryId1' or exo:categoryId='categoryId2')"; assertEquals((selector + predicate + "]").trim(), eventQuery.getQuery().trim()); eventQuery.setUserId("root"); eventQuery.setAdmin(true); } }