/*
* Copyright (C) 2003-2008 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.services.ecm.dms.documents;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.Session;
import org.exoplatform.services.cms.documents.FavoriteService;
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.jcr.ext.app.SessionProviderService;
import org.exoplatform.services.jcr.ext.common.SessionProvider;
import org.exoplatform.services.security.ConversationState;
import org.exoplatform.services.security.Identity;
import org.exoplatform.services.wcm.BaseWCMTestCase;
import org.junit.FixMethodOrder;
import org.junit.runners.MethodSorters;
/**
* Created by The eXo Platform SARL Author : Nguyen Anh Vu anhvurz90@gmail.com
* Nov 17, 2009 11:14:48 AM
*/
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestFavoriteService extends BaseWCMTestCase {
// final static public String EXO_FAVOURITE_NODE = "exo:favourite";
// final static public String EXO_FAVOURITER_PROPERTY = "exo:favouriter";
private FavoriteService favoriteService;
private Node rootNode;
public void setUp() throws Exception {
super.setUp();
favoriteService = (FavoriteService) container.getComponentInstanceOfType(FavoriteService.class);
applyUserSession("john", "gtn",COLLABORATION_WS);
SessionProviderService sessionProviderService = (SessionProviderService) container.getComponentInstanceOfType(SessionProviderService.class);
SessionProvider sessionProvider = sessionProviderService.getSystemSessionProvider(null);
ManageableRepository manageableRepository = repositoryService.getRepository("repository");
Session session = sessionProvider.getSession(COLLABORATION_WS, manageableRepository);
ConversationState c = new ConversationState(new Identity(session.getUserID()));
ConversationState.setCurrent(c);
rootNode = session.getRootNode();
String[] names = new String[] {"root", "demo", "james", "john", "marry"};
for (String name : names)
if (rootNode.hasNode(name)) {
rootNode.getNode(name).remove();
rootNode.save();
}
}
public void tearDown() throws Exception {
List<Node> favoritesOfJohn = favoriteService.getAllFavoriteNodesByUser(session.getWorkspace().getName(), REPO_NAME, "john");
for (Node node : favoritesOfJohn) {
favoriteService.removeFavorite(node, "john");
node.remove();
}
session.save();
super.tearDown();
}
/**
* test method addFavourite. Input: /testAddFavourite1, /testAddFavorite2 nodes
* tested action: add favorite for users 'john' to the nodes
* above. Expected value : 2 for favorite node list size
*
* @throws Exception
*/
public void testAddFavorite() throws Exception {
Node testAddFavouriteNode1 = rootNode.addNode("testAddFavorite1");
Node testAddFavouriteNode2 = rootNode.addNode("testAddFavorite2");
session.save();
favoriteService.addFavorite(testAddFavouriteNode1, "john");
favoriteService.addFavorite(testAddFavouriteNode2, "john");
int johnFav = favoriteService.
getAllFavoriteNodesByUser(session.getWorkspace().getName(), REPO_NAME, "john").size();
assertEquals("testAddFavorite failed!", 2, johnFav);
// Add favorite to an un-existed user
favoriteService.addFavorite(testAddFavouriteNode2, "unknown");
assertEquals(0, favoriteService.getAllFavoriteNodesByUser(session.getWorkspace().getName(), REPO_NAME, "unknown").size());
testAddFavouriteNode1.remove();
testAddFavouriteNode2.remove();
session.save();
}
/**
* test method addFavourite. Input: /testAddFavourite1, /testAddFavorite2 nodes
* tested action: add favorite for users 'john' to the nodes
* above. Expected value : 2 for favorite node list size
* @throws Exception
*/
public void testIsFavoriter() throws Exception {
Node testAddFavouriteNode1 = rootNode.addNode("testAddFavorite1");
favoriteService.addFavorite(testAddFavouriteNode1, "john");
assertEquals(true, favoriteService.isFavoriter("john", testAddFavouriteNode1));
testAddFavouriteNode1.remove();
session.save();
}
/**
* test method removeFavourite. Input: /test1, /test2, /test3 nodes .Tested action:
* add favorite for 'john' to the nodes above,
* remove favorite for node /test2. Expected value :
* 2 for favorite node list size of 'john'
*
* @throws Exception
*/
public void testRemoveFavorite() throws Exception {
Node test1Remove = rootNode.addNode("test1");
Node test2Remove = rootNode.addNode("test2");
Node test3Remove = rootNode.addNode("test3");
session.save();
favoriteService.addFavorite(test1Remove, "john");
favoriteService.addFavorite(test2Remove, "john");
favoriteService.addFavorite(test3Remove, "john");
favoriteService.removeFavorite(test2Remove, "john");
int johnFav = favoriteService.
getAllFavoriteNodesByUser(session.getWorkspace().getName(), REPO_NAME, "john").size();
assertEquals("testRemoveFavorite failed!", 2, johnFav);
test1Remove.remove();
test2Remove.remove();
test3Remove.remove();
session.save();
}
/**
* test method getAllFavouriteNodesByUser. Input: /node0 /node1 /node2 /node3
* /node4. Tested action: add favorite for 'john' to node0, node2, node3, node4;
*
* expectedValue : 4 ( number of favorite nodes by 'john')
*
* @throws Exception
*/
public void testGetAllFavouriteNodesByUser() throws Exception {
Node node0 = rootNode.addNode("node0");
Node node1 = rootNode.addNode("node1");
Node node2 = rootNode.addNode("node2");
Node node3 = rootNode.addNode("node3");
Node node4 = rootNode.addNode("node4");
session.save();
favoriteService.addFavorite(node0, "john");
favoriteService.addFavorite(node1, "john");
favoriteService.addFavorite(node2, "john");
favoriteService.addFavorite(node3, "john");
favoriteService.addFavorite(node4, "john");
assertEquals("testGetAllFavouriteNodesByUser failed!", 5, favoriteService
.getAllFavoriteNodesByUser(
rootNode.getSession().getWorkspace().getName(), "repository",
"john").size());
session.save();
}
}