/*
* Copyright (C) 2003-2013 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.exoplatform.services.wcm.search.connector;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import org.exoplatform.commons.api.search.SearchServiceConnector;
import org.exoplatform.commons.api.search.data.SearchContext;
import org.exoplatform.commons.api.search.data.SearchResult;
import org.exoplatform.component.test.ConfigurationUnit;
import org.exoplatform.component.test.ConfiguredBy;
import org.exoplatform.component.test.ContainerScope;
import org.exoplatform.services.security.ConversationState;
import org.exoplatform.services.security.Identity;
import org.exoplatform.services.wcm.core.NodetypeConstant;
import org.exoplatform.services.wcm.search.base.BaseSearchTest;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import org.exoplatform.web.controller.metadata.ControllerDescriptor;
import org.exoplatform.web.controller.router.Router;
/**
* Created by The eXo Platform SAS
* Author : eXoPlatform
* exo@exoplatform.com
* Feb 5, 2013
*/
@ConfiguredBy({
@ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/exo.portal.component.portal-configuration.xml"),
@ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/exo.portal.component.identity-configuration.xml"),
@ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/standalone/ecms-test-configuration.xml"),
@ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/wcm/test-search-configuration.xml")
})
public class TestFileSearchServiceConnector extends BaseSearchTest {
private SearchServiceConnector fileSearch_;
public void setUp() throws Exception {
super.setUp();
applyUserSession("john", "gtn",COLLABORATION_WS);
ConversationState c = new ConversationState(new Identity(session.getUserID()));
ConversationState.setCurrent(c);
fileSearch_ = WCMCoreUtils.getService(FileSearchServiceConnector.class);
}
public void tearDown() throws Exception {
NodeIterator iterator = null;
Node classicPortal = (Node)session.getItem("/sites content/live/classic");
iterator = classicPortal.getNodes();
while (iterator.hasNext()) {
iterator.nextNode().remove();
}
Node sharedPortal = (Node)session.getItem("/sites content/live/shared");
iterator = sharedPortal.getNodes();
while (iterator.hasNext()) {
iterator.nextNode().remove();
}
session.save();
super.tearDown();
}
protected void addDocuments() throws Exception {
Node classicPortal = (Node)session.getItem("/sites content/live/classic");
addChildNodes(classicPortal);
Node sharedPortal = (Node)session.getItem("/sites content/live/shared");
addChildNodes(sharedPortal);
}
@Override
protected void addChildNodes(Node parentNode) throws Exception{
addFile(parentNode, "file1", "john Smith");
addFile(parentNode, "file2", "cjohn Felix Anthony Cena");
addFile(parentNode, "file3", "anthony Hopkins");
}
private void addFile(Node parentNode, String name, String data) throws Exception {
Node file = parentNode.addNode(name, "nt:file");
file.addMixin("exo:sortable");
file.setProperty("exo:title", name);
Node content = file.addNode("jcr:content", "nt:resource");
content.setProperty("jcr:encoding", "UTF-8");
content.setProperty("jcr:mimeType", "text/html");
content.setProperty("jcr:lastModified", new Date().getTime());
content.setProperty("jcr:data", data);
file.addMixin(NodetypeConstant.EXO_DATETIME);
file.setProperty("exo:dateCreated",new GregorianCalendar());
file.setProperty("exo:dateModified",new GregorianCalendar());
session.save();
}
public void testSearchSingle() throws Exception {
Collection<String> sites = new ArrayList<String>();
sites.add("classic");
Collection<SearchResult> ret
= fileSearch_.search(new SearchContext(new Router(new ControllerDescriptor()), "classic"), "anthony~",
sites,
0, 20, "title", "asc");
assertEquals(4, ret.size());//2
}
public void testSearchSingleWithOffset() throws Exception {
Collection<String> sites = new ArrayList<String>();
sites.add("classic");
Collection<SearchResult> ret
= fileSearch_.search(new SearchContext(new Router(new ControllerDescriptor()), "classic"), "anthony~",
sites,
1, 20, "title", "asc");
assertEquals(3, ret.size());//1
}
public void testSearchSingleWithLimit() throws Exception {
Collection<String> sites = new ArrayList<String>();
sites.add("classic");
Collection<SearchResult> ret
= fileSearch_.search(new SearchContext(new Router(new ControllerDescriptor()), "classic"), "anthony~",
sites,
0, 1, "title", "asc");
assertEquals(1, ret.size());
}
public void testSearchMultiple() throws Exception {
Collection<String> sites = new ArrayList<String>();
sites.add("classic");
Collection<SearchResult> ret
= fileSearch_.search(new SearchContext(new Router(new ControllerDescriptor()), "classic"), "anthony cjohn~",
sites,
0, 20, "title", "asc");
assertEquals(2, ret.size());//3
}
public void testSearchMultipleWithOffset() throws Exception {
Collection<String> sites = new ArrayList<String>();
sites.add("classic");
Collection<SearchResult> ret
= fileSearch_.search(new SearchContext(new Router(new ControllerDescriptor()), "classic"), "anthony cjohn~",
sites,
1, 20, "title", "asc");
assertEquals(1, ret.size());//2
}
public void testSearchMultipleWithLimit() throws Exception {
Collection<String> sites = new ArrayList<String>();
sites.add("classic");
Collection<SearchResult> ret
= fileSearch_.search(new SearchContext(new Router(new ControllerDescriptor()), "classic"), "anthony cjohn~",
sites,
0, 1, "title", "asc");
assertEquals(1, ret.size());
}
public void testSearchPhrase() throws Exception {
Collection<String> sites = new ArrayList<String>();
sites.add("classic");
Collection<SearchResult> ret
= fileSearch_.search(new SearchContext(new Router(new ControllerDescriptor()), "classic"), "\"anthony cena\"",
sites,
0, 20, "title", "asc");
assertEquals(2, ret.size());//1
}
public void testSearchPhraseWithOffset() throws Exception {
Collection<String> sites = new ArrayList<String>();
sites.add("classic");
Collection<SearchResult> ret
= fileSearch_.search(new SearchContext(new Router(new ControllerDescriptor()), "classic"), "\"anthony cena\"",
sites,
1, 20, "title", "asc");
assertEquals(1, ret.size());//0
}
}