Package org.infoglue.cms.controllers

Source Code of org.infoglue.cms.controllers.ContentStateControllerTest

/* ===============================================================================
*
* Part of the InfoGlue Content Management Platform (www.infoglue.org)
*
* ===============================================================================
*
*  Copyright (C)
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2, as published by the
* Free Software Foundation. See the file LICENSE.html for more information.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY, including 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, write to the Free Software Foundation, Inc. / 59 Temple
* Place, Suite 330 / Boston, MA 02111-1307 / USA.
*
* ===============================================================================
*
* $Id: ContentStateControllerTest.java,v 1.6 2008/06/04 07:19:51 mattias Exp $
*/
package org.infoglue.cms.controllers;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;

import org.infoglue.cms.controllers.kernel.impl.simple.CategoryController;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentCategoryController;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentController;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentStateController;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentVersionController;
import org.infoglue.cms.controllers.kernel.impl.simple.EventController;
import org.infoglue.cms.controllers.kernel.impl.simple.InfoGluePrincipalControllerProxy;
import org.infoglue.cms.entities.content.ContentCategoryVO;
import org.infoglue.cms.entities.content.ContentVO;
import org.infoglue.cms.entities.content.ContentVersion;
import org.infoglue.cms.entities.content.ContentVersionVO;
import org.infoglue.cms.entities.management.CategoryVO;
import org.infoglue.cms.entities.workflow.EventVO;
import org.infoglue.cms.util.InfoGlueTestCase;

/**
* This test exercises the publishing/unpublishing of content.
*
* @author Frank Febbraro (frank@phase2technology.com)
*/
public class ContentStateControllerTest extends InfoGlueTestCase
{
  private static final Integer REPO = getRepoId();
  private static final Integer LANGUAGE = getLanguageId(REPO);

  private ContentVO testContent;
  private ContentVersionVO testContentVersion;
  private ContentVersionVO testEventContentVersion;
  private ContentController contentStore = ContentController.getContentController();
  private ContentVersionController contentVersionStore = ContentVersionController.getContentVersionController();

  private CategoryVO testCategory;
  private ContentCategoryVO testContentCategory;
  private CategoryController categoryStore = CategoryController.getController();
  private ContentCategoryController contentCategoryStore = ContentCategoryController.getController();

  private List allContent = new ArrayList();

  protected void setUp() throws Exception
  {
    super.setUp();

    testContent = new ContentVO();
    testContent.setName(getName());
    testContent.setCreatorName("junit");
    testContent.setIsBranch(Boolean.FALSE);
    testContent.setPublishDateTime(changeDate(Calendar.YEAR, -1));
    testContent.setExpireDateTime(changeDate(Calendar.YEAR, 1));
    testContent = contentStore.create(null, null, REPO, testContent);
    allContent.add(testContent);

    testContentVersion = new ContentVersionVO();
    testContentVersion.setVersionModifier("junit");
    testContentVersion.setVersionValue(getName());
    testContentVersion = contentVersionStore.create(testContent.getId(), LANGUAGE, testContentVersion, null);

    testCategory = new CategoryVO();
    testCategory.setName(getName());
    testCategory.setDescription(getName() + " description");
    testCategory = categoryStore.save(testCategory);

    testContentCategory = new ContentCategoryVO();
    testContentCategory.setAttributeName(getName());
    testContentCategory.setContentVersionId(testContentVersion.getId());
    testContentCategory.setCategory(testCategory);
    testContentCategory = contentCategoryStore.save(testContentCategory, InfoGluePrincipalControllerProxy.getController().getTestPrincipal());
  }


  protected void tearDown() throws Exception
  {
    for (Iterator i = allContent.iterator(); i.hasNext();)
      contentStore.delete((ContentVO)i.next(), getCmsUserPrincipal());
    assertRemoved();

    if(testCategory != null)
      categoryStore.delete(testCategory.getId());

    removeAnyEvents();
  }

  public void testCategoryDuplicationOnPublishing() throws Exception
  {
    performStateChangeTest(ContentVersionVO.PUBLISH_STATE);
  }

  public void testCategoryDuplicationOnWorking() throws Exception
  {
    performStateChangeTest(ContentVersionVO.WORKING_STATE);
  }

  public void performStateChangeTest(Integer stateId) throws Exception
  {
    // First make sure a certain count exists
    List found = contentCategoryStore.findByContentVersion(testContentVersion.getId());
    assertEquals("Wrong number of ContentCategories returned", 1, found.size());
    assertTrue("testContentCategory data not returned", found.contains(testContentCategory));

    List events = new ArrayList();
    ContentVersionVO newVersion = ContentStateController.changeState(testContentVersion.getId(), stateId, getName(), false, getAdminPrincipal(), testContentVersion.getContentId(), events);
    testEventContentVersion = newVersion;

    List newFound = contentCategoryStore.findByContentVersion(newVersion.getId());
    assertEquals("Wrong number of new ContentCategories returned", found.size(), newFound.size());

    ContentCategoryVO newContentCategory = (ContentCategoryVO)newFound.get(0);
    assertEquals("Wrong contentVersionId", newVersion.getContentVersionId(), newContentCategory.getContentVersionId());
    assertEquals("Wrong category", testContentCategory.getCategory(), newContentCategory.getCategory());
    assertEquals("Wrong attribute", testContentCategory.getAttributeName(), newContentCategory.getAttributeName());
  }

  //---------------------------------------------------------------------------------------
  /**
   * As a result of some of these processes, events occasionally get created,
   * lets be good boys and clean them up.
   */
  private void removeAnyEvents() throws Exception
  {
    List events = EventController.getEventVOListForEntity(ContentVersion.class.getName(), testEventContentVersion.getId());
    for (Iterator iter = events.iterator(); iter.hasNext();)
      EventController.delete((EventVO) iter.next());
  }

  // Make sure it was removed from the DB
  private void assertRemoved() throws Exception
  {
    try
    {
      contentStore.getContentVOWithId(testContent.getId());
      fail("The Content was not deleted");
    }
    catch(Exception e)
    { /* expected */ }

    try
    {
      contentVersionStore.getContentVersionVOWithId(testContentVersion.getId());
      fail("The ContentVersion was not deleted");
    }
    catch(Exception e)
    { /* expected */ }

    assertTrue("The ContentCategories were not deleted",
           contentCategoryStore.findByContentVersion(testContentVersion.getId()).isEmpty());
  }
}
TOP

Related Classes of org.infoglue.cms.controllers.ContentStateControllerTest

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.