/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content.contentdata.custom;
import java.util.Arrays;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import com.enonic.cms.core.content.ContentKey;
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.ContentTypeConfig;
import com.enonic.cms.core.content.contenttype.CtyFormConfig;
import com.enonic.cms.core.content.contenttype.CtySetConfig;
import com.enonic.cms.core.content.contenttype.dataentryconfig.DataEntryConfig;
import com.enonic.cms.core.content.contenttype.dataentryconfig.RelatedContentDataEntryConfig;
import com.enonic.cms.core.content.contenttype.dataentryconfig.TextDataEntryConfig;
public class AbstractDataEntrySetTest
{
private ContentTypeConfig contentTypeConfig;
@Before
public void before()
{
contentTypeConfig = new ContentTypeConfig( ContentHandlerName.CUSTOM, "MyRelatedTypes" );
final CtyFormConfig ctyForm = new CtyFormConfig( contentTypeConfig );
contentTypeConfig.setForm( ctyForm );
final CtySetConfig ctyBlockArticle = ctyForm.addBlock( new CtySetConfig( ctyForm, "MyRelatedTypes", null ) );
ctyBlockArticle.addInput( new TextDataEntryConfig( "title", true, "text", "contentdata/title" ) );
ctyBlockArticle.addInput( new RelatedContentDataEntryConfig( "mySingleRelatedToBeUnmodified", false, "My related1",
"contentdata/mySingleRelatedToBeUnmodified", false,
Arrays.asList( "MyRelatedTypes" ) ) );
ctyBlockArticle.addInput( new RelatedContentDataEntryConfig( "mySingleRelatedToBeModified", false, "My related2",
"contentdata/mySingleRelatedToBeModified", false,
Arrays.asList( "MyRelatedTypes" ) ) );
ctyBlockArticle.addInput( new RelatedContentDataEntryConfig( "myMultipleRelatedToBeModified", false, "My related3",
"contentdata/myMultipleRelatedToBeModified", true,
Arrays.asList( "MyRelatedTypes" ) ) );
final CtySetConfig myGroup = ctyForm.addBlock( new CtySetConfig( ctyForm, "MyGroup", "contentdata/mygroup" ) );
myGroup.addInput( new RelatedContentDataEntryConfig( "myMultipleRelatedToBeModifiedGroup", false, "My related4",
"contentdata/myMultipleRelatedToBeModifiedGroup", true,
Arrays.asList( "MyRelatedTypes" ) ) );
}
@Test
public void testRemoveReferencesToContent_ContentWithSingleRelated()
throws Exception
{
final ContentKey related1 = new ContentKey( "1" );
final ContentKey related2 = new ContentKey( "2" );
final CustomContentData customContentData = createContentWithSingleRelated( "title", related1, related2 );
Assert.assertFalse( customContentData.markReferencesToContentAsDeleted( new ContentKey( "3" ) ) );
Assert.assertTrue( customContentData.markReferencesToContentAsDeleted( related1 ) );
Assert.assertFalse( customContentData.markReferencesToContentAsDeleted( related1 ) );
Assert.assertTrue( customContentData.markReferencesToContentAsDeleted( related2 ) );
Assert.assertFalse( customContentData.markReferencesToContentAsDeleted( related2 ) );
Assert.assertFalse( customContentData.markReferencesToContentAsDeleted( new ContentKey( "3" ) ) );
}
@Test
public void testRemoveReferencesToContent_ContentWithMultipleRelated()
throws Exception
{
final ContentKey related1 = new ContentKey( "1" );
final ContentKey related2 = new ContentKey( "2" );
final CustomContentData customContentData = createContentWithMultipleRelated( "title", related1, related2 );
Assert.assertFalse( customContentData.markReferencesToContentAsDeleted( new ContentKey( "3" ) ) );
Assert.assertTrue( customContentData.markReferencesToContentAsDeleted( related1 ) );
Assert.assertFalse( customContentData.markReferencesToContentAsDeleted( related1 ) );
Assert.assertTrue( customContentData.markReferencesToContentAsDeleted( related2 ) );
Assert.assertFalse( customContentData.markReferencesToContentAsDeleted( related2 ) );
Assert.assertFalse( customContentData.markReferencesToContentAsDeleted( new ContentKey( "3" ) ) );
}
@Test
public void testRemoveReferencesToContent_ContentWithMultipleRelatedInGroup()
throws Exception
{
final ContentKey related1 = new ContentKey( "1" );
final ContentKey related2 = new ContentKey( "2" );
final CustomContentData customContentData = createContentWithMultipleRelatedInGroup( "title", related1, related2 );
Assert.assertFalse( customContentData.markReferencesToContentAsDeleted( new ContentKey( "3" ) ) );
Assert.assertTrue( customContentData.markReferencesToContentAsDeleted( related1 ) );
Assert.assertFalse( customContentData.markReferencesToContentAsDeleted( related1 ) );
Assert.assertTrue( customContentData.markReferencesToContentAsDeleted( related2 ) );
Assert.assertFalse( customContentData.markReferencesToContentAsDeleted( related2 ) );
Assert.assertFalse( customContentData.markReferencesToContentAsDeleted( new ContentKey( "3" ) ) );
}
private CustomContentData createContentWithSingleRelated( String title, ContentKey related1, ContentKey related2 )
{
final CustomContentData contentData = new CustomContentData( contentTypeConfig );
contentData.add( new TextDataEntry( contentData.getInputConfig( "title" ), title ) );
if ( related1 != null && related2 != null )
{
contentData.add( new RelatedContentDataEntry( contentData.getInputConfig( "mySingleRelatedToBeModified" ), related1 ) );
contentData.add( new RelatedContentDataEntry( contentData.getInputConfig( "mySingleRelatedToBeUnmodified" ), related2 ) );
}
return contentData;
}
private CustomContentData createContentWithMultipleRelated( String title, ContentKey related1, ContentKey related2 )
{
final CustomContentData contentData = new CustomContentData( contentTypeConfig );
contentData.add( new TextDataEntry( contentData.getInputConfig( "title" ), title ) );
if ( related1 != null && related2 != null )
{
final DataEntryConfig dataEntryConfig = contentData.getInputConfig( "myMultipleRelatedToBeModified" );
final RelatedContentsDataEntry contentsDataEntry = new RelatedContentsDataEntry( dataEntryConfig );
contentsDataEntry.add( new RelatedContentDataEntry( dataEntryConfig, related1 ) );
contentsDataEntry.add( new RelatedContentDataEntry( dataEntryConfig, related2 ) );
contentData.add( contentsDataEntry );
}
return contentData;
}
private CustomContentData createContentWithMultipleRelatedInGroup( String title, ContentKey related1, ContentKey related2 )
{
final CustomContentData contentData = new CustomContentData( contentTypeConfig );
contentData.add( new TextDataEntry( contentData.getInputConfig( "title" ), title ) );
if ( related1 != null && related2 != null )
{
GroupDataEntry groupDataEntry = new GroupDataEntry( "MyGroup", "contentdata/mygroup", 1 );
groupDataEntry.setConfig( contentData.getSetConfig( "MyGroup" ) );
final DataEntryConfig dataEntryConfig = contentData.getInputConfig( "myMultipleRelatedToBeModifiedGroup" );
final RelatedContentsDataEntry contentsDataEntry = new RelatedContentsDataEntry( dataEntryConfig );
contentsDataEntry.add( new RelatedContentDataEntry( dataEntryConfig, related1 ) );
contentsDataEntry.add( new RelatedContentDataEntry( dataEntryConfig, related2 ) );
groupDataEntry.add( contentsDataEntry );
contentData.add( groupDataEntry );
}
return contentData;
}
}