/* * 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 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.upgrade; import java.util.Calendar; import javax.jcr.Node; import javax.jcr.Session; import org.exoplatform.container.xml.InitParams; import org.exoplatform.container.xml.ValueParam; import org.exoplatform.forum.base.BaseForumServiceTestCase; import org.exoplatform.forum.common.CommonUtils; import org.exoplatform.forum.common.jcr.KSDataLocation; import org.exoplatform.forum.service.Category; import org.exoplatform.forum.service.DataStorage; import org.exoplatform.forum.service.ForumNodeTypes; import org.exoplatform.forum.service.Utils; import org.exoplatform.forum.service.impl.JCRDataStorage; import org.exoplatform.forum.service.updater.ForumServiceUpdaterPlugin; import org.exoplatform.services.jcr.ext.common.SessionProvider; public class ForumServiceUpdaterTestCase extends BaseForumServiceTestCase { private KSDataLocation dataLocator; private DataStorage dataStorage; private ForumServiceUpdaterPlugin serviceUpdaterPlugin; public ForumServiceUpdaterTestCase() { } public void setUp() throws Exception { super.setUp(); dataLocator = CommonUtils.getComponent(KSDataLocation.class); dataStorage = CommonUtils.getComponent(JCRDataStorage.class); // make old data createOldCategoriesData(); // InitParams initParams = new InitParams(); ValueParam param = new ValueParam(); param.setName("product.group.id"); param.setValue("org.exoplatform.forum"); initParams.put("product.group.id", param); serviceUpdaterPlugin = new ForumServiceUpdaterPlugin(initParams); } @Override public void tearDown() throws Exception { super.tearDown(); } public void testUpgradeCategorySpace() throws Exception { // check before upgrade Category cateSpace = dataStorage.getCategory(Utils.CATEGORY_SPACE_ID_PREFIX); assertNotNull(cateSpace); assertFalse(cateSpace.isIncludedSpace()); // get by DataStorage#getCategoryIncludedSpace Category cateSpace2 = dataStorage.getCategoryIncludedSpace(); assertNotNull(cateSpace2); // check with normal category Category category = dataStorage.getCategory(Utils.CATEGORY + "0"); assertNotNull(category); assertFalse(hasProperty(category.getPath(), ForumNodeTypes.EXO_INCLUDED_SPACE)); // run upgrade serviceUpdaterPlugin.processUpgrade("3.5.x", "4.0.x"); // check after upgrade cateSpace = dataStorage.getCategory(Utils.CATEGORY_SPACE_ID_PREFIX); assertNotNull(cateSpace); assertTrue(cateSpace.isIncludedSpace()); // get by DataStorage#getCategoryIncludedSpace cateSpace2 = dataStorage.getCategoryIncludedSpace(); assertNotNull(cateSpace2); assertEquals(cateSpace, cateSpace2); // check with old normal category Category oldCategory = dataStorage.getCategory(Utils.CATEGORY + "0"); assertNotNull(category); assertTrue(hasProperty(oldCategory.getPath(), ForumNodeTypes.EXO_INCLUDED_SPACE)); assertFalse(oldCategory.isIncludedSpace()); // check with create new normal category initDefaultData(); // category = dataStorage.getCategory(categoryId); assertNotNull(category); assertTrue(hasProperty(category.getPath(), ForumNodeTypes.EXO_INCLUDED_SPACE)); assertFalse(category.isIncludedSpace()); } private boolean hasProperty(String path, String property) throws Exception { SessionProvider sProvider = SessionProvider.createSystemProvider(); try { Session session = dataLocator.getSessionManager().getSession(sProvider); Node cateNode = (Node) session.getItem(path); return cateNode.hasProperty(property); } catch (Exception e) { return false; } finally { sProvider.close(); } } private void createOldCategoriesData() throws Exception { SessionProvider sProvider = SessionProvider.createSystemProvider(); try { Session session = dataLocator.getSessionManager().getSession(sProvider); Node cateHome = session.getRootNode().getNode(dataLocator.getForumCategoriesLocation()); // normal category for (int i = 0; i < 5; i++) { Category category = createCategory(Utils.CATEGORY + "" + i); createOldCategoriesData(cateHome, category); } // category space Category cateSpace = createCategory(Utils.CATEGORY_SPACE_ID_PREFIX); createOldCategoriesData(cateHome, cateSpace); } finally { sProvider.close(); } } private void createOldCategoriesData(Node cateHome, Category category) throws Exception { Node catNode = cateHome.addNode(category.getId(), ForumNodeTypes.EXO_FORUM_CATEGORY); catNode.setProperty(ForumNodeTypes.EXO_ID, category.getId()); catNode.setProperty(ForumNodeTypes.EXO_OWNER, category.getOwner()); catNode.setProperty(ForumNodeTypes.EXO_CREATED_DATE, Calendar.getInstance()); catNode.setProperty(ForumNodeTypes.EXO_NAME, category.getCategoryName()); catNode.setProperty(ForumNodeTypes.EXO_CATEGORY_ORDER, category.getCategoryOrder()); catNode.setProperty(ForumNodeTypes.EXO_DESCRIPTION, category.getDescription()); catNode.setProperty(ForumNodeTypes.EXO_MODIFIED_BY, category.getModifiedBy()); catNode.setProperty(ForumNodeTypes.EXO_MODIFIED_DATE, Calendar.getInstance()); catNode.setProperty(ForumNodeTypes.EXO_USER_PRIVATE, category.getUserPrivate()); catNode.setProperty(ForumNodeTypes.EXO_CREATE_TOPIC_ROLE, category.getCreateTopicRole()); catNode.setProperty(ForumNodeTypes.EXO_POSTER, category.getPoster()); catNode.setProperty(ForumNodeTypes.EXO_VIEWER, category.getViewer()); category.setPath(catNode.getPath()); // cateHome.getSession().save(); } }