/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.itest.client;
import org.jdom.Document;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import com.enonic.cms.framework.xml.XMLDocumentFactory;
import com.enonic.cms.api.client.model.GetContentParams;
import com.enonic.cms.core.Attribute;
import com.enonic.cms.core.client.InternalClientImpl;
import com.enonic.cms.core.client.InternalLocalClient;
import com.enonic.cms.core.content.ContentAndVersion;
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.command.CreateContentCommand;
import com.enonic.cms.core.content.contentdata.ContentData;
import com.enonic.cms.core.content.contentdata.custom.CustomContentData;
import com.enonic.cms.core.content.contentdata.custom.contentkeybased.RelatedContentDataEntry;
import com.enonic.cms.core.content.contentdata.custom.relationdataentrylistbased.RelatedContentsDataEntry;
import com.enonic.cms.core.content.contentdata.custom.stringbased.TextDataEntry;
import com.enonic.cms.core.content.contenttype.ContentHandlerName;
import com.enonic.cms.core.content.contenttype.ContentTypeConfigBuilder;
import com.enonic.cms.core.portal.datasource.DataSourceContext;
import com.enonic.cms.core.portal.livetrace.LivePortalTraceService;
import com.enonic.cms.core.preview.ContentPreviewContext;
import com.enonic.cms.core.preview.PreviewContext;
import com.enonic.cms.core.preview.PreviewService;
import com.enonic.cms.core.security.PortalSecurityHolder;
import com.enonic.cms.core.security.SecurityService;
import com.enonic.cms.core.security.user.User;
import com.enonic.cms.core.servlet.ServletRequestAccessor;
import com.enonic.cms.core.time.MockTimeService;
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.ContentDao;
import com.enonic.cms.store.dao.UserDao;
import static com.enonic.cms.itest.util.AssertTool.assertSingleXPathValueEquals;
import static com.enonic.cms.itest.util.AssertTool.assertXPathEquals;
import static com.enonic.cms.itest.util.AssertTool.assertXPathNotExist;
import static org.junit.Assert.*;
public class InternalClientImpl_getContentTest
extends AbstractSpringTest
{
private static final DateTime DATE_TIME_2010_01_01 = new DateTime( 2010, 1, 1, 0, 0, 0, 0 );
private static final DateTime DATE_TIME_2010_07_01_12_00_00_0 = new DateTime( 2010, 7, 1, 12, 0, 0, 0 );
@Autowired
private DomainFixture fixture;
@Autowired
private SecurityService securityService;
@Autowired
private ContentService contentService;
@Autowired
private LivePortalTraceService livePortalTraceService;
@Autowired
private ContentDao contentDao;
@Autowired
private UserDao userDao;
private InternalClientImpl internalClient;
private MockHttpServletRequest httpRequest;
@Autowired
private PreviewService previewService;
@Before
public void setUp()
{
final DomainFactory factory = fixture.getFactory();
// setup needed common data for each test
fixture.initSystemData();
fixture.save( factory.createContentHandler( "Custom content", ContentHandlerName.CUSTOM.getHandlerClassShortName() ) );
httpRequest = new MockHttpServletRequest( "GET", "/" );
ServletRequestAccessor.setRequest( httpRequest );
fixture.save( factory.createUnit( "MyUnit", "en" ) );
fixture.createAndStoreNormalUserWithUserGroup( "content-creator", "Creator", "testuserstore" );
fixture.createAndStoreNormalUserWithUserGroup( "content-querier", "Querier", "testuserstore" );
// setup content type: Person
ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "Person", "name" );
ctyconf.startBlock( "Person" );
ctyconf.addInput( "name", "text", "contentdata/name", "Name", true );
ctyconf.addRelatedContentInput( "my-relatedcontent", "contentdata/my-relatedcontent", "My relatedcontent", false, false );
ctyconf.addRelatedContentInput( "my-relatedcontents", "contentdata/my-relatedcontents", "My relatedcontents", false, true );
ctyconf.endBlock();
final Document personConfigAsXmlBytes = XMLDocumentFactory.create( ctyconf.toString() ).getAsJDOMDocument();
fixture.save(
factory.createContentType( "MyPersonType", ContentHandlerName.CUSTOM.getHandlerClassShortName(), personConfigAsXmlBytes ) );
fixture.save(
factory.createCategory( "MyPersonCategory", null, "MyPersonType", "MyUnit", User.ANONYMOUS_UID, User.ANONYMOUS_UID, false ) );
fixture.save( factory.createCategoryAccessForUser( "MyPersonCategory", "content-creator", "read, create, approve, admin_browse" ) );
fixture.save( factory.createCategoryAccessForUser( "MyPersonCategory", "content-querier", "read, admin_browse" ) );
// setup content type: Related
ContentTypeConfigBuilder ctyconfMyRelated = new ContentTypeConfigBuilder( "MyRelatedType", "title" );
ctyconfMyRelated.startBlock( "General" );
ctyconfMyRelated.addInput( "title", "text", "contentdata/title", "Title", true );
ctyconfMyRelated.addRelatedContentInput( "myRelatedContent", "contentdata/myRelatedContent", "My related content", false, true );
ctyconfMyRelated.endBlock();
Document myRelatedconfigAsXmlBytes = XMLDocumentFactory.create( ctyconfMyRelated.toString() ).getAsJDOMDocument();
fixture.save(
factory.createContentType( "MyRelatedType", ContentHandlerName.CUSTOM.getHandlerClassShortName(), myRelatedconfigAsXmlBytes ) );
fixture.save(
factory.createCategory( "MyRelatedCategory", null, "MyRelatedType", "MyUnit", User.ANONYMOUS_UID, User.ANONYMOUS_UID, false ) );
fixture.save(
factory.createCategoryAccessForUser( "MyRelatedCategory", "content-creator", "read, create, approve, admin_browse" ) );
fixture.save( factory.createCategoryAccessForUser( "MyRelatedCategory", "content-querier", "read, admin_browse" ) );
fixture.flushIndexTransaction();
PortalSecurityHolder.setImpersonatedUser( fixture.findUserByName( "content-querier" ).getKey() );
internalClient = new InternalLocalClient();
internalClient.setSecurityService( securityService );
internalClient.setContentService( contentService );
internalClient.setPreviewService( previewService );
internalClient.setContentDao( contentDao );
internalClient.setUserDao( userDao );
internalClient.setTimeService( new MockTimeService( DATE_TIME_2010_07_01_12_00_00_0 ) );
internalClient.setLivePortalTraceService( livePortalTraceService );
}
@Test
public void getContent()
{
ContentKey expectedContentKey = createPersonContent( "Test Dummy" );
fixture.flushIndexTransaction();
DataSourceContext context = new DataSourceContext();
context.setUser( fixture.findUserByName( "content-querier" ) );
// exercise
GetContentParams params = new GetContentParams();
params.contentKeys = new int[]{expectedContentKey.toInt()};
params.query = "";
params.orderBy = "";
params.index = 0;
params.count = 100;
params.includeData = false;
params.childrenLevel = 0;
params.parentLevel = 0;
Document xmlDocResult = internalClient.getContent( params );
// verify
assertXPathEquals( "/contents/content/@key", xmlDocResult, expectedContentKey.toString() );
}
@Test
public void getContent_in_preview_of_draft_content_returns_previewed_content()
{
// Setup
httpRequest.setAttribute( Attribute.PREVIEW_ENABLED, "true" );
previewService = Mockito.mock( PreviewService.class );
Mockito.when( previewService.isInPreview() ).thenReturn( true );
internalClient.setPreviewService( previewService );
ContentKey contentKey = createPersonContent( "Content 1", ContentStatus.DRAFT );
ContentEntity contentInPreview = new ContentEntity( fixture.findContentByKey( contentKey ) );
ContentVersionEntity contentVersionInPreview = new ContentVersionEntity( contentInPreview.getMainVersion() );
contentVersionInPreview.setTitle( "Previewed" );
contentInPreview.setMainVersion( contentVersionInPreview );
ContentAndVersion contentAndVersionInPreview = new ContentAndVersion( contentInPreview, contentInPreview.getMainVersion() );
ContentPreviewContext contentPreviewContext = new ContentPreviewContext( contentAndVersionInPreview );
PreviewContext previewContext = new PreviewContext( contentPreviewContext );
Mockito.when( previewService.getPreviewContext() ).thenReturn( previewContext );
// exercise
GetContentParams params = new GetContentParams();
params.contentKeys = new int[]{contentKey.toInt()};
params.query = "";
params.orderBy = "";
params.childrenLevel = 0;
params.parentLevel = 0;
Document resultAsJDOM = internalClient.getContent( params );
// Verify
assertXPathEquals( "/contents/content/@key", resultAsJDOM, contentKey.toString() );
assertSingleXPathValueEquals( "/contents/content/title", resultAsJDOM, "Previewed" );
}
@Test
public void getContent_in_preview_of_archived_content_returns_previewed_content()
{
// Setup
httpRequest.setAttribute( Attribute.PREVIEW_ENABLED, "true" );
previewService = Mockito.mock( PreviewService.class );
Mockito.when( previewService.isInPreview() ).thenReturn( true );
internalClient.setPreviewService( previewService );
ContentKey contentKey = createPersonContent( "Content 1", ContentStatus.ARCHIVED );
ContentEntity contentInPreview = new ContentEntity( fixture.findContentByKey( contentKey ) );
ContentVersionEntity contentVersionInPreview = new ContentVersionEntity( contentInPreview.getMainVersion() );
contentVersionInPreview.setTitle( "Previewed" );
contentInPreview.setMainVersion( contentVersionInPreview );
ContentAndVersion contentAndVersionInPreview = new ContentAndVersion( contentInPreview, contentInPreview.getMainVersion() );
ContentPreviewContext contentPreviewContext = new ContentPreviewContext( contentAndVersionInPreview );
PreviewContext previewContext = new PreviewContext( contentPreviewContext );
Mockito.when( previewService.getPreviewContext() ).thenReturn( previewContext );
// exercise
GetContentParams params = new GetContentParams();
params.contentKeys = new int[]{contentKey.toInt()};
params.query = "";
params.orderBy = "";
params.childrenLevel = 0;
params.parentLevel = 0;
Document resultAsJDOM = internalClient.getContent( params );
// Verify
assertXPathEquals( "/contents/content/@key", resultAsJDOM, contentKey.toString() );
assertSingleXPathValueEquals( "/contents/content/title", resultAsJDOM, "Previewed" );
}
@Test
public void getContent_in_preview_of_content_with_related_draft_returns_previewed_content_with_related()
{
// setup
httpRequest.setAttribute( Attribute.PREVIEW_ENABLED, "true" );
previewService = Mockito.mock( PreviewService.class );
Mockito.when( previewService.isInPreview() ).thenReturn( true );
internalClient.setPreviewService( previewService );
ContentKey relatedTo1 = createPersonContent( "Child of requested content", ContentStatus.DRAFT );
ContentKey content1 = createPersonContentWithRelatedContent( "Request content", relatedTo1 );
ContentKey parentOf1 = createPersonContentWithRelatedContent( "Parent to requested content", ContentStatus.DRAFT, content1 );
ContentEntity contentInPreview = new ContentEntity( fixture.findContentByKey( content1 ) );
ContentVersionEntity contentVersionInPreview = new ContentVersionEntity( contentInPreview.getMainVersion() );
ContentAndVersion contentAndVersionInPreview = new ContentAndVersion( contentInPreview, contentVersionInPreview );
ContentPreviewContext contentPreviewContext = new ContentPreviewContext( contentAndVersionInPreview );
PreviewContext previewContext = new PreviewContext( contentPreviewContext );
Mockito.when( previewService.getPreviewContext() ).thenReturn( previewContext );
GetContentParams params = new GetContentParams();
params.contentKeys = new int[]{content1.toInt()};
params.query = "";
params.orderBy = "";
params.childrenLevel = 1;
params.parentLevel = 1;
Document resultAsJDOM = internalClient.getContent( params );
// Verify
assertXPathEquals( "/contents/content/@key", resultAsJDOM, content1.toString() );
assertXPathEquals( "/contents/content/relatedcontentkeys/@count", resultAsJDOM, "2" );
assertXPathEquals( "/contents/content/relatedcontentkeys/relatedcontentkey/@key", resultAsJDOM, parentOf1.toString(),
relatedTo1.toString() );
assertXPathEquals( "/contents/content/relatedcontentkeys/relatedcontentkey[ @key = " + relatedTo1 + "]/@level", resultAsJDOM, "1" );
assertXPathEquals( "/contents/content/relatedcontentkeys/relatedcontentkey[ @key = " + parentOf1 + "]/@level", resultAsJDOM, "-1" );
assertXPathEquals( "/contents/relatedcontents/@count", resultAsJDOM, "2" );
assertXPathEquals( "/contents/relatedcontents/content/@key", resultAsJDOM, relatedTo1.toString(), parentOf1.toString() );
}
@Test
public void getContent_in_preview_of_content_with_related_draft_where_relation_is_unsaved_returns_previewed_content_with_related()
{
// setup:
httpRequest.setAttribute( Attribute.PREVIEW_ENABLED, "true" );
previewService = Mockito.mock( PreviewService.class );
Mockito.when( previewService.isInPreview() ).thenReturn( true );
internalClient.setPreviewService( previewService );
// setup: persist content
ContentKey sonContentKey = createPersonContent( "Child of requested content", ContentStatus.DRAFT );
ContentKey fatherContentKey = createPersonContentWithRelatedContent( "Request content", null );
ContentEntity contentInPreview = new ContentEntity( fixture.findContentByKey( fatherContentKey ) );
ContentVersionEntity contentVersionInPreview = new ContentVersionEntity( contentInPreview.getMainVersion() );
CustomContentData contentData = new CustomContentData( fixture.findContentTypeByName( "MyPersonType" ).getContentTypeConfig() );
contentData.add( new TextDataEntry( contentData.getInputConfig( "name" ), "Requested content" ) );
contentData.add( new RelatedContentDataEntry( contentData.getInputConfig( "my-relatedcontent" ), sonContentKey ) );
contentVersionInPreview.setContentData( contentData );
contentVersionInPreview.addRelatedChild( fixture.findContentByKey( sonContentKey ) );
ContentAndVersion contentAndVersionInPreview = new ContentAndVersion( contentInPreview, contentVersionInPreview );
ContentPreviewContext contentPreviewContext = new ContentPreviewContext( contentAndVersionInPreview );
PreviewContext previewContext = new PreviewContext( contentPreviewContext );
Mockito.when( previewService.getPreviewContext() ).thenReturn( previewContext );
// exercise
GetContentParams params = new GetContentParams();
params.contentKeys = new int[]{fatherContentKey.toInt()};
params.query = "";
params.orderBy = "";
params.childrenLevel = 1;
params.parentLevel = 0;
Document resultAsJDOM = internalClient.getContent( params );
// Verify
assertXPathEquals( "/contents/content/@key", resultAsJDOM, fatherContentKey.toString() );
assertXPathEquals( "/contents/content/relatedcontentkeys/@count", resultAsJDOM, "1" );
assertXPathEquals( "/contents/content/relatedcontentkeys/relatedcontentkey/@key", resultAsJDOM, sonContentKey.toString() );
assertXPathEquals( "/contents/content/relatedcontentkeys/relatedcontentkey[ @key = " + sonContentKey + "]/@level", resultAsJDOM,
"1" );
assertXPathEquals( "/contents/relatedcontents/@count", resultAsJDOM, "1" );
assertXPathEquals( "/contents/relatedcontents/content/@key", resultAsJDOM, sonContentKey.toString() );
}
@Test
public void getContent_in_preview_of_content_with_removed_related_relation_is_unsaved_returns_previewed_content_without_related()
{
// setup:
httpRequest.setAttribute( Attribute.PREVIEW_ENABLED, "true" );
previewService = Mockito.mock( PreviewService.class );
Mockito.when( previewService.isInPreview() ).thenReturn( true );
internalClient.setPreviewService( previewService );
// setup: father with relation to son and daughter and the son having a child
ContentKey grandSon = contentService.createContent(
createCreateContentCommand( "MyRelatedCategory", createMyRelatedContentData( "Grand son" ), "content-creator" ) );
ContentKey son = contentService.createContent(
createCreateContentCommand( "MyRelatedCategory", createMyRelatedContentData( "Son", grandSon ), "content-creator" ) );
ContentKey daughter = contentService.createContent(
createCreateContentCommand( "MyRelatedCategory", createMyRelatedContentData( "Daughter" ), "content-creator" ) );
ContentKey father = contentService.createContent(
createCreateContentCommand( "MyRelatedCategory", createMyRelatedContentData( "Father", son, daughter ), "content-creator" ) );
// setup: verify content is created
assertEquals( 4, fixture.countAllContent() );
// exercise: relation from father to son is removed
ContentEntity contentInPreview = new ContentEntity( fixture.findContentByKey( father ) );
ContentVersionEntity contentVersionInPreview = new ContentVersionEntity( contentInPreview.getMainVersion() );
contentVersionInPreview.setContentData( createMyRelatedContentData( "Father", daughter ) );
ContentAndVersion contentAndVersionInPreview = new ContentAndVersion( contentInPreview, contentVersionInPreview );
ContentPreviewContext contentPreviewContext = new ContentPreviewContext( contentAndVersionInPreview );
PreviewContext previewContext = new PreviewContext( contentPreviewContext );
Mockito.when( previewService.getPreviewContext() ).thenReturn( previewContext );
// exercise
GetContentParams params = new GetContentParams();
params.contentKeys = new int[]{father.toInt()};
params.query = "";
params.orderBy = "";
params.childrenLevel = 1;
params.parentLevel = 0;
Document jdomDocResult = internalClient.getContent( params );
// verify: result does not include father's relation to the son
assertXPathEquals( "/contents/content/@key", jdomDocResult, father );
assertXPathEquals( "/contents/content[title = 'Father']/relatedcontentkeys/@count", jdomDocResult, "1" );
assertXPathEquals( "/contents/content[title = 'Father']/relatedcontentkeys/relatedcontentkey [@level = 1]/@key", jdomDocResult,
daughter );
assertXPathEquals( "/contents/relatedcontents/content/@key", jdomDocResult, daughter );
assertXPathNotExist( "/contents/relatedcontents/content[title = 'Son']", jdomDocResult );
}
@Test
public void getContent_in_preview_of_content_with_related_approved_and_draft_returns_previewed_content_with_related()
{
// setup:
httpRequest.setAttribute( Attribute.PREVIEW_ENABLED, "true" );
previewService = Mockito.mock( PreviewService.class );
Mockito.when( previewService.isInPreview() ).thenReturn( true );
internalClient.setPreviewService( previewService );
ContentKey relatedDraft = createPersonContent( "Related draft", ContentStatus.DRAFT );
ContentKey relatedApproved = createPersonContent( "Related approved", ContentStatus.APPROVED );
ContentKey parent1 =
createPersonContentWithRelatedContents( "Parent content 1", ContentStatus.DRAFT, relatedDraft, relatedApproved );
ContentEntity contentInPreview = fixture.findContentByKey( parent1 );
ContentVersionEntity contentVersionInPreview = new ContentVersionEntity( contentInPreview.getMainVersion() );
ContentAndVersion contentAndVersionInPreview = new ContentAndVersion( contentInPreview, contentVersionInPreview );
ContentPreviewContext contentPreviewContext = new ContentPreviewContext( contentAndVersionInPreview );
PreviewContext previewContext = new PreviewContext( contentPreviewContext );
Mockito.when( previewService.getPreviewContext() ).thenReturn( previewContext );
// exercise
GetContentParams params = new GetContentParams();
params.contentKeys = new int[]{parent1.toInt()};
params.query = "";
params.orderBy = "";
params.childrenLevel = 1;
params.parentLevel = 0;
Document resultAsJDOM = internalClient.getContent( params );
// Verify
assertXPathEquals( "/contents/content/@key", resultAsJDOM, parent1.toString() );
assertXPathEquals( "/contents/relatedcontents/content/@key", resultAsJDOM, relatedApproved, relatedDraft );
}
private ContentKey createPersonContent( String name )
{
return createPersonContentWithRelatedContent( name, ContentStatus.APPROVED, null );
}
private ContentKey createPersonContent( String name, ContentStatus status )
{
return createPersonContentWithRelatedContent( name, status, null );
}
private ContentKey createPersonContentWithRelatedContent( String name, ContentKey relatedContent )
{
return createPersonContentWithRelatedContent( name, ContentStatus.APPROVED, relatedContent );
}
private ContentKey createPersonContentWithRelatedContent( String name, ContentStatus status, ContentKey relatedContent )
{
CustomContentData contentData = new CustomContentData( fixture.findContentTypeByName( "MyPersonType" ).getContentTypeConfig() );
contentData.add( new TextDataEntry( contentData.getInputConfig( "name" ), name ) );
if ( relatedContent != null )
{
contentData.add( new RelatedContentDataEntry( contentData.getInputConfig( "my-relatedcontent" ), relatedContent ) );
}
return contentService.createContent(
createCreateContentCommand( "MyPersonCategory", "content-creator", status, contentData, new DateTime( 2010, 1, 1, 0, 0, 0, 0 ),
null ) );
}
private ContentKey createPersonContentWithRelatedContents( String name, ContentStatus status, ContentKey... relatedContents )
{
CustomContentData contentData = new CustomContentData( fixture.findContentTypeByName( "MyPersonType" ).getContentTypeConfig() );
contentData.add( new TextDataEntry( contentData.getInputConfig( "name" ), name ) );
if ( relatedContents != null )
{
RelatedContentsDataEntry relatedContentsDataEntry =
new RelatedContentsDataEntry( contentData.getInputConfig( "my-relatedcontents" ) );
contentData.add( relatedContentsDataEntry );
for ( ContentKey relatedContent : relatedContents )
{
relatedContentsDataEntry.add(
new RelatedContentDataEntry( contentData.getInputConfig( "my-relatedcontents" ), relatedContent ) );
}
}
return contentService.createContent(
createCreateContentCommand( "MyPersonCategory", "content-creator", status, contentData, new DateTime( 2010, 1, 1, 0, 0, 0, 0 ),
null ) );
}
private CreateContentCommand createCreateContentCommand( String categoryName, String creatorUid, ContentStatus contentStatus,
ContentData contentData, DateTime availableFrom, DateTime availableTo )
{
CreateContentCommand createContentCommand = new CreateContentCommand();
createContentCommand.setCategory( fixture.findCategoryByName( categoryName ) );
createContentCommand.setCreator( fixture.findUserByName( creatorUid ).getKey() );
createContentCommand.setLanguage( fixture.findLanguageByCode( "en" ) );
createContentCommand.setStatus( contentStatus );
createContentCommand.setPriority( 0 );
createContentCommand.setAccessRightsStrategy( CreateContentCommand.AccessRightsStrategy.INHERIT_FROM_CATEGORY );
createContentCommand.setContentData( contentData );
createContentCommand.setContentName( "testcontent" );
if ( availableFrom != null )
{
createContentCommand.setAvailableFrom( availableFrom.toDate() );
}
if ( availableTo != null )
{
createContentCommand.setAvailableTo( availableTo.toDate() );
}
return createContentCommand;
}
private ContentData createMyRelatedContentData( String title, ContentKey... relatedContents )
{
CustomContentData contentData = new CustomContentData( fixture.findContentTypeByName( "MyRelatedType" ).getContentTypeConfig() );
if ( title != null )
{
contentData.add( new TextDataEntry( contentData.getInputConfig( "title" ), title ) );
}
if ( relatedContents != null && relatedContents.length > 0 )
{
RelatedContentsDataEntry relatedContentsDataEntry =
new RelatedContentsDataEntry( contentData.getInputConfig( "myRelatedContent" ) );
for ( ContentKey relatedKey : relatedContents )
{
relatedContentsDataEntry.add( new RelatedContentDataEntry( contentData.getInputConfig( "myRelatedContent" ), relatedKey ) );
}
contentData.add( relatedContentsDataEntry );
}
return contentData;
}
private CreateContentCommand createCreateContentCommand( String categoryName, ContentData contentData, String creatorUid )
{
CreateContentCommand createContentCommand = new CreateContentCommand();
createContentCommand.setCategory( fixture.findCategoryByName( categoryName ) );
createContentCommand.setCreator( fixture.findUserByName( creatorUid ).getKey() );
createContentCommand.setLanguage( fixture.findLanguageByCode( "en" ) );
createContentCommand.setStatus( ContentStatus.APPROVED );
createContentCommand.setPriority( 0 );
createContentCommand.setAccessRightsStrategy( CreateContentCommand.AccessRightsStrategy.INHERIT_FROM_CATEGORY );
createContentCommand.setContentData( contentData );
createContentCommand.setAvailableFrom( DATE_TIME_2010_01_01.toDate() );
createContentCommand.setAvailableTo( null );
createContentCommand.setContentName( "testcontent" );
return createContentCommand;
}
}