package com.enonic.cms.itest.core.structure.page.template; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import org.jdom.Document; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springframework.transaction.annotation.Transactional; import com.enonic.cms.framework.xml.XMLDocumentFactory; import com.enonic.cms.core.content.contenttype.ContentHandlerName; import com.enonic.cms.core.content.contenttype.ContentTypeEntity; import com.enonic.cms.core.resource.ResourceKey; import com.enonic.cms.core.structure.RunAsType; import com.enonic.cms.core.structure.SiteEntity; import com.enonic.cms.core.structure.page.template.DeletePageTemplateCommand; import com.enonic.cms.core.structure.page.template.PageTemplateEntity; import com.enonic.cms.core.structure.page.template.PageTemplateKey; import com.enonic.cms.core.structure.page.template.PageTemplatePortletEntity; import com.enonic.cms.core.structure.page.template.PageTemplatePortletKey; import com.enonic.cms.core.structure.page.template.PageTemplateRegionEntity; import com.enonic.cms.core.structure.page.template.PageTemplateService; import com.enonic.cms.core.structure.page.template.PageTemplateType; import com.enonic.cms.core.structure.portlet.PortletEntity; import com.enonic.cms.itest.AbstractSpringTest; import com.enonic.cms.itest.util.DomainFactory; import com.enonic.cms.itest.util.DomainFixture; import com.enonic.cms.store.dao.PageTemplateDao; import com.enonic.cms.store.dao.PageTemplatePortletDao; import com.enonic.cms.store.dao.PageTemplateRegionDao; import com.enonic.cms.store.dao.PortletEntityDao; import static org.junit.Assert.*; @TransactionConfiguration(defaultRollback = true) @DirtiesContext @Transactional public class PageTemplateServiceImpl_deletePageTemplateTest extends AbstractSpringTest { private DomainFactory factory; @Autowired private DomainFixture fixture; @Autowired private HibernateTemplate hibernateTemplate; @Autowired private PageTemplateService pageTemplateService; @Autowired private PageTemplateDao pageTemplateDao; @Autowired private PageTemplateRegionDao pageTemplateRegionDao; @Autowired private PageTemplatePortletDao pageTemplatePortletDao; @Autowired private PortletEntityDao portletEntityDao; @Before public void setUp() { factory = fixture.getFactory(); // setup needed common data for each test fixture.initSystemData(); save( factory.createContentHandler( "Custom content", ContentHandlerName.CUSTOM.getHandlerClassShortName() ) ); save( factory.createContentType( "just-another-cty", ContentHandlerName.CUSTOM.getHandlerClassShortName(), null ) ); PageTemplateEntity pageTemplate = createPageTemplate( "my-template", PageTemplateType.SECTIONPAGE, "The Newspaper", "just-another-cty" ); // PageTemplateRegion PageTemplateRegionEntity region_leftColumn = createPageTemplateRegion( 1, "leftColumn", pageTemplate ); PageTemplateRegionEntity region_mainColumn = createPageTemplateRegion( 2, "mainColumn", pageTemplate ); pageTemplate.addPageTemplateRegion( region_leftColumn ); pageTemplate.addPageTemplateRegion( region_mainColumn ); fixture.save( pageTemplate ); } @Test public void remove_page_template_with_relations() { PageTemplateRegionEntity pRegion1 = pageTemplateRegionDao.findByKey( 1 ); assertEquals( 1, pRegion1.getKey() ); PageTemplateRegionEntity pRegion2 = pageTemplateRegionDao.findByKey( 2 ); assertEquals( 2, pRegion2.getKey() ); List<PageTemplateEntity> pPageTemplates = pageTemplateDao.findByName( "my-template" ); assertEquals( 1, pPageTemplates.size() ); PageTemplateEntity pPageTemplate = pPageTemplates.get( 0 ); assertNotNull( pPageTemplate ); // Portlet final Document xmlData = XMLDocumentFactory.create( "<menudata>" + "<defaultcss key=\"DEFAULT_CSS\"/>" + "<default-localization-resource>DEFAULT_LOCALIZATION_RESOURCE</default-localization-resource>" + "<device-class-resolver>DEVICE_CLASS_RESOLVER</device-class-resolver>" + "<locale-resolver>LOCALE_RESOLVER</locale-resolver>" + "</menudata>" ).getAsJDOMDocument(); final SiteEntity site = factory.createSite( "The Newspaper", new Date(), xmlData, "en" ); site.getPageTemplates().add( pPageTemplate ); pPageTemplate.setSite( site ); save( site ); PortletEntity portlet = createPortlet( 11, "Portlet-1" ); portlet.setSite( site ); portlet.setStyleKey( ResourceKey.from( "CONTENT_OBJECT_STYLE" ) ); portlet.setBorderKey( ResourceKey.from( "CONTENT_OBJECT_BORDER" ) ); save( portlet ); PortletEntity pPortlet = portletEntityDao.findByKey( 11 ); // PageTemplatePortlet PageTemplatePortletEntity templatePortlet = new PageTemplatePortletEntity(); PageTemplatePortletKey templatePortletKey = new PageTemplatePortletKey( pPageTemplate.getKey(), pPortlet.getKey() ); templatePortlet.setKey( templatePortletKey ); templatePortlet.setPortlet( pPortlet ); templatePortlet.setPageTemplate( pPageTemplate ); templatePortlet.setPageTemplateRegion( pRegion1 ); templatePortlet.setTimestamp( new Date() ); save( templatePortlet ); PageTemplatePortletEntity pTemplatePortlet = pageTemplatePortletDao.findByKey( templatePortletKey ); pPageTemplate.addPageTemplatePortlet( pTemplatePortlet ); pPageTemplate.getPageTemplateRegions().iterator().next().addPortlet( pTemplatePortlet ); save( pPageTemplate ); final DeletePageTemplateCommand command = new DeletePageTemplateCommand( new PageTemplateKey( pPageTemplate.getKey() ) ); pageTemplateService.deletePageTemplate( command ); List<PageTemplateEntity> persisted = pageTemplateDao.findByName( "my-template" ); assertTrue( persisted.isEmpty() ); PageTemplateRegionEntity region = pageTemplateRegionDao.findByKey( 1 ); assertNull( region ); region = pageTemplateRegionDao.findByKey( 2 ); assertNull( region ); PageTemplatePortletEntity templPortlet = pageTemplatePortletDao.findByKey( templatePortletKey ); assertNull( templPortlet ); } private PageTemplateEntity createPageTemplate( String name, PageTemplateType type, String siteName, String... contentTypeNames ) { PageTemplateEntity pageTemplate = factory.createPageTemplate( name, type, siteName, ResourceKey.from( "DUMMYKEY" ) ); Set<ContentTypeEntity> supportedContentTypes = new HashSet<ContentTypeEntity>(); for ( String contentTypeName : contentTypeNames ) { supportedContentTypes.add( fixture.findContentTypeByName( contentTypeName ) ); } pageTemplate.setContentTypes( supportedContentTypes ); return pageTemplate; } private PageTemplateRegionEntity createPageTemplateRegion( int key, String name, PageTemplateEntity pageTemplate ) { PageTemplateRegionEntity i = new PageTemplateRegionEntity(); i.setKey( key ); i.setName( name ); i.setMultiple( true ); i.setOverride( true ); i.setSeparator( "dummySeparator" ); i.setPageTemplate( pageTemplate ); return i; } private PortletEntity createPortlet( int key, String name ) { PortletEntity portlet = new PortletEntity(); portlet.setKey( key ); portlet.setName( name ); portlet.setCreated( new Date() ); portlet.setRunAs( RunAsType.PERSONALIZED ); return portlet; } private void save( Object object ) { hibernateTemplate.save( object ); hibernateTemplate.flush(); } }