/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.itest.client; import java.io.IOException; import java.util.Date; import org.jdom.Document; import org.jdom.JDOMException; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.mock.web.MockHttpServletRequest; import com.enonic.cms.framework.xml.XMLDocumentFactory; import com.enonic.cms.api.client.model.CreateFileContentParams; import com.enonic.cms.api.client.model.UpdateFileContentParams; import com.enonic.cms.api.client.model.content.ContentStatus; import com.enonic.cms.api.client.model.content.file.FileBinaryInput; import com.enonic.cms.api.client.model.content.file.FileContentDataInput; import com.enonic.cms.api.client.model.content.file.FileDescriptionInput; import com.enonic.cms.api.client.model.content.file.FileKeywordsInput; import com.enonic.cms.api.client.model.content.file.FileNameInput; import com.enonic.cms.core.client.InternalClient; import com.enonic.cms.core.content.ContentEntity; import com.enonic.cms.core.content.ContentKey; import com.enonic.cms.core.content.ContentVersionEntity; import com.enonic.cms.core.content.binary.BinaryDataEntity; import com.enonic.cms.core.content.binary.ContentBinaryDataEntity; import com.enonic.cms.core.content.contentdata.legacy.LegacyFileContentData; import com.enonic.cms.core.content.contenttype.ContentHandlerName; import com.enonic.cms.core.security.PortalSecurityHolder; 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 InternalClientImpl_UpdateFileContentTest extends AbstractSpringTest { @Autowired private DomainFixture fixture; @Autowired private ContentDao contentDao; @Autowired @Qualifier("localClient") private InternalClient internalClient; private byte[] dummyBinary1 = new byte[]{1, 2, 3}; private byte[] dummyBinary2 = new byte[]{1, 2, 3, 4, 5, 6}; @Before public void before() throws IOException, JDOMException { final DomainFactory factory = fixture.getFactory(); fixture.initSystemData(); MockHttpServletRequest request = new MockHttpServletRequest(); request.setRemoteAddr( "127.0.0.1" ); ServletRequestAccessor.setRequest( request ); StringBuilder contentTypeConfigXml = new StringBuilder(); contentTypeConfigXml.append( "<moduledata/>" ); final Document contentTypeConfig = XMLDocumentFactory.create( contentTypeConfigXml.toString() ).getAsJDOMDocument(); fixture.createAndStoreUserAndUserGroup( "testuser", "testuser fullname", UserType.NORMAL, "testuserstore" ); fixture.save( factory.createContentHandler( "File content", ContentHandlerName.FILE.getHandlerClassShortName() ) ); fixture.save( factory.createContentType( "MyContentType", ContentHandlerName.FILE.getHandlerClassShortName(), contentTypeConfig ) ); fixture.save( factory.createUnit( "MyUnit", "en" ) ); fixture.save( factory.createCategory( "MyCategory", null, "MyContentType", "MyUnit", "testuser", "testuser" ) ); fixture.save( factory.createCategoryAccessForUser( "MyCategory", "testuser", "read, create, approve" ) ); fixture.flushAndClearHibernateSession(); } @Test public void testUpdateCurrentVersion() { UserEntity runningUser = fixture.findUserByName( "testuser" ); PortalSecurityHolder.setImpersonatedUser( runningUser.getKey() ); int contentKey = storeNewFileContent(); FileContentDataInput fileContentData = new FileContentDataInput(); fileContentData.binary = new FileBinaryInput( dummyBinary2, "Dummy Name 2" ); fileContentData.description = new FileDescriptionInput( "Dummy description 2." ); fileContentData.keywords = new FileKeywordsInput().addKeyword( "keyworda" ).addKeyword( "keywordb" ); fileContentData.name = new FileNameInput( "test binary 2" ); UpdateFileContentParams params = new UpdateFileContentParams(); params.contentKey = contentKey; params.createNewVersion = false; params.setAsCurrentVersion = true; params.status = ContentStatus.STATUS_DRAFT; params.fileContentData = fileContentData; int versionKey = internalClient.updateFileContent( params ); assertTrue( versionKey > -1 ); ContentEntity actualContent = contentDao.findByKey( new ContentKey( contentKey ) ); ContentVersionEntity actualVersion = actualContent.getMainVersion(); assertEquals( "test binary 2", actualVersion.getTitle() ); assertEquals( 1, actualVersion.getContentBinaryData().size() ); ContentBinaryDataEntity contentBinaryData = actualVersion.getContentBinaryData().iterator().next(); BinaryDataEntity binaryDataResolvedFromContentBinaryData = contentBinaryData.getBinaryData(); LegacyFileContentData contentData = (LegacyFileContentData) actualVersion.getContentData(); assertEquals( "test binary 2", contentData.getTitle() ); assertEquals( binaryDataResolvedFromContentBinaryData.getBinaryDataKey(), contentData.resolveBinaryDataKey() ); Document contentDataXml = contentData.getContentDataXml(); AssertTool.assertSingleXPathValueEquals( "/contentdata/name", contentDataXml, "test binary 2" ); AssertTool.assertSingleXPathValueEquals( "/contentdata/description", contentDataXml, "Dummy description 2." ); AssertTool.assertSingleXPathValueEquals( "/contentdata/keywords/keyword[1]", contentDataXml, "keyworda" ); AssertTool.assertSingleXPathValueEquals( "/contentdata/keywords/keyword[2]", contentDataXml, "keywordb" ); AssertTool.assertSingleXPathValueEquals( "/contentdata/filesize", contentDataXml, String.valueOf( dummyBinary2.length ) ); AssertTool.assertSingleXPathValueEquals( "/contentdata/binarydata/@key", contentDataXml, binaryDataResolvedFromContentBinaryData.getBinaryDataKey().toString() ); } private int storeNewFileContent() { FileContentDataInput fileContentData = new FileContentDataInput(); fileContentData.binary = new FileBinaryInput( dummyBinary1, "Dummy Name" ); fileContentData.description = new FileDescriptionInput( "Dummy description." ); fileContentData.keywords = new FileKeywordsInput().addKeyword( "keyword1" ).addKeyword( "keyword2" ); fileContentData.name = new FileNameInput( "test binary" ); CreateFileContentParams params = new CreateFileContentParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.publishFrom = new Date(); params.publishTo = null; params.status = ContentStatus.STATUS_DRAFT; params.fileContentData = fileContentData; int contentKey = internalClient.createFileContent( params ); fixture.flushAndClearHibernateSession(); ContentEntity persistedContent = contentDao.findByKey( new ContentKey( contentKey ) ); assertNotNull( persistedContent ); fixture.flushAndClearHibernateSession(); return contentKey; } }