/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.itest.content.imports; import java.io.IOException; 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 org.springframework.orm.hibernate3.HibernateTemplate; import com.enonic.cms.framework.xml.XMLDocumentFactory; import com.enonic.cms.api.client.model.ImportContentsParams; import com.enonic.cms.core.client.InternalClient; import com.enonic.cms.core.content.ContentService; 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.stringbased.HtmlAreaDataEntry; import com.enonic.cms.core.content.contentdata.custom.stringbased.SelectorDataEntry; import com.enonic.cms.core.content.contentdata.custom.stringbased.TextAreaDataEntry; import com.enonic.cms.core.content.contentdata.custom.stringbased.TextDataEntry; import com.enonic.cms.core.content.contentdata.custom.stringbased.UrlDataEntry; import com.enonic.cms.core.content.contentdata.custom.xmlbased.XmlDataEntry; import com.enonic.cms.core.content.contenttype.ContentHandlerName; import com.enonic.cms.core.content.contenttype.ContentTypeConfigBuilder; import com.enonic.cms.core.content.contenttype.ContentTypeEntity; import com.enonic.cms.core.content.imports.ImportJobFactory; 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 com.enonic.cms.store.dao.ContentDao; import com.enonic.cms.store.dao.GroupDao; import static org.junit.Assert.*; public class InternalClientImpl_ImportContentTest extends AbstractSpringTest { @Autowired protected HibernateTemplate hibernateTemplate; protected DomainFactory factory; @Autowired protected DomainFixture fixture; @Autowired protected ContentService contentService; @Autowired @Qualifier("localClient") protected InternalClient client; @Autowired protected ContentDao contentDao; @Autowired private GroupDao groupDao; @Before public void setUp() throws IOException { factory = fixture.getFactory(); fixture.initSystemData(); fixture.createAndStoreNormalUserWithUserGroup( "testuser", "Test user", "testuserstore" ); fixture.save( factory.createContentHandler( "MyHandler", ContentHandlerName.CUSTOM.getHandlerClassShortName() ) ); fixture.save( factory.createContentType( "MyContentType", ContentHandlerName.CUSTOM.getHandlerClassShortName(), null ) ); fixture.save( factory.createUnit( "MyUnit" ) ); fixture.save( factory.createCategory( "MyCategory", null, "MyContentType", "MyUnit", "testuser", "testuser" ) ); fixture.save( factory.createCategoryAccessForUser( "MyCategory", "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 given_string_based_input_field_that_is_not_mapped_when_importing_from_xml_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myText", "text", "contentdata/myText", "Text", false ); ctyconf.addInput( "myUrl", "url", "contentdata/myUrl", "URL", false ); ctyconf.addInput( "myRadiobutton", "radiobutton", "contentdata/myRadiobutton", "Radiobutton", false ); ctyconf.addInput( "myDropdown", "dropdown", "contentdata/myDropdown", "Dropdown", false ); ctyconf.addInput( "myTextarea", "textarea", "contentdata/myTextarea", "Textarea", false ); ctyconf.addInput( "myHtmlarea", "htmlarea", "contentdata/myHtmlarea", "Htmlarea", false ); ctyconf.endBlock(); ctyconf.startImportConfigForXmlMode( "test-import", "/entries/entry", "0", null, null ); ctyconf.addImportMapping( "@title", "myTitle" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = ""; source += "<entries>"; source += "<entry title='entry1'>"; source += "</entry>"; source += "</entries>"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (TextDataEntry) contentData.getEntry( "myText" ) ).getValue() ); assertEquals( null, ( (UrlDataEntry) contentData.getEntry( "myUrl" ) ).getValue() ); assertEquals( null, ( (SelectorDataEntry) contentData.getEntry( "myRadiobutton" ) ).getValue() ); assertEquals( null, ( (SelectorDataEntry) contentData.getEntry( "myDropdown" ) ).getValue() ); assertEquals( null, ( (TextAreaDataEntry) contentData.getEntry( "myTextarea" ) ).getValue() ); assertEquals( null, ( (HtmlAreaDataEntry) contentData.getEntry( "myHtmlarea" ) ).getValue() ); } @Test public void given_string_based_input_field_that_is_not_mapped_when_importing_from_csv_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myText", "text", "contentdata/myText", "Text", false ); ctyconf.addInput( "myUrl", "url", "contentdata/myUrl", "URL", false ); ctyconf.addInput( "myRadiobutton", "radiobutton", "contentdata/myRadiobutton", "Radiobutton", false ); ctyconf.addInput( "myDropdown", "dropdown", "contentdata/myDropdown", "Dropdown", false ); ctyconf.addInput( "myTextarea", "textarea", "contentdata/myTextarea", "Textarea", false ); ctyconf.addInput( "myHtmlarea", "htmlarea", "contentdata/myHtmlarea", "Htmlarea", false ); ctyconf.endBlock(); ctyconf.startImportConfigForCSVMode( "test-import", ";", "0", null, null ); ctyconf.addImportMapping( "1", "myTitle" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = "entry1;"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (TextDataEntry) contentData.getEntry( "myText" ) ).getValue() ); assertEquals( null, ( (UrlDataEntry) contentData.getEntry( "myUrl" ) ).getValue() ); assertEquals( null, ( (SelectorDataEntry) contentData.getEntry( "myRadiobutton" ) ).getValue() ); assertEquals( null, ( (SelectorDataEntry) contentData.getEntry( "myDropdown" ) ).getValue() ); assertEquals( null, ( (TextAreaDataEntry) contentData.getEntry( "myTextarea" ) ).getValue() ); assertEquals( null, ( (HtmlAreaDataEntry) contentData.getEntry( "myHtmlarea" ) ).getValue() ); } @Test public void given_xml_input_field_that_is_not_mapped_when_importing_from_xml_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myXml", "xml", "contentdata/myXml", "XML", false ); ctyconf.endBlock(); ctyconf.startImportConfigForXmlMode( "test-import", "/entries/entry", "0", null, null ); ctyconf.addImportMapping( "@title", "myTitle" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = ""; source += "<entries>"; source += "<entry title='entry1'>"; source += "</entry>"; source += "</entries>"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (XmlDataEntry) contentData.getEntry( "myXml" ) ).getValue() ); } @Test public void given_xml_input_field_that_is_not_mapped_when_importing_from_csv_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myXml", "xml", "contentdata/myXml", "XML", false ); ctyconf.endBlock(); ctyconf.startImportConfigForCSVMode( "test-import", ";", "0", null, null ); ctyconf.addImportMapping( "1", "myTitle" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = "entry1;"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (XmlDataEntry) contentData.getEntry( "myXml" ) ).getValue() ); } @Test public void given_date_input_field_that_is_not_mapped_when_importing_from_xml_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myDate", "date", "contentdata/myDate", "Date", false ); ctyconf.endBlock(); ctyconf.startImportConfigForXmlMode( "test-import", "/entries/entry", "0", null, null ); ctyconf.addImportMapping( "@title", "myTitle" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = ""; source += "<entries>"; source += "<entry title='entry1'>"; source += "</entry>"; source += "</entries>"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (DateDataEntry) contentData.getEntry( "myDate" ) ).getValue() ); } @Test public void given_date_input_field_that_is_not_mapped_when_importing_from_csv_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myDate", "date", "contentdata/myDate", "Date", false ); ctyconf.endBlock(); ctyconf.startImportConfigForCSVMode( "test-import", ";", "0", null, null ); ctyconf.addImportMapping( "1", "myTitle" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = "entry1;"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (DateDataEntry) contentData.getEntry( "myDate" ) ).getValue() ); } @Test public void given_string_based_input_field_that_is_mapped_but_xpath_does_not_exist_in_source_when_importing_from_xml_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myText", "text", "contentdata/myText", "Text", false ); ctyconf.addInput( "myUrl", "url", "contentdata/myUrl", "URL", false ); ctyconf.addInput( "myRadiobutton", "radiobutton", "contentdata/myRadiobutton", "Radiobutton", false ); ctyconf.addInput( "myDropdown", "dropdown", "contentdata/myDropdown", "Dropdown", false ); ctyconf.addInput( "myTextarea", "textarea", "contentdata/myTextarea", "Textarea", false ); ctyconf.addInput( "myHtmlarea", "htmlarea", "contentdata/myHtmlarea", "Htmlarea", false ); ctyconf.endBlock(); ctyconf.startImportConfigForXmlMode( "test-import", "/entries/entry", "0", null, null ); ctyconf.addImportMapping( "@title", "myTitle" ); ctyconf.addImportMapping( "text", "myText" ); ctyconf.addImportMapping( "url", "myUrl" ); ctyconf.addImportMapping( "radiobutton", "myRadiobutton" ); ctyconf.addImportMapping( "dropdown", "myDropdown" ); ctyconf.addImportMapping( "textarea", "myTextarea" ); ctyconf.addImportMapping( "htmlarea", "myHtmlarea" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = ""; source += "<entries>"; source += "<entry title='entry1'>"; source += "</entry>"; source += "</entries>"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (TextDataEntry) contentData.getEntry( "myText" ) ).getValue() ); assertEquals( null, ( (UrlDataEntry) contentData.getEntry( "myUrl" ) ).getValue() ); assertEquals( null, ( (SelectorDataEntry) contentData.getEntry( "myRadiobutton" ) ).getValue() ); assertEquals( null, ( (SelectorDataEntry) contentData.getEntry( "myDropdown" ) ).getValue() ); assertEquals( null, ( (TextAreaDataEntry) contentData.getEntry( "myTextarea" ) ).getValue() ); assertEquals( null, ( (HtmlAreaDataEntry) contentData.getEntry( "myHtmlarea" ) ).getValue() ); } @Test public void given_string_based_input_field_that_is_mapped_but_xpath_exist_in_source_but_has_empty_value_when_importing_from_xml_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myHtmlarea", "htmlarea", "contentdata/myHtmlarea", "Htmlarea", false ); ctyconf.endBlock(); ctyconf.startImportConfigForXmlMode( "test-import", "/entries/entry", "0", null, null ); ctyconf.addImportMapping( "@title", "myTitle" ); ctyconf.addImportMapping( "htmlarea", "myHtmlarea" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = ""; source += "<entries>"; source += "<entry title='entry1'>"; source += " <htmlarea></htmlarea>"; source += "</entry>"; source += "</entries>"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (HtmlAreaDataEntry) contentData.getEntry( "myHtmlarea" ) ).getValue() ); } @Test public void given_xml_field_that_is_mapped_but_xpath_does_not_exist_in_source_when_importing_from_xml_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myXml", "xml", "contentdata/myXml", "XML", false ); ctyconf.endBlock(); ctyconf.startImportConfigForXmlMode( "test-import", "/entries/entry", "0", null, null ); ctyconf.addImportMapping( "@title", "myTitle" ); ctyconf.addImportMapping( "xml", "myXml" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = ""; source += "<entries>"; source += "<entry title='entry1'>"; source += "</entry>"; source += "</entries>"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (XmlDataEntry) contentData.getEntry( "myXml" ) ).getValue() ); } @Test public void given_date_field_that_is_mapped_but_xpath_does_not_exist_in_source_when_importing_from_xml_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myDate", "date", "contentdata/myDate", "Date", false ); ctyconf.endBlock(); ctyconf.startImportConfigForXmlMode( "test-import", "/entries/entry", "0", null, null ); ctyconf.addImportMapping( "@title", "myTitle" ); ctyconf.addImportMapping( "date", "myDate" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = ""; source += "<entries>"; source += "<entry title='entry1'>"; source += "</entry>"; source += "</entries>"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (DateDataEntry) contentData.getEntry( "myDate" ) ).getValue() ); } @Test public void given_string_based_input_field_that_is_mapped_and_xpath_returns_empty_string_when_importing_from_xml_then_value_of_field_is_empty() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myText", "text", "contentdata/myText", "Text", false ); ctyconf.addInput( "myUrl", "url", "contentdata/myUrl", "URL", false ); ctyconf.addInput( "myRadiobutton", "radiobutton", "contentdata/myRadiobutton", "Radiobutton", false ); ctyconf.addInput( "myDropdown", "dropdown", "contentdata/myDropdown", "Dropdown", false ); ctyconf.addInput( "myTextarea", "textarea", "contentdata/myTextarea", "Textarea", false ); ctyconf.endBlock(); ctyconf.startImportConfigForXmlMode( "test-import", "/entries/entry", "0", null, null ); ctyconf.addImportMapping( "@title", "myTitle" ); ctyconf.addImportMapping( "text", "myText" ); ctyconf.addImportMapping( "url", "myUrl" ); ctyconf.addImportMapping( "radiobutton", "myRadiobutton" ); ctyconf.addImportMapping( "dropdown", "myDropdown" ); ctyconf.addImportMapping( "textarea", "myTextarea" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = ""; source += "<entries>"; source += "<entry title='entry1'>"; source += " <text/>"; source += " <url/>"; source += " <radiobutton/>"; source += " <dropdown/>"; source += " <textarea></textarea>"; source += "</entry>"; source += "</entries>"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( "", ( (TextDataEntry) contentData.getEntry( "myText" ) ).getValue() ); assertEquals( "", ( (UrlDataEntry) contentData.getEntry( "myUrl" ) ).getValue() ); assertEquals( "", ( (SelectorDataEntry) contentData.getEntry( "myRadiobutton" ) ).getValue() ); assertEquals( "", ( (SelectorDataEntry) contentData.getEntry( "myDropdown" ) ).getValue() ); assertEquals( "", ( (TextAreaDataEntry) contentData.getEntry( "myTextarea" ) ).getValue() ); } @Test public void given_htmlarea_input_field_that_is_mapped_and_xpath_returns_empty_string_when_importing_from_xml_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myHtmlarea", "htmlarea", "contentdata/myHtmlarea", "Htmlarea", false ); ctyconf.endBlock(); ctyconf.startImportConfigForXmlMode( "test-import", "/entries/entry", "0", null, null ); ctyconf.addImportMapping( "@title", "myTitle" ); ctyconf.addImportMapping( "htmlarea", "myHtmlarea" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = ""; source += "<entries>"; source += "<entry title='entry1'>"; source += " <htmlarea/>"; source += "</entry>"; source += "</entries>"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (HtmlAreaDataEntry) contentData.getEntry( "myHtmlarea" ) ).getValue() ); } @Test public void given_string_based_input_field_that_is_mapped_and_position_returns_empty_string_when_importing_from_csv_then_value_of_field_is_empty() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myText", "text", "contentdata/myText", "Text", false ); ctyconf.addInput( "myUrl", "url", "contentdata/myUrl", "URL", false ); ctyconf.addInput( "myRadiobutton", "radiobutton", "contentdata/myRadiobutton", "Radiobutton", false ); ctyconf.addInput( "myDropdown", "dropdown", "contentdata/myDropdown", "Dropdown", false ); ctyconf.addInput( "myTextarea", "textarea", "contentdata/myTextarea", "Textarea", false ); ctyconf.addInput( "myHtmlarea", "htmlarea", "contentdata/myHtmlarea", "Htmlarea", false ); ctyconf.endBlock(); ctyconf.startImportConfigForCSVMode( "test-import", ";", "0", null, null ); ctyconf.addImportMapping( "1", "myTitle" ); ctyconf.addImportMapping( "2", "myText" ); ctyconf.addImportMapping( "3", "myUrl" ); ctyconf.addImportMapping( "4", "myRadiobutton" ); ctyconf.addImportMapping( "5", "myDropdown" ); ctyconf.addImportMapping( "6", "myTextarea" ); ctyconf.addImportMapping( "7", "myHtmlarea" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = "entry1;;;;;;;"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( "", ( (TextDataEntry) contentData.getEntry( "myText" ) ).getValue() ); assertEquals( "", ( (UrlDataEntry) contentData.getEntry( "myUrl" ) ).getValue() ); assertEquals( "", ( (SelectorDataEntry) contentData.getEntry( "myRadiobutton" ) ).getValue() ); assertEquals( "", ( (SelectorDataEntry) contentData.getEntry( "myDropdown" ) ).getValue() ); assertEquals( "", ( (TextAreaDataEntry) contentData.getEntry( "myTextarea" ) ).getValue() ); assertEquals( "", ( (HtmlAreaDataEntry) contentData.getEntry( "myHtmlarea" ) ).getValue() ); } @Test public void given_xml_field_that_is_mapped_and_xpath_returns_empty_string_when_importing_from_xml_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myXml", "xml", "contentdata/myXml", "XML", false ); ctyconf.endBlock(); ctyconf.startImportConfigForXmlMode( "test-import", "/entries/entry", "0", null, null ); ctyconf.addImportMapping( "@title", "myTitle" ); ctyconf.addImportMapping( "xml", "myXml" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = ""; source += "<entries>"; source += "<entry title='entry1'>"; source += " <xml/>"; source += "</entry>"; source += "</entries>"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (XmlDataEntry) contentData.getEntry( "myXml" ) ).getValue() ); } @Test public void given_xml_field_that_is_mapped_and_position_returns_empty_string_when_importing_from_csv_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myXml", "xml", "contentdata/myXml", "XML", false ); ctyconf.endBlock(); ctyconf.startImportConfigForCSVMode( "test-import", ";", "0", null, null ); ctyconf.addImportMapping( "1", "myTitle" ); ctyconf.addImportMapping( "2", "myXml" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = "entry1;;"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (XmlDataEntry) contentData.getEntry( "myXml" ) ).getValue() ); } @Test public void given_date_field_that_is_mapped_and_xpath_returns_empty_string_when_importing_from_xml_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myDate", "date", "contentdata/myDate", "Date", false ); ctyconf.endBlock(); ctyconf.startImportConfigForXmlMode( "test-import", "/entries/entry", "0", null, null ); ctyconf.addImportMapping( "@title", "myTitle" ); ctyconf.addImportMapping( "date", "myDate" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = ""; source += "<entries>"; source += "<entry title='entry1'>"; source += " <date/>"; source += "</entry>"; source += "</entries>"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (DateDataEntry) contentData.getEntry( "myDate" ) ).getValue() ); } @Test public void given_date_field_that_is_mapped_and_position_returns_empty_string_when_importing_from_csv_then_value_of_field_is_null() { // setup ContentTypeConfigBuilder ctyconf = new ContentTypeConfigBuilder( "MyContentType", "myTitle" ); ctyconf.startBlock( "General" ); ctyconf.addInput( "myTitle", "text", "contentdata/myTitle", "Title", true ); ctyconf.addInput( "myDate", "date", "contentdata/myDate", "Date", false ); ctyconf.endBlock(); ctyconf.startImportConfigForCSVMode( "test-import", ";", "0", null, null ); ctyconf.addImportMapping( "1", "myTitle" ); ctyconf.addImportMapping( "2", "myDate" ); ctyconf.endImportConfig(); updateContentType( "MyContentType", ctyconf.toString() ); // exercise String source = "entry1;;"; ImportContentsParams params = new ImportContentsParams(); params.categoryKey = fixture.findCategoryByName( "MyCategory" ).getKey().toInt(); params.importName = "test-import"; params.data = source; client.importContents( params ); // verify CustomContentData contentData = (CustomContentData) fixture.findContentByCategory( fixture.findCategoryByName( "MyCategory" ) ).get( 0 ).getMainVersion().getContentData(); assertEquals( null, ( (DateDataEntry) contentData.getEntry( "myDate" ) ).getValue() ); } private void updateContentType( String contentTypeName, String contentTypeXml ) { ContentTypeEntity contentType = fixture.findContentTypeByName( contentTypeName ); contentType.setData( XMLDocumentFactory.create( contentTypeXml ).getAsJDOMDocument() ); fixture.flushAndClearHibernateSession(); } }