/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.itest.content.imports;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.apache.commons.io.IOUtils;
import org.joda.time.DateMidnight;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.mock.web.MockHttpServletRequest;
import com.enonic.cms.framework.xml.XMLDocumentFactory;
import com.enonic.cms.core.content.ContentVersionEntity;
import com.enonic.cms.core.content.command.ImportContentCommand;
import com.enonic.cms.core.content.contentdata.custom.BlockGroupDataEntries;
import com.enonic.cms.core.content.contentdata.custom.CustomContentData;
import com.enonic.cms.core.content.contentdata.custom.DateDataEntry;
import com.enonic.cms.core.content.contentdata.custom.GroupDataEntry;
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.ContentTypeEntity;
import com.enonic.cms.core.content.imports.ImportJob;
import com.enonic.cms.core.content.imports.ImportJobFactory;
import com.enonic.cms.core.content.imports.ImportResult;
import com.enonic.cms.core.security.PortalSecurityHolder;
import com.enonic.cms.core.security.user.User;
import com.enonic.cms.core.servlet.ServletRequestAccessor;
import com.enonic.cms.itest.AbstractSpringTest;
import com.enonic.cms.itest.util.DomainFactory;
import com.enonic.cms.itest.util.DomainFixture;
import static org.junit.Assert.*;
public class ImportServiceImpl_importWithBlockGroupsTest
extends AbstractSpringTest
{
private DomainFactory factory;
@Autowired
private DomainFixture fixture;
@Autowired
private ImportJobFactory importJobFactory;
private String personContentTypeXml;
@Before
public void setUp()
throws IOException
{
personContentTypeXml = resourceToString(
new ClassPathResource( "com/enonic/cms/itest/content/imports/personContentType-importWithBlockGroupsTest.xml" ) );
factory = fixture.getFactory();
fixture.initSystemData();
fixture.createAndStoreNormalUserWithUserGroup( "testuser", "Test user", "testuserstore" );
fixture.save( factory.createContentHandler( "MyHandler", ContentHandlerName.CUSTOM.getHandlerClassShortName() ) );
fixture.save( factory.createContentType( "PersonCty", ContentHandlerName.CUSTOM.getHandlerClassShortName(),
XMLDocumentFactory.create( personContentTypeXml ).getAsJDOMDocument() ) );
fixture.save( factory.createUnit( "MyUnit" ) );
fixture.save( factory.createCategory( "Persons", null, "PersonCty", "MyUnit", "testuser", "testuser" ) );
fixture.save( factory.createCategoryAccessForUser( "Persons", "testuser", "read, create, approve" ) );
MockHttpServletRequest request = new MockHttpServletRequest();
request.setRemoteAddr( "127.0.0.1" );
ServletRequestAccessor.setRequest( request );
PortalSecurityHolder.setAnonUser( fixture.findUserByName( User.ANONYMOUS_UID ).getKey() );
PortalSecurityHolder.setLoggedInUser( fixture.findUserByName( "testuser" ).getKey() );
PortalSecurityHolder.setImpersonatedUser( fixture.findUserByName( "testuser" ).getKey() );
ImportJobFactory.setExecuteInOneTransaction( true );
}
@Test
public void importing_with_sync_added_group_data_entry()
throws UnsupportedEncodingException
{
// setup content type with needed import configuration
String importsConfig = "";
importsConfig += "<imports>";
importsConfig += "<import base='/persons/person' mode='xml' name='xml-import-as-approved-with-sync' status='2' sync='person-no'>";
importsConfig += " <mapping src='@id' dest='person-no'/>";
importsConfig += " <mapping src='name' dest='name'/>";
importsConfig += " <block base='events/event' dest='Events'>";
importsConfig += " <mapping src='name' dest='event-name'/>";
importsConfig += " <mapping src='date' dest='event-date'/>";
importsConfig += " </block>";
importsConfig += "</import>";
importsConfig += "</imports>";
String changedContentTypeXml = personContentTypeXml.replace( "<imports/>", importsConfig );
updateContentType( "PersonCty", changedContentTypeXml );
String firstImportSource = "";
firstImportSource += "<persons>";
firstImportSource += " <person id='1001'>";
firstImportSource += " <name>Jørund Vier Skriubakken</name>";
firstImportSource += " <events>";
firstImportSource += " <event>";
firstImportSource += " <name>Birth</name>";
firstImportSource += " <date>1976-06-19</date>";
firstImportSource += " </event>";
firstImportSource += " </events>";
firstImportSource += " </person>";
firstImportSource += "</persons>";
// setup
ImportContentCommand command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync";
command.inputStream = new ByteArrayInputStream( firstImportSource.getBytes( "UTF-8" ) );
ImportJob job = importJobFactory.createImportJob( command );
ImportResult result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify setup
assertEquals( 1, result.getInserted().size() );
assertEquals( 1, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
// exercise
String secondImportSource = "";
secondImportSource += "<persons>";
secondImportSource += " <person id='1001'>";
secondImportSource += " <name>Jørund Vier Skriubakken</name>";
secondImportSource += " <events>";
secondImportSource += " <event>";
secondImportSource += " <name>Birth</name>";
secondImportSource += " <date>1976-04-19</date>";
secondImportSource += " </event>";
secondImportSource += " <event>";
secondImportSource += " <name>Confirmation</name>";
secondImportSource += " <date>1991-04-04</date>";
secondImportSource += " </event>";
secondImportSource += " </events>";
secondImportSource += " </person>";
secondImportSource += "</persons>";
command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync";
command.inputStream = new ByteArrayInputStream( secondImportSource.getBytes( "UTF-8" ) );
job = importJobFactory.createImportJob( command );
result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify
assertEquals( 0, result.getSkipped().size() );
assertEquals( 1, result.getUpdated().size() );
assertEquals( 0, result.getInserted().size() );
assertEquals( 2, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
ContentVersionEntity newVersion = fixture.findContentVersionByTitle( 1, "Jørund Vier Skriubakken" );
CustomContentData newContentData = (CustomContentData) newVersion.getContentData();
GroupDataEntry jrundEvent1 = newContentData.getGroupDataEntry( "Events", 1 );
assertEquals( "Birth", ( (TextDataEntry) jrundEvent1.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 1976, 4, 19 ).toDate(), ( (DateDataEntry) jrundEvent1.getEntry( "event-date" ) ).getValue() );
GroupDataEntry jrundEvent2 = newContentData.getGroupDataEntry( "Events", 2 );
assertEquals( "Confirmation", ( (TextDataEntry) jrundEvent2.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(), ( (DateDataEntry) jrundEvent2.getEntry( "event-date" ) ).getValue() );
}
@Test
public void importing_with_sync_modified_group_data_entry()
throws UnsupportedEncodingException
{
// setup content type with needed import configuration
String importsConfig = "";
importsConfig += "<imports>";
importsConfig += "<import base='/persons/person' mode='xml' name='xml-import-as-approved-with-sync' status='2' sync='person-no'>";
importsConfig += " <mapping src='@id' dest='person-no'/>";
importsConfig += " <mapping src='name' dest='name'/>";
importsConfig += " <block base='events/event' dest='Events'>";
importsConfig += " <mapping src='name' dest='event-name'/>";
importsConfig += " <mapping src='date' dest='event-date'/>";
importsConfig += " </block>";
importsConfig += "</import>";
importsConfig += "</imports>";
String changedContentTypeXml = personContentTypeXml.replace( "<imports/>", importsConfig );
updateContentType( "PersonCty", changedContentTypeXml );
String firstImportSource = "";
firstImportSource += "<persons>";
firstImportSource += " <person id='1001'>";
firstImportSource += " <name>Jørund Vier Skriubakken</name>";
firstImportSource += " <events>";
firstImportSource += " <event>";
firstImportSource += " <name>Birth</name>";
firstImportSource += " <date>1976-04-19</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Confirmation</name>";
firstImportSource += " <date>1991-04-04</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Marriage</name>";
firstImportSource += " <date>2008-02-14</date>";
firstImportSource += " </event>";
firstImportSource += " </events>";
firstImportSource += " </person>";
firstImportSource += "</persons>";
// setup
ImportContentCommand command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync";
command.inputStream = new ByteArrayInputStream( firstImportSource.getBytes( "UTF-8" ) );
ImportJob job = importJobFactory.createImportJob( command );
ImportResult result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify setup
assertEquals( 1, result.getInserted().size() );
assertEquals( 1, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
ContentVersionEntity originalVersion = fixture.findContentVersionByTitle( 0, "Jørund Vier Skriubakken" );
CustomContentData originalContentData = (CustomContentData) originalVersion.getContentData();
GroupDataEntry originalConfirmationEvent = originalContentData.getGroupDataEntry( "Events", 2 );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(),
( (DateDataEntry) originalConfirmationEvent.getEntry( "event-date" ) ).getValue() );
// exercise
String secondImportSource = "";
secondImportSource += "<persons>";
secondImportSource += " <person id='1001'>";
secondImportSource += " <name>Jørund Vier Skriubakken</name>";
secondImportSource += " <events>";
secondImportSource += " <event>";
secondImportSource += " <name>Birth</name>";
secondImportSource += " <date>1976-04-19</date>";
secondImportSource += " </event>";
secondImportSource += " <event>";
secondImportSource += " <name>Confirmation</name>";
secondImportSource += " <date>1991-04-16</date>";
secondImportSource += " </event>";
secondImportSource += " <event>";
secondImportSource += " <name>Marriage</name>";
secondImportSource += " <date>2008-02-14</date>";
secondImportSource += " </event>";
secondImportSource += " </events>";
secondImportSource += " </person>";
secondImportSource += "</persons>";
command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync";
command.inputStream = new ByteArrayInputStream( secondImportSource.getBytes( "UTF-8" ) );
job = importJobFactory.createImportJob( command );
result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify
assertEquals( 0, result.getSkipped().size() );
assertEquals( 1, result.getUpdated().size() );
assertEquals( 0, result.getInserted().size() );
assertEquals( 2, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
// verify that first version is as originally
originalVersion = fixture.findContentVersionByTitle( 0, "Jørund Vier Skriubakken" );
originalContentData = (CustomContentData) originalVersion.getContentData();
originalConfirmationEvent = originalContentData.getGroupDataEntry( "Events", 2 );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(),
( (DateDataEntry) originalConfirmationEvent.getEntry( "event-date" ) ).getValue() );
// verify that new version has changed
ContentVersionEntity newVersion = fixture.findContentVersionByTitle( 1, "Jørund Vier Skriubakken" );
CustomContentData newContentData = (CustomContentData) newVersion.getContentData();
GroupDataEntry newConfirmationEvent = newContentData.getGroupDataEntry( "Events", 2 );
assertEquals( new DateMidnight( 1991, 4, 16 ).toDate(),
( (DateDataEntry) newConfirmationEvent.getEntry( "event-date" ) ).getValue() );
}
@Test
public void sync_import_first_with_group_entries_second_import_without_but_otherwise_unchanged_does_not_change_content_When_import_config_is_without_blockgroup_mapping()
throws UnsupportedEncodingException
{
// setup content type with needed import configuration
String importsConfig = "";
importsConfig += "<imports>";
importsConfig += "<import base='/persons/person' mode='xml' name='xml-import-as-draft-with-sync' status='0' sync='person-no'>";
importsConfig += " <mapping src='@id' dest='person-no'/>";
importsConfig += " <mapping src='name' dest='name'/>";
importsConfig += " <block base='events/event' dest='Events'>";
importsConfig += " <mapping src='name' dest='event-name'/>";
importsConfig += " <mapping src='date' dest='event-date'/>";
importsConfig += " </block>";
importsConfig += "</import>";
importsConfig += "</imports>";
String changedContentTypeXml = personContentTypeXml.replace( "<imports/>", importsConfig );
updateContentType( "PersonCty", changedContentTypeXml );
String firstImportSource = "";
firstImportSource += "<persons>";
firstImportSource += " <person id='1001'>";
firstImportSource += " <name>Jørund Vier Skriubakken</name>";
firstImportSource += " <events>";
firstImportSource += " <event>";
firstImportSource += " <name>Birth</name>";
firstImportSource += " <date>1976-04-19</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Confirmation</name>";
firstImportSource += " <date>1991-04-04</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Marriage</name>";
firstImportSource += " <date>2008-02-14</date>";
firstImportSource += " </event>";
firstImportSource += " </events>";
firstImportSource += " </person>";
firstImportSource += "</persons>";
ImportContentCommand command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-draft-with-sync";
command.inputStream = new ByteArrayInputStream( firstImportSource.getBytes( "UTF-8" ) );
ImportJob job = importJobFactory.createImportJob( command );
ImportResult result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify setup
assertEquals( 1, result.getInserted().size() );
assertEquals( 1, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
// setup content type with import configuration without block group
importsConfig = "";
importsConfig += "<imports>";
importsConfig +=
"<import base='/persons/person' mode='xml' name='xml-import-as-draft-with-sync-and-without-block-mapping' status='0' sync='person-no'>";
importsConfig += " <mapping src='@id' dest='person-no'/>";
importsConfig += " <mapping src='name' dest='name'/>";
importsConfig += "</import>";
importsConfig += "</imports>";
changedContentTypeXml = personContentTypeXml.replace( "<imports/>", importsConfig );
updateContentType( "PersonCty", changedContentTypeXml );
// exercise
String secondImportSource = "";
secondImportSource += "<persons>";
secondImportSource += " <person id='1001'>";
secondImportSource += " <name>Jørund Vier Skriubakken</name>";
secondImportSource += " <events>";
secondImportSource += " </events>";
secondImportSource += " </person>";
secondImportSource += "</persons>";
command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-draft-with-sync-and-without-block-mapping";
command.inputStream = new ByteArrayInputStream( secondImportSource.getBytes( "UTF-8" ) );
job = importJobFactory.createImportJob( command );
result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify
assertEquals( 1, result.getSkipped().size() );
assertEquals( 0, result.getUpdated().size() );
assertEquals( 0, result.getInserted().size() );
assertEquals( 1, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
}
@Test
public void sync_import_first_with_group_entries_second_import_with_one_removed_and_one_changed_changes_content()
throws UnsupportedEncodingException
{
// setup content type with needed import configuration
String importsConfig = "";
importsConfig += "<imports>";
importsConfig += "<import base='/persons/person' mode='xml' name='xml-import-as-approved-with-sync' status='2' sync='person-no'>";
importsConfig += " <mapping src='@id' dest='person-no'/>";
importsConfig += " <mapping src='name' dest='name'/>";
importsConfig += " <block base='events/event' dest='Events'>";
importsConfig += " <mapping src='name' dest='event-name'/>";
importsConfig += " <mapping src='date' dest='event-date'/>";
importsConfig += " </block>";
importsConfig += "</import>";
importsConfig += "</imports>";
String changedContentTypeXml = personContentTypeXml.replace( "<imports/>", importsConfig );
updateContentType( "PersonCty", changedContentTypeXml );
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
String firstImportSource = "";
firstImportSource += "<persons>";
firstImportSource += " <person id='1001'>";
firstImportSource += " <name>Jørund Vier Skriubakken</name>";
firstImportSource += " <events>";
firstImportSource += " <event>";
firstImportSource += " <name>Birth</name>";
firstImportSource += " <date>1976-04-16</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Confirmation</name>";
firstImportSource += " <date>1991-04-04</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Marriage</name>";
firstImportSource += " <date>2009-02-14</date>";
firstImportSource += " </event>";
firstImportSource += " </events>";
firstImportSource += " </person>";
firstImportSource += "</persons>";
// setup
ImportContentCommand command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync";
command.inputStream = new ByteArrayInputStream( firstImportSource.getBytes( "UTF-8" ) );
ImportJob job = importJobFactory.createImportJob( command );
ImportResult result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify setup
assertEquals( 1, result.getInserted().size() );
assertEquals( 1, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
ContentVersionEntity originalVersion = fixture.findContentVersionByTitle( 0, "Jørund Vier Skriubakken" );
CustomContentData originalContentData = (CustomContentData) originalVersion.getContentData();
GroupDataEntry originalConfirmationEvent = originalContentData.getGroupDataEntry( "Events", 2 );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(),
( (DateDataEntry) originalConfirmationEvent.getEntry( "event-date" ) ).getValue() );
// exercise
String secondImportSource = "";
secondImportSource += "<persons>";
secondImportSource += " <person id='1001'>";
secondImportSource += " <name>Jørund Vier Skriubakken</name>";
secondImportSource += " <events>";
secondImportSource += " <event>";
secondImportSource += " <name>Birth</name>";
secondImportSource += " <date>1976-04-19</date>";
secondImportSource += " </event>";
secondImportSource += " <event>";
secondImportSource += " <name>Marriage</name>";
secondImportSource += " <date>2008-02-14</date>";
secondImportSource += " </event>";
secondImportSource += " </events>";
secondImportSource += " </person>";
secondImportSource += "</persons>";
command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync";
command.inputStream = new ByteArrayInputStream( secondImportSource.getBytes( "UTF-8" ) );
job = importJobFactory.createImportJob( command );
result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify
assertEquals( 0, result.getSkipped().size() );
assertEquals( 1, result.getUpdated().size() );
assertEquals( 0, result.getInserted().size() );
assertEquals( 2, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
// verify that first version is as originally
originalVersion = fixture.findContentVersionByTitle( 0, "Jørund Vier Skriubakken" );
originalContentData = (CustomContentData) originalVersion.getContentData();
originalConfirmationEvent = originalContentData.getGroupDataEntry( "Events", 2 );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(),
( (DateDataEntry) originalConfirmationEvent.getEntry( "event-date" ) ).getValue() );
// verify that new version has changed
ContentVersionEntity newVersion = fixture.findContentVersionByTitle( 1, "Jørund Vier Skriubakken" );
CustomContentData newContentData = (CustomContentData) newVersion.getContentData();
GroupDataEntry newBirthEvent = newContentData.getGroupDataEntry( "Events", 1 );
assertEquals( "Birth", ( (TextDataEntry) newBirthEvent.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 1976, 4, 19 ).toDate(), ( (DateDataEntry) newBirthEvent.getEntry( "event-date" ) ).getValue() );
GroupDataEntry newMarriageEvent = newContentData.getGroupDataEntry( "Events", 2 );
assertEquals( "Marriage", ( (TextDataEntry) newMarriageEvent.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 2008, 2, 14 ).toDate(), ( (DateDataEntry) newMarriageEvent.getEntry( "event-date" ) ).getValue() );
GroupDataEntry event3 = newContentData.getGroupDataEntry( "Events", 3 );
assertEquals( "Marriage", ( (TextDataEntry) event3.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 2009, 2, 14 ).toDate(), ( (DateDataEntry) event3.getEntry( "event-date" ) ).getValue() );
}
@Test
public void sync_block_import_without_purge_first_with_group_entries_second_import_with_one_removed_and_one_changed_changes_content()
throws UnsupportedEncodingException
{
// setup content type with needed import configuration
String importsConfig = "";
importsConfig += "<imports>";
importsConfig +=
"<import base='/persons/person' mode='xml' status='2' sync='person-no' name='xml-import-as-approved-with-sync-and-block-sync-without-purge'>";
importsConfig += " <mapping src='@id' dest='person-no'/>";
importsConfig += " <mapping src='name' dest='name'/>";
importsConfig += " <block base='events/event' dest='Events' sync='event-name' purge='false'>";
importsConfig += " <mapping src='name' dest='event-name'/>";
importsConfig += " <mapping src='date' dest='event-date'/>";
importsConfig += " </block>";
importsConfig += "</import>";
importsConfig += "</imports>";
String changedContentTypeXml = personContentTypeXml.replace( "<imports/>", importsConfig );
updateContentType( "PersonCty", changedContentTypeXml );
String firstImportSource = "";
firstImportSource += "<persons>";
firstImportSource += " <person id='1001'>";
firstImportSource += " <name>Jørund Vier Skriubakken</name>";
firstImportSource += " <events>";
firstImportSource += " <event>";
firstImportSource += " <name>Birth</name>";
firstImportSource += " <date>1976-04-16</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Confirmation</name>";
firstImportSource += " <date>1991-04-04</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Marriage</name>";
firstImportSource += " <date>2008-02-14</date>";
firstImportSource += " </event>";
firstImportSource += " </events>";
firstImportSource += " </person>";
firstImportSource += "</persons>";
// setup
ImportContentCommand command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync-and-block-sync-without-purge";
command.inputStream = new ByteArrayInputStream( firstImportSource.getBytes( "UTF-8" ) );
ImportJob job = importJobFactory.createImportJob( command );
ImportResult result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify setup
assertEquals( 1, result.getInserted().size() );
assertEquals( 1, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
ContentVersionEntity originalVersion = fixture.findContentVersionByTitle( 0, "Jørund Vier Skriubakken" );
CustomContentData originalContentData = (CustomContentData) originalVersion.getContentData();
GroupDataEntry originalConfirmationEvent = originalContentData.getGroupDataEntry( "Events", 2 );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(),
( (DateDataEntry) originalConfirmationEvent.getEntry( "event-date" ) ).getValue() );
// exercise
String secondImportSource = "";
secondImportSource += "<persons>";
secondImportSource += " <person id='1001'>";
secondImportSource += " <name>Jørund Vier Skriubakken</name>";
secondImportSource += " <events>";
secondImportSource += " <event>";
secondImportSource += " <name>Birth</name>";
secondImportSource += " <date>1976-04-19</date>";
secondImportSource += " </event>";
secondImportSource += " <event>";
secondImportSource += " <name>Became father</name>";
secondImportSource += " <date>2010-03-18</date>";
secondImportSource += " </event>";
secondImportSource += " </events>";
secondImportSource += " </person>";
secondImportSource += "</persons>";
command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync-and-block-sync-without-purge";
command.inputStream = new ByteArrayInputStream( secondImportSource.getBytes( "UTF-8" ) );
job = importJobFactory.createImportJob( command );
result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify
assertEquals( 0, result.getSkipped().size() );
assertEquals( 1, result.getUpdated().size() );
assertEquals( 0, result.getInserted().size() );
assertEquals( 2, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
// verify that first version is as originally
originalVersion = fixture.findContentVersionByTitle( 0, "Jørund Vier Skriubakken" );
originalContentData = (CustomContentData) originalVersion.getContentData();
originalConfirmationEvent = originalContentData.getGroupDataEntry( "Events", 2 );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(),
( (DateDataEntry) originalConfirmationEvent.getEntry( "event-date" ) ).getValue() );
// verify that new version has changed
ContentVersionEntity newVersion = fixture.findContentVersionByTitle( 1, "Jørund Vier Skriubakken" );
CustomContentData newContentData = (CustomContentData) newVersion.getContentData();
GroupDataEntry event1 = newContentData.getGroupDataEntry( "Events", 1 );
assertEquals( "Birth", ( (TextDataEntry) event1.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 1976, 4, 19 ).toDate(), ( (DateDataEntry) event1.getEntry( "event-date" ) ).getValue() );
GroupDataEntry event2 = newContentData.getGroupDataEntry( "Events", 2 );
assertEquals( "Confirmation", ( (TextDataEntry) event2.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(), ( (DateDataEntry) event2.getEntry( "event-date" ) ).getValue() );
GroupDataEntry event3 = newContentData.getGroupDataEntry( "Events", 3 );
assertEquals( "Marriage", ( (TextDataEntry) event3.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 2008, 2, 14 ).toDate(), ( (DateDataEntry) event3.getEntry( "event-date" ) ).getValue() );
GroupDataEntry event4 = newContentData.getGroupDataEntry( "Events", 4 );
assertEquals( "Became father", ( (TextDataEntry) event4.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 2010, 3, 18 ).toDate(), ( (DateDataEntry) event4.getEntry( "event-date" ) ).getValue() );
}
@Test
public void import_with_sync_block_with_purge_removed_last_block_entry_when_last_block_entry_is_removed_in_second_import_source()
throws UnsupportedEncodingException
{
// setup content type with needed import configuration
String importsConfig = "";
importsConfig += "<imports>";
importsConfig +=
"<import base='/persons/person' mode='xml' status='2' sync='person-no' name='xml-import-as-approved-with-sync-and-block-sync-with-purge'>";
importsConfig += " <mapping src='@id' dest='person-no'/>";
importsConfig += " <mapping src='name' dest='name'/>";
importsConfig += " <block base='events/event' dest='Events' sync='event-name' purge='true'>";
importsConfig += " <mapping src='name' dest='event-name'/>";
importsConfig += " <mapping src='date' dest='event-date'/>";
importsConfig += " </block>";
importsConfig += "</import>";
importsConfig += "</imports>";
String changedContentTypeXml = personContentTypeXml.replace( "<imports/>", importsConfig );
updateContentType( "PersonCty", changedContentTypeXml );
String firstImportSource = "";
firstImportSource += "<persons>";
firstImportSource += " <person id='1001'>";
firstImportSource += " <name>Jørund Vier Skriubakken</name>";
firstImportSource += " <events>";
firstImportSource += " <event>";
firstImportSource += " <name>Birth</name>";
firstImportSource += " <date>1976-04-19</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Confirmation</name>";
firstImportSource += " <date>1991-04-04</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Marriage</name>";
firstImportSource += " <date>2008-02-14</date>";
firstImportSource += " </event>";
firstImportSource += " </events>";
firstImportSource += " </person>";
firstImportSource += "</persons>";
// setup
ImportContentCommand command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync-and-block-sync-with-purge";
command.inputStream = new ByteArrayInputStream( firstImportSource.getBytes( "UTF-8" ) );
ImportJob job = importJobFactory.createImportJob( command );
ImportResult result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify setup
assertEquals( 1, result.getInserted().size() );
assertEquals( 1, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
ContentVersionEntity originalVersion = fixture.findContentVersionByTitle( 0, "Jørund Vier Skriubakken" );
CustomContentData originalContentData = (CustomContentData) originalVersion.getContentData();
assertNotNull( originalContentData.getGroupDataEntry( "Events", 1 ) );
GroupDataEntry originalConfirmationEvent = originalContentData.getGroupDataEntry( "Events", 2 );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(),
( (DateDataEntry) originalConfirmationEvent.getEntry( "event-date" ) ).getValue() );
GroupDataEntry originalMarriageEvent = originalContentData.getGroupDataEntry( "Events", 3 );
assertEquals( new DateMidnight( 2008, 2, 14 ).toDate(),
( (DateDataEntry) originalMarriageEvent.getEntry( "event-date" ) ).getValue() );
// exercise
String secondImportSource = "";
secondImportSource += "<persons>";
secondImportSource += " <person id='1001'>";
secondImportSource += " <name>Jørund Vier Skriubakken</name>";
secondImportSource += " <events>";
secondImportSource += " <event>";
secondImportSource += " <name>Birth</name>";
secondImportSource += " <date>1976-04-19</date>";
secondImportSource += " </event>";
secondImportSource += " <event>";
secondImportSource += " <name>Confirmation</name>";
secondImportSource += " <date>1991-04-04</date>";
secondImportSource += " </event>";
secondImportSource += " </events>";
secondImportSource += " </person>";
secondImportSource += "</persons>";
command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync-and-block-sync-with-purge";
command.inputStream = new ByteArrayInputStream( secondImportSource.getBytes( "UTF-8" ) );
job = importJobFactory.createImportJob( command );
result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify
assertEquals( 0, result.getSkipped().size() );
assertEquals( 1, result.getUpdated().size() );
assertEquals( 0, result.getInserted().size() );
assertEquals( 2, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
// verify that new version has removed last event
ContentVersionEntity newVersion = fixture.findContentVersionByTitle( 1, "Jørund Vier Skriubakken" );
CustomContentData newContentData = (CustomContentData) newVersion.getContentData();
GroupDataEntry event1 = newContentData.getGroupDataEntry( "Events", 1 );
assertEquals( "Birth", ( (TextDataEntry) event1.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 1976, 4, 19 ).toDate(), ( (DateDataEntry) event1.getEntry( "event-date" ) ).getValue() );
GroupDataEntry event2 = newContentData.getGroupDataEntry( "Events", 2 );
assertEquals( "Confirmation", ( (TextDataEntry) event2.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(), ( (DateDataEntry) event2.getEntry( "event-date" ) ).getValue() );
GroupDataEntry event3 = newContentData.getGroupDataEntry( "Events", 3 );
assertNull( event3 );
}
@Test
public void having_sync_off_and_purge_true()
throws UnsupportedEncodingException
{
// setup content type with needed import configuration
String importsConfig = "";
importsConfig += "<imports>";
importsConfig += "<import base='/persons/person' mode='xml' status='2' sync='person-no' name='test-jvs'>";
importsConfig += " <mapping src='@id' dest='person-no'/>";
importsConfig += " <mapping src='name' dest='name'/>";
importsConfig += " <block base='events/event' dest='Events' purge='true'>";
importsConfig += " <mapping src='name' dest='event-name'/>";
importsConfig += " <mapping src='date' dest='event-date'/>";
importsConfig += " </block>";
importsConfig += "</import>";
importsConfig += "</imports>";
String changedContentTypeXml = personContentTypeXml.replace( "<imports/>", importsConfig );
updateContentType( "PersonCty", changedContentTypeXml );
String firstImportSource = "";
firstImportSource += "<persons>";
firstImportSource += " <person id='1001'>";
firstImportSource += " <name>Jørund Vier Skriubakken</name>";
firstImportSource += " <events>";
firstImportSource += " <event>";
firstImportSource += " <name>Birth</name>";
firstImportSource += " <date>1976-04-19</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Confirmation</name>";
firstImportSource += " <date>1991-04-04</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Marriage</name>";
firstImportSource += " <date>2009-02-14</date>";
firstImportSource += " </event>";
firstImportSource += " </events>";
firstImportSource += " </person>";
firstImportSource += "</persons>";
// setup
ImportContentCommand command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "test-jvs";
command.inputStream = new ByteArrayInputStream( firstImportSource.getBytes( "UTF-8" ) );
ImportJob job = importJobFactory.createImportJob( command );
job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// exercise
String secondImportSource = "";
secondImportSource += "<persons>";
secondImportSource += " <person id='1001'>";
secondImportSource += " <name>Jørund Vier Skriubakken</name>";
secondImportSource += " <events>";
secondImportSource += " <event>";
secondImportSource += " <name>Marriage</name>";
secondImportSource += " <date>2008-02-14</date>";
secondImportSource += " </event>";
secondImportSource += " <event>";
secondImportSource += " <name>Birth</name>";
secondImportSource += " <date>1976-04-19</date>";
secondImportSource += " </event>";
secondImportSource += " </events>";
secondImportSource += " </person>";
secondImportSource += "</persons>";
command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "test-jvs";
command.inputStream = new ByteArrayInputStream( secondImportSource.getBytes( "UTF-8" ) );
job = importJobFactory.createImportJob( command );
ImportResult result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify
assertEquals( 0, result.getSkipped().size() );
assertEquals( 1, result.getUpdated().size() );
assertEquals( 0, result.getInserted().size() );
assertEquals( 2, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
// verify that new version has removed last event
ContentVersionEntity newVersion = fixture.findContentVersionByTitle( 1, "Jørund Vier Skriubakken" );
CustomContentData newContentData = (CustomContentData) newVersion.getContentData();
GroupDataEntry event1 = newContentData.getGroupDataEntry( "Events", 1 );
assertEquals( "Marriage", ( (TextDataEntry) event1.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 2008, 2, 14 ).toDate(), ( (DateDataEntry) event1.getEntry( "event-date" ) ).getValue() );
GroupDataEntry event2 = newContentData.getGroupDataEntry( "Events", 2 );
assertEquals( "Birth", ( (TextDataEntry) event2.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 1976, 4, 19 ).toDate(), ( (DateDataEntry) event2.getEntry( "event-date" ) ).getValue() );
GroupDataEntry event3 = newContentData.getGroupDataEntry( "Events", 3 );
assertNull( event3 );
}
@Test
public void import_with_sync_block_with_purge_removed_middle_block_entry_when_middle_block_entry_is_removed_in_second_import_source()
throws UnsupportedEncodingException
{
// setup content type with needed import configuration
String importsConfig = "";
importsConfig += "<imports>";
importsConfig +=
"<import base='/persons/person' mode='xml' status='2' sync='person-no' name='xml-import-as-approved-with-sync-and-block-sync-with-purge'>";
importsConfig += " <mapping src='@id' dest='person-no'/>";
importsConfig += " <mapping src='name' dest='name'/>";
importsConfig += " <block base='events/event' dest='Events' sync='event-name' purge='true'>";
importsConfig += " <mapping src='name' dest='event-name'/>";
importsConfig += " <mapping src='date' dest='event-date'/>";
importsConfig += " </block>";
importsConfig += "</import>";
importsConfig += "</imports>";
String changedContentTypeXml = personContentTypeXml.replace( "<imports/>", importsConfig );
updateContentType( "PersonCty", changedContentTypeXml );
String firstImportSource = "";
firstImportSource += "<persons>";
firstImportSource += " <person id='1001'>";
firstImportSource += " <name>Jørund Vier Skriubakken</name>";
firstImportSource += " <events>";
firstImportSource += " <event>";
firstImportSource += " <name>Birth</name>";
firstImportSource += " <date>1976-04-19</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Confirmation</name>";
firstImportSource += " <date>1991-04-04</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Marriage</name>";
firstImportSource += " <date>2008-02-14</date>";
firstImportSource += " </event>";
firstImportSource += " </events>";
firstImportSource += " </person>";
firstImportSource += "</persons>";
// setup
ImportContentCommand command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync-and-block-sync-with-purge";
command.inputStream = new ByteArrayInputStream( firstImportSource.getBytes( "UTF-8" ) );
ImportJob job = importJobFactory.createImportJob( command );
ImportResult result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify setup
assertEquals( 1, result.getInserted().size() );
assertEquals( 1, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
ContentVersionEntity originalVersion = fixture.findContentVersionByTitle( 0, "Jørund Vier Skriubakken" );
CustomContentData originalContentData = (CustomContentData) originalVersion.getContentData();
assertNotNull( originalContentData.getGroupDataEntry( "Events", 1 ) );
GroupDataEntry originalConfirmationEvent = originalContentData.getGroupDataEntry( "Events", 2 );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(),
( (DateDataEntry) originalConfirmationEvent.getEntry( "event-date" ) ).getValue() );
GroupDataEntry originalMarriageEvent = originalContentData.getGroupDataEntry( "Events", 3 );
assertEquals( new DateMidnight( 2008, 2, 14 ).toDate(),
( (DateDataEntry) originalMarriageEvent.getEntry( "event-date" ) ).getValue() );
// exercise
String secondImportSource = "";
secondImportSource += "<persons>";
secondImportSource += " <person id='1001'>";
secondImportSource += " <name>Jørund Vier Skriubakken</name>";
secondImportSource += " <events>";
secondImportSource += " <event>";
secondImportSource += " <name>Birth</name>";
secondImportSource += " <date>1976-04-19</date>";
secondImportSource += " </event>";
secondImportSource += " <event>";
secondImportSource += " <name>Marriage</name>";
secondImportSource += " <date>2008-02-14</date>";
secondImportSource += " </event>";
secondImportSource += " </events>";
secondImportSource += " </person>";
secondImportSource += "</persons>";
command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync-and-block-sync-with-purge";
command.inputStream = new ByteArrayInputStream( secondImportSource.getBytes( "UTF-8" ) );
job = importJobFactory.createImportJob( command );
result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify
assertEquals( 0, result.getSkipped().size() );
assertEquals( 1, result.getUpdated().size() );
assertEquals( 0, result.getInserted().size() );
assertEquals( 2, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
// verify that new version has removed last event
ContentVersionEntity newVersion = fixture.findContentVersionByTitle( 1, "Jørund Vier Skriubakken" );
CustomContentData newContentData = (CustomContentData) newVersion.getContentData();
GroupDataEntry event1 = newContentData.getGroupDataEntry( "Events", 1 );
assertEquals( "Birth", ( (TextDataEntry) event1.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 1976, 4, 19 ).toDate(), ( (DateDataEntry) event1.getEntry( "event-date" ) ).getValue() );
GroupDataEntry event2 = newContentData.getGroupDataEntry( "Events", 2 );
assertEquals( "Marriage", ( (TextDataEntry) event2.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 2008, 2, 14 ).toDate(), ( (DateDataEntry) event2.getEntry( "event-date" ) ).getValue() );
GroupDataEntry event3 = newContentData.getGroupDataEntry( "Events", 3 );
assertNull( event3 );
}
@Test
public void sync_block_import_with_purge_first_with_group_entries_second_import_with_one_removed_and_one_changed_changes_content()
throws UnsupportedEncodingException
{
// setup content type with needed import configuration
String importsConfig = "";
importsConfig += "<imports>";
importsConfig +=
"<import base='/persons/person' mode='xml' status='2' sync='person-no' name='xml-import-as-approved-with-sync-and-block-sync-with-purge'>";
importsConfig += " <mapping src='@id' dest='person-no'/>";
importsConfig += " <mapping src='name' dest='name'/>";
importsConfig += " <block base='events/event' dest='Events' sync='event-name' purge='true'>";
importsConfig += " <mapping src='name' dest='event-name'/>";
importsConfig += " <mapping src='date' dest='event-date'/>";
importsConfig += " </block>";
importsConfig += "</import>";
importsConfig += "</imports>";
String changedContentTypeXml = personContentTypeXml.replace( "<imports/>", importsConfig );
updateContentType( "PersonCty", changedContentTypeXml );
String firstImportSource = "";
firstImportSource += "<persons>";
firstImportSource += " <person id='1001'>";
firstImportSource += " <name>Jørund Vier Skriubakken</name>";
firstImportSource += " <events>";
firstImportSource += " <event>";
firstImportSource += " <name>Birth</name>";
firstImportSource += " <date>1976-04-16</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Confirmation</name>";
firstImportSource += " <date>1991-04-04</date>";
firstImportSource += " </event>";
firstImportSource += " <event>";
firstImportSource += " <name>Marriage</name>";
firstImportSource += " <date>2009-02-14</date>";
firstImportSource += " </event>";
firstImportSource += " </events>";
firstImportSource += " </person>";
firstImportSource += "</persons>";
// setup
ImportContentCommand command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync-and-block-sync-with-purge";
command.inputStream = new ByteArrayInputStream( firstImportSource.getBytes( "UTF-8" ) );
ImportJob job = importJobFactory.createImportJob( command );
ImportResult result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify setup
assertEquals( 1, result.getInserted().size() );
assertEquals( 1, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
ContentVersionEntity originalVersion = fixture.findContentVersionByTitle( 0, "Jørund Vier Skriubakken" );
CustomContentData originalContentData = (CustomContentData) originalVersion.getContentData();
GroupDataEntry originalConfirmationEvent = originalContentData.getGroupDataEntry( "Events", 2 );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(),
( (DateDataEntry) originalConfirmationEvent.getEntry( "event-date" ) ).getValue() );
// exercise
String secondImportSource = "";
secondImportSource += "<persons>";
secondImportSource += " <person id='1001'>";
secondImportSource += " <name>Jørund Vier Skriubakken</name>";
secondImportSource += " <events>";
secondImportSource += " <event>";
secondImportSource += " <name>Birth</name>";
secondImportSource += " <date>1976-04-19</date>";
secondImportSource += " </event>";
secondImportSource += " <event>";
secondImportSource += " <name>Marriage</name>";
secondImportSource += " <date>2008-02-14</date>";
secondImportSource += " </event>";
secondImportSource += " </events>";
secondImportSource += " </person>";
secondImportSource += "</persons>";
command = new ImportContentCommand();
command.importer = fixture.findUserByName( "testuser" );
command.categoryToImportTo = fixture.findCategoryByName( "Persons" );
command.importName = "xml-import-as-approved-with-sync-and-block-sync-with-purge";
command.inputStream = new ByteArrayInputStream( secondImportSource.getBytes( "UTF-8" ) );
job = importJobFactory.createImportJob( command );
result = job.start();
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
// verify
assertEquals( 0, result.getSkipped().size() );
assertEquals( 1, result.getUpdated().size() );
assertEquals( 0, result.getInserted().size() );
assertEquals( 2, fixture.countContentVersionsByTitle( "Jørund Vier Skriubakken" ) );
// verify that first version is as originally
originalVersion = fixture.findContentVersionByTitle( 0, "Jørund Vier Skriubakken" );
originalContentData = (CustomContentData) originalVersion.getContentData();
originalConfirmationEvent = originalContentData.getGroupDataEntry( "Events", 2 );
assertEquals( new DateMidnight( 1991, 4, 4 ).toDate(),
( (DateDataEntry) originalConfirmationEvent.getEntry( "event-date" ) ).getValue() );
// verify that new version has changed
ContentVersionEntity newVersion = fixture.findContentVersionByTitle( 1, "Jørund Vier Skriubakken" );
CustomContentData newContentData = (CustomContentData) newVersion.getContentData();
BlockGroupDataEntries eventsBlockGroupDataEntries = newContentData.getBlockGroupDataEntries( "Events" );
assertEquals( 2, eventsBlockGroupDataEntries.numberOfEntries() );
GroupDataEntry event1 = eventsBlockGroupDataEntries.getGroupDataEntry( 1 );
assertEquals( "Birth", ( (TextDataEntry) event1.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 1976, 4, 19 ).toDate(), ( (DateDataEntry) event1.getEntry( "event-date" ) ).getValue() );
GroupDataEntry event2 = eventsBlockGroupDataEntries.getGroupDataEntry( 2 );
assertEquals( "Marriage", ( (TextDataEntry) event2.getEntry( "event-name" ) ).getValue() );
assertEquals( new DateMidnight( 2008, 2, 14 ).toDate(), ( (DateDataEntry) event2.getEntry( "event-date" ) ).getValue() );
}
private void updateContentType( String contentTypeName, String contentTypeXml )
{
ContentTypeEntity contentType = fixture.findContentTypeByName( contentTypeName );
contentType.setData( XMLDocumentFactory.create( contentTypeXml ).getAsJDOMDocument() );
fixture.flushAndClearHibernateSession();
fixture.flushIndexTransaction();
}
private String resourceToString( Resource resource )
throws IOException
{
return IOUtils.toString( resource.getInputStream() );
}
}