/*
* Copyright (C) 2003-2011 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.seo;
import java.util.ArrayList;
import javax.jcr.Node;
import org.exoplatform.container.ExoContainer;
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.portal.application.PortalRequestContext;
import org.exoplatform.portal.mop.user.UserNode;
import org.exoplatform.portal.webui.portal.UIPortal;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.portal.webui.workspace.UIPortalApplication;
import org.exoplatform.services.wcm.BaseWCMTestCase;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.gatein.pc.api.PortletInvoker;
import org.mockito.Mockito;
/**
* Created by The eXo Platform SAS
* Author : eXoPlatform
* exo@exoplatform.com
* Jun 21, 2011
*/
public class TestSEOService extends BaseWCMTestCase{
/** The SEO Service. */
private SEOService seoService;
public void setUp() throws Exception {
super.setUp();
sessionProvider = sessionProviderService_.getSystemSessionProvider(null);
seoService = (SEOService) container.getComponentInstanceOfType(SEOService.class);
applySystemSession();
}
public void testConstruct() throws Exception{
assertNotNull(seoService);
}
/**
* test store page metadata
* @throws Exception
*/
public void testStorePageMetadata() throws Exception {
PageMetadataModel metaModel = new PageMetadataModel();
metaModel.setUri("home");
metaModel.setPageReference("home");
metaModel.setKeywords("test");
metaModel.setRobotsContent("index,follow");
metaModel.setSiteMap(true);
metaModel.setDescription("test description");
metaModel.setPriority(0);
String portalName = "classic";
WebuiRequestContext context = Mockito.mock(WebuiRequestContext.class);
WebuiRequestContext.setCurrentInstance(context);
PortalRequestContext ctx = Mockito.mock(PortalRequestContext.class);
Mockito.when(Util.getPortalRequestContext()).thenReturn(ctx);
UIPortal uiPortal = Mockito.mock(UIPortal.class);
UIPortalApplication uiPortalApp = Mockito.mock(UIPortalApplication.class);
uiPortalApp.setCurrentSite(uiPortal);
Mockito.when(ctx.getUIApplication()).thenReturn(uiPortalApp);
Mockito.when(uiPortalApp.getCurrentSite()).thenReturn(uiPortal);
UserNode userNode = Mockito.mock(UserNode.class);
Mockito.when(uiPortal.getSelectedUserNode()).thenReturn(userNode);
session = sessionProvider.getSession("portal-system", repository);
Node rootNode = session.getRootNode();
Node seoNode = rootNode.addNode("SEO");
seoNode.addMixin("mix:referenceable");
session.save();
Mockito.when(userNode.getId()).thenReturn(seoNode.getUUID());
seoService.storeMetadata(metaModel,portalName,false, "en");
PageMetadataModel retrieveModel = seoService.getPageMetadata("home", "en");
assertEquals(retrieveModel.getKeywords(), "test");
}
/**
* test store content metadata
* @throws Exception
*/
public void testStoreContentMetadata() throws Exception {
applyUserSession("john", "gtn", "collaboration");
WebuiRequestContext context = Mockito.mock(WebuiRequestContext.class);
WebuiRequestContext.setCurrentInstance(context);
PortalRequestContext ctx = Mockito.mock(PortalRequestContext.class);
Mockito.when(Util.getPortalRequestContext()).thenReturn(ctx);
PageMetadataModel metaModel = new PageMetadataModel();
Node seoNode = session.getRootNode().addNode("parentNode").addNode("childNode");
if(!seoNode.isNodeType("mix:referenceable")) {
seoNode.addMixin("mix:referenceable");
}
session.save();
metaModel.setUri(seoNode.getUUID());
metaModel.setKeywords("test");
metaModel.setRobotsContent("index,follow");
metaModel.setSiteMap(true);
metaModel.setDescription("test description");
metaModel.setPriority(0);
seoService.storeMetadata(metaModel,"classic",true, "en");
ArrayList<String> params = new ArrayList<String>();
params.add("/repository/collaboration/parentNode/childNode");
PageMetadataModel retrieveModel = seoService.getContentMetadata(params, "en");
assertEquals(retrieveModel.getKeywords(), "test");
}
/**
* test remove page metedate
*/
public void tesRemovePageMetadata() throws Exception{
PageMetadataModel metaModel = new PageMetadataModel();
metaModel.setUri("home");
metaModel.setPageReference("home");
metaModel.setKeywords("test");
metaModel.setRobotsContent("index,follow");
seoService.storeMetadata(metaModel,"classic",false, "en");
assertEquals("test", seoService.getPageMetadata("home", "en").getKeywords());
seoService.removePageMetadata(metaModel, "classic",false, "en");
assertNull(seoService.getPageMetadata("home", "en"));
}
/**
* test remove content metedate
*/
public void tesRemoveContentMetadata() throws Exception{
PageMetadataModel metaModel = new PageMetadataModel();
metaModel.setUri("home");
metaModel.setKeywords("test");
metaModel.setRobotsContent("index,follow");
seoService.storeMetadata(metaModel,"classic",true, "en");
ArrayList<String> params = new ArrayList<String>();
params.add("home");
assertEquals("test", seoService.getContentMetadata(params, "en").getKeywords());
seoService.removePageMetadata(metaModel, "classic",true, "en");
assertNull(seoService.getPageMetadata("home", "en"));
}
public void tearDown() throws Exception {
super.tearDown();
}
}