Package com.dotmarketing.portlets.structure.business

Source Code of com.dotmarketing.portlets.structure.business.URLMapTest

package com.dotmarketing.portlets.structure.business;

import static com.dotcms.repackage.org.junit.Assert.assertTrue;
import static com.dotcms.repackage.org.junit.Assert.fail;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.dotcms.repackage.org.apache.commons.io.IOUtils;
import com.dotcms.repackage.org.junit.After;
import com.dotcms.repackage.org.junit.Assert;
import com.dotcms.repackage.org.junit.Before;
import com.dotcms.repackage.org.junit.Test;

import com.dotcms.TestBase;
import com.dotcms.publisher.business.PublisherAPIImpl;
import com.dotmarketing.beans.ContainerStructure;
import com.dotmarketing.beans.Host;
import com.dotmarketing.beans.Identifier;
import com.dotmarketing.beans.MultiTree;
import com.dotmarketing.beans.Permission;
import com.dotmarketing.business.APILocator;
import com.dotmarketing.business.PermissionAPI;
import com.dotmarketing.business.RoleAPI;
import com.dotmarketing.cache.StructureCache;
import com.dotmarketing.db.HibernateUtil;
import com.dotmarketing.exception.DotHibernateException;
import com.dotmarketing.factories.MultiTreeFactory;
import com.dotmarketing.factories.WebAssetFactory;
import com.dotmarketing.portlets.containers.model.Container;
import com.dotmarketing.portlets.contentlet.business.ContentletAPI;
import com.dotmarketing.portlets.contentlet.model.Contentlet;
import com.dotmarketing.portlets.folders.model.Folder;
import com.dotmarketing.portlets.htmlpages.model.HTMLPage;
import com.dotmarketing.portlets.structure.factories.FieldFactory;
import com.dotmarketing.portlets.structure.factories.StructureFactory;
import com.dotmarketing.portlets.structure.model.Field;
import com.dotmarketing.portlets.structure.model.Field.FieldType;
import com.dotmarketing.portlets.structure.model.Structure;
import com.dotmarketing.portlets.templates.model.Template;
import com.dotmarketing.servlets.test.ServletTestRunner;
import com.dotmarketing.util.Logger;
import com.liferay.portal.model.User;

public class URLMapTest extends TestBase  {

  private Folder testFolder;
  private Template template;
  private Container container;
  private Structure testSt;
  private Contentlet widget;
  private User user;
 
  final String salt=Long.toString(System.currentTimeMillis());


  @Before
  public void createAssets() throws Exception {
    try {

      user = APILocator.getUserAPI().getSystemUser();
      Host demoHost = APILocator.getHostAPI().findByName("demo.dotcms.com", user, false);
      //      Host demoHost=APILocator.getHostAPI().findDefaultHost(user, false);


      HibernateUtil.startTransaction();

      // CONTAINER
      container = new Container();

      Structure simpleWidgetSt = StructureCache.getStructureByVelocityVarName("SimpleWidget");

      container.setCode( "$!{story}" );
      container.setFriendlyName( "newsTestContainer" );
      container.setIDate(new Date());
      container.setLuceneQuery("");
      container.setMaxContentlets(1);
      container.setModDate(new Date());
      container.setModUser(user.getUserId());
      container.setNotes("newsTestContainer");
      container.setOwner(user.getUserId());
      container.setPostLoop("");
      container.setPreLoop("");
      container.setShowOnMenu(true);
      container.setSortContentletsBy("");
      container.setSortOrder(2);
      container.setStaticify(true);
      container.setTitle("News Test Container");
      container.setType("containers");
      container.setUseDiv( true );

      List<ContainerStructure> csList = new ArrayList<ContainerStructure>();
          ContainerStructure cs = new ContainerStructure();
          cs.setStructureId(simpleWidgetSt.getInode());
          cs.setCode("$!{story}");
          csList.add(cs);

          container = APILocator.getContainerAPI().save(container, csList, demoHost, user, false);
//      WebAssetFactory.createAsset( container, user.getUserId(), demoHost );
      APILocator.getVersionableAPI().setLive( container );


      // TEMPLATE
      template = new Template();

      String body = "#parseContainer('" + container.getIdentifier() + "')";
      template.setBody( body );
      template.setFooter( "" );
      template.setFriendlyName( "newsTestTemplate" );
      template.setHeader( "" );
      template.setIDate( new Date() );
      template.setImage( "" );
      template.setModDate( new Date() );
      template.setModUser( user.getUserId() );
      template.setOwner( user.getUserId() );
      template.setSelectedimage( "" );
      template.setShowOnMenu( true );
      template.setSortOrder( 2 );
      template.setTitle( "News Test Template" );
      template.setType( "template" );

      template = APILocator.getTemplateAPI().saveTemplate( template, demoHost, user, false );
      APILocator.getVersionableAPI().setLive(template);


      // FOLDER
      testFolder = new Folder();

      testFolder.setFilesMasks( "" );
      testFolder.setIDate( new Date() );
      testFolder.setName( "news_test_folder_" + String.valueOf( new Date().getTime() ) );
      testFolder.setOwner( user.getUserId() );
      testFolder.setShowOnMenu( false );
      testFolder.setSortOrder( 0 );
      testFolder.setTitle( "news_test_folder_" + String.valueOf( new Date().getTime() ) );
      testFolder.setType( "folder" );
      testFolder.setHostId( demoHost.getIdentifier() );
      //Creates and set an identifier
      Identifier identifier = APILocator.getIdentifierAPI().createNew( testFolder, demoHost );
      testFolder.setIdentifier( identifier.getId() );

      APILocator.getFolderAPI().save( testFolder, user, false );


      // HTMLPAGE
      HTMLPage htmlPage = new HTMLPage();

      htmlPage.setEndDate( new Date() );
      htmlPage.setFriendlyName( "newstest-detail.html" );
      htmlPage.setIDate( new Date() );
      htmlPage.setMetadata( "" );
      htmlPage.setModDate( new Date() );
      htmlPage.setModUser( user.getUserId() );
      htmlPage.setOwner( user.getUserId() );
      htmlPage.setPageUrl( "newstest-detail.html" );
      htmlPage.setRedirect( "" );
      htmlPage.setShowOnMenu( true );
      htmlPage.setSortOrder( 2 );
      htmlPage.setStartDate( new Date() );
      htmlPage.setTitle( "News Test Detail" );
      htmlPage.setType( "htmlpage" );
      htmlPage.setWebEndDate( "" );
      htmlPage.setWebStartDate( "" );

      htmlPage = APILocator.getHTMLPageAPI().saveHTMLPage( htmlPage, template, testFolder, user, false );

      PermissionAPI permissionAPI = APILocator.getPermissionAPI();
      RoleAPI roleAPI = APILocator.getRoleAPI();

      Permission newPermission = new Permission( htmlPage.getPermissionId(), roleAPI.loadCMSAnonymousRole().getId(), PermissionAPI.PERMISSION_READ, true );
      permissionAPI.save( newPermission, htmlPage, user, false );

      //Make it working and live
      APILocator.getVersionableAPI().setWorking( htmlPage );
      APILocator.getVersionableAPI().setLive( htmlPage );

      // WIDGET


      widget = new Contentlet();
      widget.setReviewInterval("1m");
      widget.setStructureInode(simpleWidgetSt.getInode());
      widget.setHost(demoHost.getIdentifier());

      Field widgetTitle =  simpleWidgetSt.getFieldVar("widgetTitle");
      Field widgetCode = simpleWidgetSt.getFieldVar("code");


      ContentletAPI contentletAPI = APILocator.getContentletAPI();

      contentletAPI.setContentletProperty( widget, widgetTitle, "newsTestWidget" );
      contentletAPI.setContentletProperty( widget, widgetCode, "$URLMapContent.story" );

      widget = contentletAPI.checkin( widget, null, permissionAPI.getPermissions( simpleWidgetSt ), user, false );
      APILocator.getVersionableAPI().setLive(widget);

      // add the widget to the detail page
      MultiTreeFactory.saveMultiTree( new MultiTree( htmlPage.getIdentifier(), container.getIdentifier(), widget.getIdentifier() ) );

     
      // STRUCTURE
      testSt = new Structure();

      testSt.setDefaultStructure( false );
      testSt.setDescription( "News Test" );
      testSt.setFixed( false );
      testSt.setIDate( new Date() );
      testSt.setName( "NewsTest" +salt);
      testSt.setOwner( user.getUserId() );
      testSt.setStructureType( Structure.STRUCTURE_TYPE_CONTENT );
      testSt.setType( "structure" );
      testSt.setVelocityVarName( "NewsTest" +salt );
      testSt.setUrlMapPattern("/newstest"+salt+"/{urlNewsTitle}");
      testSt.setDetailPage( htmlPage.getIdentifier() );

      StructureFactory.saveStructure( testSt );

      //Creating and adding permissions
      Permission permissionRead = new Permission( testSt.getInode(), roleAPI.loadCMSAnonymousRole().getId(), PermissionAPI.PERMISSION_READ );
      Permission permissionEdit = new Permission( testSt.getInode(), roleAPI.loadCMSAnonymousRole().getId(), PermissionAPI.PERMISSION_EDIT );
      Permission permissionWrite = new Permission( testSt.getInode(), roleAPI.loadCMSAnonymousRole().getId(), PermissionAPI.PERMISSION_WRITE );

      permissionAPI.save( permissionRead, testSt, user, false );
      permissionAPI.save( permissionEdit, testSt, user, false );
      permissionAPI.save( permissionWrite, testSt, user, false );

      // FIELDS

      // headline
      Field headline = new Field();
      headline.setFieldName("Headline");
      headline.setFieldType(FieldType.TEXT.toString());
      headline.setListed(true);
      headline.setRequired(true);
      headline.setSearchable(true);
      headline.setStructureInode(testSt.getInode());
      headline.setType("field");
      headline.setValues("");
      headline.setVelocityVarName("testTitle");
      headline.setIndexed(true);
      headline.setFieldContentlet("text4");
      FieldFactory.saveField( headline );

      // URL Title
      Field urlTitle = new Field();
      urlTitle.setFieldName("URL Title");
      urlTitle.setFieldType(FieldType.CUSTOM_FIELD.toString());
      urlTitle.setRequired(true);
      urlTitle.setStructureInode(testSt.getInode());
      urlTitle.setType("field");
      urlTitle.setValues("#dotParse('//shared/vtl/custom-fields/url-title.vtl')");
      urlTitle.setVelocityVarName("urlNewsTitle");
      urlTitle.setSearchable(true);
      urlTitle.setIndexed(true);
      urlTitle.setFieldContentlet("text_area4");
      FieldFactory.saveField( urlTitle );

      // WYSIWYG
      Field story = new Field();
      story.setFieldName("Story");
      story.setFieldType(FieldType.WYSIWYG.toString());
      story.setRequired(true);
      story.setStructureInode(testSt.getInode());
      story.setType("field");
      story.setValues("");
      story.setVelocityVarName("story");
      story.setFieldContentlet("text_area3");
      FieldFactory.saveField( story );

      // ENGLISH CONTENT
      Contentlet englishContent = new Contentlet();
      englishContent.setReviewInterval( "1m" );
      englishContent.setStructureInode( testSt.getInode() );
      englishContent.setHost( demoHost.getIdentifier() );
      englishContent.setLanguageId(1);


      contentletAPI.setContentletProperty( englishContent, headline, "the-gas-price" );
      contentletAPI.setContentletProperty( englishContent, story, "the-gas-price" );
      contentletAPI.setContentletProperty( englishContent, urlTitle, "the-gas-price" );

      englishContent = contentletAPI.checkin( englishContent, null, permissionAPI.getPermissions( testSt ), user, false );
      APILocator.getVersionableAPI().setLive(englishContent);

      // SPANISH CONTENT
      Contentlet spanishContent = new Contentlet();
      spanishContent.setReviewInterval("1m");
      spanishContent.setStructureInode(testSt.getInode());
      spanishContent.setHost(demoHost.getIdentifier());
      spanishContent.setLanguageId(2);
      spanishContent.setIdentifier(englishContent.getIdentifier());

      contentletAPI.setContentletProperty( spanishContent, headline, "el-precio-del-gas" );
      contentletAPI.setContentletProperty( spanishContent, story, "el-precio-del-gas" );
      contentletAPI.setContentletProperty( spanishContent, urlTitle, "el-precio-del-gas" );

      spanishContent = contentletAPI.checkin( spanishContent, null, permissionAPI.getPermissions( testSt ), user, false );
      APILocator.getVersionableAPI().setLive(spanishContent);

      HibernateUtil.commitTransaction();

      if(!(contentletAPI.isInodeIndexed(englishContent.getInode(), true) &&
              contentletAPI.isInodeIndexed(spanishContent.getInode(), true) &&
                contentletAPI.isInodeIndexed(widget.getInode(), true))) {
        fail("Content indexing timeout.");

      }

    } catch (Exception e) {
      try {
        HibernateUtil.rollbackTransaction();
      } catch (DotHibernateException e1) {
        Logger.error(URLMapTest.class,e.getMessage(),e1);
      }
      Logger.error(URLMapTest.class,e.getMessage(),e);
      throw e;
    }
  }


  @Test
  public void testURLMaps() throws Exception {
   
    HttpServletRequest request = ServletTestRunner.localRequest.get();
    String serverName = request.getServerName();
    Integer serverPort = request.getServerPort();

    URL urlE = new URL("http://"+serverName+":"+serverPort+"/newstest"+salt+"/the-gas-price/");
    assertTrue(IOUtils.toString(urlE.openStream()).contains("the-gas-price"));

    try {
        URL urlS = new URL("http://"+serverName+":"+serverPort+"/newstest"+salt+"/el-precio-del-gas/");
        urlS.openStream();
       
        Assert.fail(); // the previus line should throw an exception
    }
    catch(FileNotFoundException ex) {
        // fine
    }
   
    // for spanish it should load of language_id=2
    URL urlS = new URL("http://"+serverName+":"+serverPort+"/newstest"+salt+"/el-precio-del-gas?language_id=2");
    assertTrue(IOUtils.toString(urlS.openStream()).contains("el-precio-del-gas"));
  }

  @After
  public void deleteAssets() throws Exception {
    if(testFolder!=null) APILocator.getFolderAPI().delete(testFolder, user, false);
    if(template!=null) APILocator.getTemplateAPI().delete(template, user, false);
    if(container!=null) APILocator.getContainerAPI().delete(container, user, false);
    if(testSt!=null) APILocator.getStructureAPI().delete(testSt, user);
    if(widget!=null) APILocator.getContentletAPI().delete(widget, user, false);

  }


}
TOP

Related Classes of com.dotmarketing.portlets.structure.business.URLMapTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.