/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.itest.content; import java.util.ArrayList; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockHttpServletRequest; import com.enonic.cms.core.content.ContentEntity; import com.enonic.cms.core.content.ContentKey; import com.enonic.cms.core.content.ContentService; import com.enonic.cms.core.content.ContentStatus; import com.enonic.cms.core.content.ContentVersionEntity; import com.enonic.cms.core.content.binary.BinaryDataAndBinary; import com.enonic.cms.core.content.command.CreateContentCommand; import com.enonic.cms.core.content.contentdata.legacy.LegacyImageContentData; import com.enonic.cms.core.content.contenttype.ContentHandlerName; import com.enonic.cms.core.security.user.UserEntity; import com.enonic.cms.core.security.user.UserType; import com.enonic.cms.core.servlet.ServletRequestAccessor; import com.enonic.cms.itest.AbstractSpringTest; import com.enonic.cms.itest.util.AssertTool; import com.enonic.cms.itest.util.DomainFactory; import com.enonic.cms.itest.util.DomainFixture; import com.enonic.cms.store.dao.ContentDao; import static org.junit.Assert.*; public class ContentServiceImpl_withImageHandlerTest extends AbstractSpringTest { private DomainFactory factory; @Autowired private DomainFixture fixture; @Autowired private ContentService contentService; @Autowired private ContentDao contentDao; @Test public void testCreateContent() { factory = fixture.getFactory(); fixture.initSystemData(); MockHttpServletRequest request = new MockHttpServletRequest(); request.setRemoteAddr( "127.0.0.1" ); ServletRequestAccessor.setRequest( request ); fixture.createAndStoreUserAndUserGroup( "testuser", "testuser fullname", UserType.NORMAL, "testuserstore" ); fixture.save( factory.createContentHandler( "Image content", ContentHandlerName.IMAGE.getHandlerClassShortName() ) ); fixture.save( factory.createContentType( "MyContentType", ContentHandlerName.IMAGE.getHandlerClassShortName() ) ); fixture.save( factory.createUnit( "MyUnit" ) ); fixture.save( factory.createCategory( "MyCategory", null, "MyContentType", "MyUnit", "testuser", "testuser" ) ); fixture.save( factory.createCategoryAccessForUser( "MyCategory", "testuser", "read, create" ) ); fixture.flushAndClearHibernateSession(); UserEntity runningUser = fixture.findUserByName( "testuser" ); ContentEntity content = new ContentEntity(); content.setLanguage( fixture.findLanguageByCode( "en" ) ); content.setCategory( fixture.findCategoryByName( "MyCategory" ) ); content.setOwner( fixture.findUserByName( "testuser" ) ); content.setPriority( 0 ); content.setName( "testcontent" ); ContentVersionEntity version = new ContentVersionEntity(); version.setModifiedBy( fixture.findUserByName( "testuser" ) ); version.setStatus( ContentStatus.DRAFT ); version.setContent( content ); Document contentDataDoc = createImageContentDataDoc( "my image", 2 ); LegacyImageContentData contentData = new LegacyImageContentData( contentDataDoc ); version.setContentData( contentData ); List<BinaryDataAndBinary> binaryDatas = new ArrayList<BinaryDataAndBinary>(); binaryDatas.add( factory.createBinaryDataAndBinary( "bilde_scaled_1", new byte[]{1, 0, 1} ) ); binaryDatas.add( factory.createBinaryDataAndBinary( "bilde_scaled_2", new byte[]{1, 0, 2} ) ); binaryDatas.add( factory.createBinaryDataAndBinary( "bilde_original", new byte[]{1, 0, 3} ) ); CreateContentCommand command = new CreateContentCommand(); command.setCreator( runningUser ); command.populateCommandWithContentValues( content ); command.populateCommandWithContentVersionValues( version ); command.setBinaryDatas( binaryDatas ); command.setUseCommandsBinaryDataToAdd( true ); ContentKey contenKey = contentService.createContent( command ); fixture.flushAndClearHibernateSession(); ContentEntity actualContent = contentDao.findByKey( contenKey ); assertNotNull( actualContent ); ContentVersionEntity actualVersion = actualContent.getMainVersion(); assertNotNull( actualVersion ); assertNotNull( actualVersion.getContentBinaryData() ); assertEquals( 3, actualVersion.getContentBinaryData().size() ); Document actualContentDataXml = actualVersion.getContentDataAsJDomDocument(); AssertTool.assertSingleXPathValueEquals( "count(/contentdata/images/image/binarydata/@key)", actualContentDataXml, "2" ); AssertTool.assertSingleXPathValueEquals( "count(/contentdata/sourceimage/binarydata/@key)", actualContentDataXml, "1" ); } private Document createImageContentDataDoc( String name, int imageCountIncludingSourceImage ) { Element contentdataEl = new Element( "contentdata" ); contentdataEl.addContent( new Element( "name" ).setText( name ) ); Element imagesEl = new Element( "images" ); contentdataEl.addContent( imagesEl ); int nextPlaceHolderIndex = 0; if ( imageCountIncludingSourceImage > 0 ) { for ( int i = 0; i < imageCountIncludingSourceImage; i++ ) { Element imageEl = new Element( "image" ); imagesEl.addContent( imageEl ); Element binarydataEl = new Element( "binarydata" ); binarydataEl.setAttribute( "key", "%" + String.valueOf( nextPlaceHolderIndex++ ) ); imageEl.addContent( binarydataEl ); } Element sourceimageEl = new Element( "sourceimage" ); Element binarydataEl = new Element( "binarydata" ); binarydataEl.setAttribute( "key", "%" + String.valueOf( nextPlaceHolderIndex++ ) ); sourceimageEl.addContent( binarydataEl ); contentdataEl.addContent( sourceimageEl ); } return new Document( contentdataEl ); } }