/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.dynamic.data.mapping.upgrade.v1_0_0.test; import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian; import com.liferay.dynamic.data.mapping.model.DDMContent; import com.liferay.dynamic.data.mapping.model.DDMFormLayout; import com.liferay.dynamic.data.mapping.model.DDMStorageLink; import com.liferay.dynamic.data.mapping.model.DDMStructure; import com.liferay.dynamic.data.mapping.model.DDMStructureConstants; import com.liferay.dynamic.data.mapping.model.DDMStructureLayout; import com.liferay.dynamic.data.mapping.model.DDMStructureVersion; import com.liferay.dynamic.data.mapping.model.DDMTemplate; import com.liferay.dynamic.data.mapping.model.DDMTemplateConstants; import com.liferay.dynamic.data.mapping.model.DDMTemplateVersion; import com.liferay.dynamic.data.mapping.service.DDMContentLocalServiceUtil; import com.liferay.dynamic.data.mapping.service.DDMStructureLayoutLocalServiceUtil; import com.liferay.dynamic.data.mapping.service.DDMStructureLocalServiceUtil; import com.liferay.dynamic.data.mapping.service.DDMStructureVersionLocalServiceUtil; import com.liferay.dynamic.data.mapping.service.DDMTemplateLocalServiceUtil; import com.liferay.dynamic.data.mapping.service.DDMTemplateVersionLocalServiceUtil; import com.liferay.expando.kernel.model.ExpandoColumn; import com.liferay.expando.kernel.model.ExpandoColumnConstants; import com.liferay.expando.kernel.model.ExpandoRow; import com.liferay.expando.kernel.model.ExpandoTable; import com.liferay.expando.kernel.service.ExpandoColumnLocalServiceUtil; import com.liferay.expando.kernel.service.ExpandoRowLocalServiceUtil; import com.liferay.expando.kernel.service.ExpandoTableLocalServiceUtil; import com.liferay.expando.kernel.service.ExpandoValueLocalServiceUtil; import com.liferay.portal.kernel.dao.db.DB; import com.liferay.portal.kernel.dao.db.DBManagerUtil; import com.liferay.portal.kernel.dao.jdbc.DataAccess; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.model.ResourceConstants; import com.liferay.portal.kernel.model.ResourcePermission; import com.liferay.portal.kernel.security.permission.ResourceActionsUtil; import com.liferay.portal.kernel.service.ResourcePermissionLocalServiceUtil; import com.liferay.portal.kernel.test.rule.AggregateTestRule; import com.liferay.portal.kernel.test.rule.DeleteAfterTestRun; import com.liferay.portal.kernel.test.util.GroupTestUtil; import com.liferay.portal.kernel.test.util.RandomTestUtil; import com.liferay.portal.kernel.test.util.TestPropsValues; import com.liferay.portal.kernel.upgrade.UpgradeException; import com.liferay.portal.kernel.upgrade.UpgradeProcess; import com.liferay.portal.kernel.upgrade.UpgradeStep; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.uuid.PortalUUIDUtil; import com.liferay.portal.test.rule.LiferayIntegrationTestRule; import com.liferay.portal.upgrade.registry.UpgradeStepRegistrator; import com.liferay.registry.Registry; import com.liferay.registry.RegistryUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.Timestamp; import java.util.HashMap; import java.util.Map; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.skyscreamer.jsonassert.JSONAssert; /** * @author Marcellus Tavares * @author InĂ¡cio Nery */ @RunWith(Arquillian.class) public class UpgradeDynamicDataMappingTest { @ClassRule @Rule public static final AggregateTestRule aggregateTestRule = new LiferayIntegrationTestRule(); @Before public void setUp() throws Exception { _group = GroupTestUtil.addGroup(); _timestamp = new Timestamp(System.currentTimeMillis()); setUpClassNameIds(); setUpModelResourceNames(); setUpPrimaryKeys(); setUpUpgradeDynamicDataMapping(); } @After public void tearDown() throws Exception { deleteStructure(_structureId); deleteStructure(_parentStructureId); deleteTemplate(_templateId); deleteContent(_contentId); deleteStorageLink(_storageLinkId); } @Test public void testCreateStructureLayout() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, null, read("ddm-structure-text-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); getDDMFormLayout(_structureId, DDMStructureConstants.VERSION_DEFAULT); } @Test public void testCreateStructureVersion() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, null, read("ddm-structure-text-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); getStructureVersion( _structureId, DDMStructureConstants.VERSION_DEFAULT); } @Test public void testCreateTemplateVersion() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, null, read("ddm-structure-text-field.xsd"), "xml"); addTemplate( _templateId, _structureId, null, read("ddm-template-text-field.ftl"), "ftl", DDMTemplateConstants.TEMPLATE_MODE_CREATE); _upgradeDynamicDataMapping.upgrade(); getTemplateVersion(_templateId, DDMTemplateConstants.VERSION_DEFAULT); } @Test public void testUpgradeExpandoWithLocalized() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-localized.xsd"), "expando"); long classPK = RandomTestUtil.randomLong(); ExpandoTable expandoTable = ExpandoTableLocalServiceUtil.addTable( _group.getCompanyId(), _classNameIdExpandoStorageAdapter, String.valueOf(_structureId)); ExpandoRow expandoRow = ExpandoRowLocalServiceUtil.addRow( expandoTable.getTableId(), classPK); addStorageLink(_storageLinkId, expandoRow.getRowId(), _structureId); ExpandoColumn expandoColumnName = ExpandoColumnLocalServiceUtil.addColumn( expandoTable.getTableId(), "Name", ExpandoColumnConstants.STRING_LOCALIZED); ExpandoValueLocalServiceUtil.addValue( expandoTable.getClassNameId(), expandoTable.getTableId(), expandoColumnName.getColumnId(), classPK, read("expando-localized-field.xsd")); ExpandoColumn expandoColumnFieldsDisplay = ExpandoColumnLocalServiceUtil.addColumn( expandoTable.getTableId(), "_fieldsDisplay", ExpandoColumnConstants.STRING_LOCALIZED); ExpandoValueLocalServiceUtil.addValue( expandoTable.getClassNameId(), expandoTable.getTableId(), expandoColumnFieldsDisplay.getColumnId(), classPK, read("expando-localized-field-display.xsd")); _upgradeDynamicDataMapping.upgrade(); String expectedData = read("ddm-content-localized.json"); String actualData = getContentData(expandoRow.getRowId()); JSONAssert.assertEquals(expectedData, actualData, false); } @Test public void testUpgradeExpandoWithNestedAndRepeatableFields() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-nested-repeatable.xsd"), "expando"); long classPK = RandomTestUtil.randomLong(); ExpandoTable expandoTable = ExpandoTableLocalServiceUtil.addTable( _group.getCompanyId(), _classNameIdExpandoStorageAdapter, String.valueOf(_structureId)); ExpandoRow expandoRow = ExpandoRowLocalServiceUtil.addRow( expandoTable.getTableId(), classPK); addStorageLink(_storageLinkId, expandoRow.getRowId(), _structureId); ExpandoColumn expandoColumnTextNestedUpper = ExpandoColumnLocalServiceUtil.addColumn( expandoTable.getTableId(), "TextNestedUpper", ExpandoColumnConstants.STRING_LOCALIZED); ExpandoValueLocalServiceUtil.addValue( expandoTable.getClassNameId(), expandoTable.getTableId(), expandoColumnTextNestedUpper.getColumnId(), classPK, read("expando-nested-repeatable-field-1.xsd")); ExpandoColumn expandoColumnTextParent = ExpandoColumnLocalServiceUtil.addColumn( expandoTable.getTableId(), "TextParent", ExpandoColumnConstants.STRING_LOCALIZED); ExpandoValueLocalServiceUtil.addValue( expandoTable.getClassNameId(), expandoTable.getTableId(), expandoColumnTextParent.getColumnId(), classPK, read("expando-nested-repeatable-field-2.xsd")); ExpandoColumn expandoColumnTextRepeateable = ExpandoColumnLocalServiceUtil.addColumn( expandoTable.getTableId(), "TextRepeateable", ExpandoColumnConstants.STRING_ARRAY_LOCALIZED); ExpandoValueLocalServiceUtil.addValue( expandoTable.getClassNameId(), expandoTable.getTableId(), expandoColumnTextRepeateable.getColumnId(), classPK, read("expando-nested-repeatable-field-3.xsd")); ExpandoColumn expandoColumnTextNestedBottom = ExpandoColumnLocalServiceUtil.addColumn( expandoTable.getTableId(), "TextNestedBottom", ExpandoColumnConstants.STRING_LOCALIZED); ExpandoValueLocalServiceUtil.addValue( expandoTable.getClassNameId(), expandoTable.getTableId(), expandoColumnTextNestedBottom.getColumnId(), classPK, read("expando-nested-repeatable-field-4.xsd")); ExpandoColumn expandoColumnFieldsDisplay = ExpandoColumnLocalServiceUtil.addColumn( expandoTable.getTableId(), "_fieldsDisplay", ExpandoColumnConstants.STRING_LOCALIZED); ExpandoValueLocalServiceUtil.addValue( expandoTable.getClassNameId(), expandoTable.getTableId(), expandoColumnFieldsDisplay.getColumnId(), classPK, read("expando-nested-repeatable-field-display.xsd")); _upgradeDynamicDataMapping.upgrade(); String expectedData = read("ddm-content-nested-repeatable.json"); String actualData = getContentData(expandoRow.getRowId()); JSONAssert.assertEquals(expectedData, actualData, false); } @Test public void testUpgradeExpandoWithRepeatableFields() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-text-repeatable-field.xsd"), "expando"); long classPK = RandomTestUtil.randomLong(); ExpandoTable expandoTable = ExpandoTableLocalServiceUtil.addTable( _group.getCompanyId(), _classNameIdExpandoStorageAdapter, String.valueOf(_structureId)); ExpandoRow expandoRow = ExpandoRowLocalServiceUtil.addRow( expandoTable.getTableId(), classPK); addStorageLink(_storageLinkId, expandoRow.getRowId(), _structureId); ExpandoColumn expandoColumnTextRepeatable = ExpandoColumnLocalServiceUtil.addColumn( expandoTable.getTableId(), "TextRepeatable", ExpandoColumnConstants.STRING_ARRAY_LOCALIZED); ExpandoValueLocalServiceUtil.addValue( expandoTable.getClassNameId(), expandoTable.getTableId(), expandoColumnTextRepeatable.getColumnId(), classPK, read("expando-value-text-repeatable-field.xsd")); ExpandoColumn expandoColumnFieldsDisplay = ExpandoColumnLocalServiceUtil.addColumn( expandoTable.getTableId(), "_fieldsDisplay", ExpandoColumnConstants.STRING_LOCALIZED); ExpandoValueLocalServiceUtil.addValue( expandoTable.getClassNameId(), expandoTable.getTableId(), expandoColumnFieldsDisplay.getColumnId(), classPK, read("expando-value-text-repeatable-field-display.xsd")); _upgradeDynamicDataMapping.upgrade(); String expectedData = read("ddm-content-text-repeatable-field.json"); String actualData = getContentData(expandoRow.getRowId()); JSONAssert.assertEquals(expectedData, actualData, false); } @Test public void testUpgradeExpandoWithTransientRepeatableParent() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-transient-repeatable-parent.xsd"), "expando"); long classPK = RandomTestUtil.randomLong(); ExpandoTable expandoTable = ExpandoTableLocalServiceUtil.addTable( _group.getCompanyId(), _classNameIdExpandoStorageAdapter, String.valueOf(_structureId)); ExpandoRow expandoRow = ExpandoRowLocalServiceUtil.addRow( expandoTable.getTableId(), classPK); addStorageLink(_storageLinkId, expandoRow.getRowId(), _structureId); ExpandoColumn expandoColumnText = ExpandoColumnLocalServiceUtil.addColumn( expandoTable.getTableId(), "Text", ExpandoColumnConstants.STRING_ARRAY_LOCALIZED); ExpandoValueLocalServiceUtil.addValue( expandoTable.getClassNameId(), expandoTable.getTableId(), expandoColumnText.getColumnId(), classPK, read("expando-transient-repeatable-parent-field.xsd")); ExpandoColumn expandoColumnFieldsDisplay = ExpandoColumnLocalServiceUtil.addColumn( expandoTable.getTableId(), "_fieldsDisplay", ExpandoColumnConstants.STRING_LOCALIZED); ExpandoValueLocalServiceUtil.addValue( expandoTable.getClassNameId(), expandoTable.getTableId(), expandoColumnFieldsDisplay.getColumnId(), classPK, read("expando-transient-repeatable-parent-field-display.xsd")); _upgradeDynamicDataMapping.upgrade(); String expectedData = read( "ddm-content-transient-repeatable-parent.json"); String actualData = getContentData(expandoRow.getRowId()); JSONAssert.assertEquals(expectedData, actualData, false); } @Test public void testUpgradeHierarchyStructures() throws Exception { addStructure( _parentStructureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-parent.xsd"), "xml"); addStructure( _structureId, _parentStructureId, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-child.xsd"), "xml"); long recordSetId = RandomTestUtil.randomLong(); addRecordSet(recordSetId, _structureId); addContent(_contentId, read("ddm-content-hierarchy.xsd")); addStorageLink(_storageLinkId, _contentId, _structureId); long recordId = RandomTestUtil.randomLong(); addRecord(recordId, recordSetId, _contentId); _upgradeDynamicDataMapping.upgrade(); String content = getContentData(_contentId); String expectedContent = read("ddm-content-hierarchy.json"); JSONAssert.assertEquals(expectedContent, content, false); deleteRecord(recordId); deleteRecordSet(recordSetId); } @Test public void testUpgradeStructureLocalized() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-localized.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-localized.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructurePermissions() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-boolean-field.xsd"), "xml"); long resourcePermissionId = RandomTestUtil.randomLong(); addResourcePermission( resourcePermissionId, _structureId, DDMStructure.class.getName()); _upgradeDynamicDataMapping.upgrade(); String expectedResourceName = getStructureModelResourceName( _classNameIdDDLRecordSet); ResourcePermission resourcePermission = ResourcePermissionLocalServiceUtil.getResourcePermission( resourcePermissionId); String actualResourceName = resourcePermission.getName(); Assert.assertEquals(expectedResourceName, actualResourceName); } @Test public void testUpgradeStructureReferencesDueUpdatedStructureFieldName() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-references-field-name.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read( "ddm-structure-references-field-name.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithBooleanField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-boolean-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-boolean-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithDateField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-date-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-date-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithDecimalField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-decimal-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-decimal-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithDocumentLibraryField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-document-library-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read( "ddm-structure-document-library-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithFileUploadField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-file-upload-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read( "ddm-structure-file-upload-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithGeolocationField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-geolocation-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read( "ddm-structure-geolocation-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithHtmlField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-html-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-html-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithImageField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-image-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-image-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithIntegerField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-integer-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-integer-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test(expected = UpgradeException.class) public void testUpgradeStructureWithInvalidFieldNameCharacters1() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-invalid-field-name-characters-1.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); } @Test(expected = UpgradeException.class) public void testUpgradeStructureWithInvalidFieldNameCharacters2() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-invalid-field-name-characters-2.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); } @Test(expected = UpgradeException.class) public void testUpgradeStructureWithInvalidFieldNameCharacters3() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-invalid-field-name-characters-3.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); } @Test(expected = UpgradeException.class) public void testUpgradeStructureWithInvalidFieldNameCharacters4() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-invalid-field-name-characters-4.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); } @Test(expected = UpgradeException.class) public void testUpgradeStructureWithInvalidFieldNameCharacters5() throws Exception { addStructure( _parentStructureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-parent.xsd"), "xml"); addStructure( _structureId, _parentStructureId, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-invalid-field-name-characters-5.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); } @Test public void testUpgradeStructureWithLinkToPageField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-link-to-page-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read( "ddm-structure-link-to-page-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithNestedFields() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-nested-fields.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-nested-fields.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithNumberField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-number-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-number-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithParentStructure() throws Exception { addStructure( _parentStructureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-parent.xsd"), "xml"); addStructure( _structureId, _parentStructureId, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-child.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-parent.json"); String actualDefinition = getStructureDefinition(_parentStructureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); expectedDefinition = read("ddm-structure-child.json"); actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithRadioField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-radio-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-radio-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test(expected = UpgradeException.class) public void testUpgradeStructureWithSameStructure() throws Exception { addStructure( _parentStructureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-parent.xsd"), "xml"); addStructure( _structureId, _parentStructureId, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-parent.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); } @Test public void testUpgradeStructureWithSelectField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-select-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-select-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithSeparatorField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-separator-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-separator-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithTextAreaField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-text-area-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-text-area-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeStructureWithTextField() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-text-field.xsd"), "xml"); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read("ddm-structure-text-field.json"); String actualDefinition = getStructureDefinition(_structureId); JSONAssert.assertEquals(expectedDefinition, actualDefinition, false); } @Test public void testUpgradeTemplateFreemarkerScriptDateFields() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-with-two-date-fields.xsd"), "xml"); addTemplate( _templateId, _structureId, null, read("ddm-template-with-two-date-fields.ftl"), "ftl", DDMTemplateConstants.TEMPLATE_TYPE_DISPLAY); _upgradeDynamicDataMapping.upgrade(); String actualDefinition = getTemplateScript(_templateId); String[] dateFieldNames = new String[] {"date1", "date2"}; StringBundler sb = null; for (String dateFieldName : dateFieldNames) { // Assign statement sb = new StringBundler(5); sb.append("<#assign "); sb.append(dateFieldName); sb.append("_Data = getterUtil.getString("); sb.append(dateFieldName); sb.append(".getData()) />"); Assert.assertTrue(actualDefinition.contains(sb.toString())); // If statement sb = new StringBundler(3); sb.append("<#if validator.isNotNull("); sb.append(dateFieldName); sb.append("_Data)>"); Assert.assertTrue(actualDefinition.contains(sb.toString())); // Date parse statement sb = new StringBundler(5); sb.append("<#assign "); sb.append(dateFieldName); sb.append("_DateObj = dateUtil.parseDate(\"yyyy-MM-dd\", "); sb.append(dateFieldName); sb.append("_Data, locale) />"); Assert.assertTrue(actualDefinition.contains(sb.toString())); } } @Test public void testUpgradeTemplateFreemarkerScriptUTCDateFields() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-date-field.xsd"), "xml"); addTemplate( _templateId, _structureId, null, read("ddm-template-with-utc-date-field.ftl"), "ftl", DDMTemplateConstants.TEMPLATE_TYPE_DISPLAY); _upgradeDynamicDataMapping.upgrade(); String actualDefinition = getTemplateScript(_templateId); String dateFieldName = "date1"; // Date getDate statement StringBundler sb = new StringBundler(4); sb.append("dateUtil.getDate("); sb.append(dateFieldName); sb.append("_DateObj"); sb.append(", \"dd MMM yyyy - HH:mm:ss\", locale)"); Assert.assertTrue(actualDefinition.contains(sb.toString())); } @Test public void testUpgradeTemplatePermissions() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, null, read("ddm-structure-text-field.xsd"), "xml"); addTemplate( _templateId, _structureId, null, read("ddm-template-text-field.ftl"), "ftl", DDMTemplateConstants.TEMPLATE_MODE_CREATE); long resourcePermissionId = RandomTestUtil.randomLong(); addResourcePermission( resourcePermissionId, _templateId, DDMTemplate.class.getName()); _upgradeDynamicDataMapping.upgrade(); String expectedResourceName = getTemplateModelResourceName( _classNameIdDDLRecordSet); ResourcePermission resourcePermission = ResourcePermissionLocalServiceUtil.getResourcePermission( resourcePermissionId); String actualResourceName = resourcePermission.getName(); Assert.assertEquals(expectedResourceName, actualResourceName); } @Test public void testUpgradeTemplateReferencesDueUpdatedStructureFieldName1() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-references-field-name.xsd"), "xml"); addTemplate( _templateId, _structureId, DDMTemplateConstants.VERSION_DEFAULT, read("ddm-template-references-field-name-1.ftl"), "ftl", DDMTemplateConstants.TEMPLATE_TYPE_DISPLAY); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read( "ddm-template-references-valid-field-name-1.ftl"); String actualDefinition = getTemplateScript(_templateId); Assert.assertEquals(expectedDefinition, actualDefinition); } @Test public void testUpgradeTemplateReferencesDueUpdatedStructureFieldName2() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-references-field-name.xsd"), "xml"); addTemplate( _templateId, _structureId, DDMTemplateConstants.VERSION_DEFAULT, read("ddm-template-references-field-name-2.vm"), "ftl", DDMTemplateConstants.TEMPLATE_TYPE_DISPLAY); _upgradeDynamicDataMapping.upgrade(); String expectedDefinition = read( "ddm-template-references-valid-field-name-2.vm"); String actualDefinition = getTemplateScript(_templateId); Assert.assertEquals(expectedDefinition, actualDefinition); } @Test public void testUpgradeTemplateVelocityScriptDateFields() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-with-two-date-fields.xsd"), "xml"); addTemplate( _templateId, _structureId, null, read("ddm-template-with-two-date-fields.vm"), "vm", DDMTemplateConstants.TEMPLATE_TYPE_DISPLAY); _upgradeDynamicDataMapping.upgrade(); String actualDefinition = getTemplateScript(_templateId); String[] dateFieldNames = new String[] {"$date1", "$date2"}; StringBundler sb = null; for (String dateFieldName : dateFieldNames) { // Assign statement sb = new StringBundler(5); sb.append("#set ("); sb.append(dateFieldName); sb.append("_Data = $getterUtil.getString("); sb.append(dateFieldName); sb.append(".getData()))"); Assert.assertTrue(actualDefinition.contains(sb.toString())); // If statement sb = new StringBundler(3); sb.append("#if ($validator.isNotNull("); sb.append(dateFieldName); sb.append("_Data))"); Assert.assertTrue(actualDefinition.contains(sb.toString())); // Date parse statement sb = new StringBundler(5); sb.append("#set ("); sb.append(dateFieldName); sb.append("_DateObj = $dateUtil.parseDate(\"yyyy-MM-dd\", "); sb.append(dateFieldName); sb.append("_Data, $locale))"); Assert.assertTrue(actualDefinition.contains(sb.toString())); } } @Test public void testUpgradeTemplateVelocityScriptDateUTCFields() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-date-field.xsd"), "xml"); addTemplate( _templateId, _structureId, null, read("ddm-template-with-utc-date-field.vm"), "vm", DDMTemplateConstants.TEMPLATE_TYPE_DISPLAY); _upgradeDynamicDataMapping.upgrade(); String actualDefinition = getTemplateScript(_templateId); String dateFieldName = "$date1"; // Date getDate statement StringBundler sb = new StringBundler(4); sb.append("$dateUtil.getDate("); sb.append(dateFieldName); sb.append("_DateObj"); sb.append(", \"dd MMM yyyy - HH:mm:ss\", $locale)"); Assert.assertTrue(actualDefinition.contains(sb.toString())); } @Test public void testUpgradeXMLStorageAdapterWithNestedAndRepeatableFields() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-nested-repeatable.xsd"), "xml"); addContent(_contentId, read("ddm-content-nested-repeatable.xsd")); addStorageLink(_storageLinkId, _contentId, _structureId); _upgradeDynamicDataMapping.upgrade(); String expectedData = read("ddm-content-nested-repeatable.json"); String actualData = getContentData(_contentId); JSONAssert.assertEquals(expectedData, actualData, false); } @Test public void testUpgradeXMLStorageAdapterWithRepeatableFields() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-text-repeatable-field.xsd"), "xml"); addContent(_contentId, read("ddm-content-text-repeatable-field.xsd")); addStorageLink(_storageLinkId, _contentId, _structureId); _upgradeDynamicDataMapping.upgrade(); String expectedData = read("ddm-content-text-repeatable-field.json"); String actualData = getContentData(_contentId); JSONAssert.assertEquals(expectedData, actualData, false); } @Test public void testUpgradeXMLStorageAdapterWithSimpleFields() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-text-field.xsd"), "xml"); addContent(_contentId, read("ddm-content-text-field.xsd")); addStorageLink(_storageLinkId, _contentId, _structureId); _upgradeDynamicDataMapping.upgrade(); String expectedData = read("ddm-content-text-field.json"); String actualData = getContentData(_contentId); JSONAssert.assertEquals(expectedData, actualData, false); } @Test public void testUpgradeXMLStorageAdapterWithTransientRepeatableParent() throws Exception { addStructure( _structureId, DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, DDMStructureConstants.VERSION_DEFAULT, read("ddm-structure-transient-repeatable-parent.xsd"), "xml"); addContent( _contentId, read("ddm-content-transient-repeatable-parent.xsd")); addStorageLink(_storageLinkId, _contentId, _structureId); _upgradeDynamicDataMapping.upgrade(); String expectedData = read( "ddm-content-transient-repeatable-parent.json"); String actualData = getContentData(_contentId); JSONAssert.assertEquals(expectedData, actualData, false); } protected void addContent(long contentId, String data) throws Exception { StringBundler sb = new StringBundler(4); sb.append("insert into DDMContent (uuid_, contentId, groupId, "); sb.append("companyId, userId, userName, createDate, modifiedDate, "); sb.append("name, description, data_) values (?, ?, ?, ?, ?, ?, ?, ?, "); sb.append("?, ?, ?)"); String sql = sb.toString(); try (Connection con = DataAccess.getUpgradeOptimizedConnection(); PreparedStatement ps = con.prepareStatement(sql)) { ps.setString(1, PortalUUIDUtil.generate()); ps.setLong(2, contentId); ps.setLong(3, _group.getGroupId()); ps.setLong(4, _group.getCompanyId()); ps.setLong(5, TestPropsValues.getUserId()); ps.setString(6, null); ps.setTimestamp(7, _timestamp); ps.setTimestamp(8, _timestamp); ps.setString(9, DDMStorageLink.class.getName()); ps.setString(10, StringPool.BLANK); ps.setString(11, data); ps.executeUpdate(); } } protected void addRecord(long recordId, long recordSetId, long storageId) throws Exception { StringBundler sb = new StringBundler(5); sb.append("insert into DDLRecord (uuid_, recordId, groupId, "); sb.append("companyId, userId, userName, versionUserId, "); sb.append("versionUserName, createDate, modifiedDate, "); sb.append("DDMStorageId, recordSetId, version, displayIndex) "); sb.append("values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "); String sql = sb.toString(); try (Connection con = DataAccess.getUpgradeOptimizedConnection(); PreparedStatement ps = con.prepareStatement(sql)) { ps.setString(1, PortalUUIDUtil.generate()); ps.setLong(2, recordId); ps.setLong(3, _group.getGroupId()); ps.setLong(4, _group.getCompanyId()); ps.setLong(5, TestPropsValues.getUserId()); ps.setString(6, null); ps.setLong(7, TestPropsValues.getUserId()); ps.setString(8, null); ps.setTimestamp(9, _timestamp); ps.setTimestamp(10, _timestamp); ps.setLong(11, storageId); ps.setLong(12, recordSetId); ps.setString(13, "1.0"); ps.setInt(14, 0); ps.executeUpdate(); } long recordVersionId = RandomTestUtil.randomLong(); addRecordVersion(recordVersionId, recordId, recordSetId, storageId); } protected void addRecordSet(long recordSetId, long structureId) throws Exception { StringBundler sb = new StringBundler(5); sb.append("insert into DDLRecordSet (uuid_, recordSetId, groupId, "); sb.append("companyId, userId, userName, createDate, modifiedDate, "); sb.append("DDMStructureId, recordSetKey, name, description, "); sb.append("minDisplayRows, scope) "); sb.append("values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "); String sql = sb.toString(); try (Connection con = DataAccess.getUpgradeOptimizedConnection(); PreparedStatement ps = con.prepareStatement(sql)) { ps.setString(1, PortalUUIDUtil.generate()); ps.setLong(2, recordSetId); ps.setLong(3, _group.getGroupId()); ps.setLong(4, _group.getCompanyId()); ps.setLong(5, TestPropsValues.getUserId()); ps.setString(6, null); ps.setTimestamp(7, _timestamp); ps.setTimestamp(8, _timestamp); ps.setLong(9, structureId); ps.setString(10, null); ps.setString(11, StringUtil.randomString()); ps.setString(12, StringPool.BLANK); ps.setInt(13, 10); ps.setInt(14, 0); ps.executeUpdate(); } } protected void addRecordVersion( long recordVersionId, long recordId, long recordSetId, long storageId) throws Exception { StringBundler sb = new StringBundler(5); sb.append("insert into DDLRecordVersion (recordVersionId, groupId, "); sb.append("companyId, userId, userName, createDate, DDMStorageId, "); sb.append("recordSetId, recordId, version, displayIndex, status, "); sb.append("statusByUserId, statusByUserName, statusDate) "); sb.append("values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "); String sql = sb.toString(); try (Connection con = DataAccess.getUpgradeOptimizedConnection(); PreparedStatement ps = con.prepareStatement(sql)) { ps.setLong(1, recordVersionId); ps.setLong(2, _group.getGroupId()); ps.setLong(3, _group.getCompanyId()); ps.setLong(4, TestPropsValues.getUserId()); ps.setString(5, null); ps.setTimestamp(6, _timestamp); ps.setLong(7, storageId); ps.setLong(8, recordSetId); ps.setLong(9, recordId); ps.setString(10, "1.0"); ps.setInt(11, 0); ps.setInt(12, 0); ps.setLong(13, TestPropsValues.getUserId()); ps.setString(14, null); ps.setTimestamp(15, _timestamp); ps.executeUpdate(); } } protected void addResourcePermission( long resourcePermissionId, long structureId, String name) throws Exception { StringBundler sb = new StringBundler(4); sb.append("insert into ResourcePermission (mvccVersion, "); sb.append("resourcePermissionId, companyId, name, scope, primKey, "); sb.append("primKeyId, roleId, ownerId, actionIds ) values (?, ?, ?, "); sb.append("?, ?, ?, ?, ?, ?, ?)"); String sql = sb.toString(); try (Connection con = DataAccess.getUpgradeOptimizedConnection(); PreparedStatement ps = con.prepareStatement(sql)) { ps.setLong(1, 0); ps.setLong(2, resourcePermissionId); ps.setLong(3, _group.getCompanyId()); ps.setString(4, name); ps.setInt(5, ResourceConstants.SCOPE_INDIVIDUAL); ps.setString(6, String.valueOf(structureId)); ps.setLong(7, structureId); ps.setLong(8, RandomTestUtil.randomLong()); ps.setLong(9, TestPropsValues.getUserId()); ps.setLong(10, 1); ps.executeUpdate(); } } protected void addStorageLink( long storageLinkId, long classPK, long structureId) throws Exception { StringBundler sb = new StringBundler(2); sb.append("insert into DDMStorageLink (storageLinkId, companyId, "); sb.append("classNameId, classPK, structureId) values (?, ?, ?, ?, ?)"); String sql = sb.toString(); try (Connection con = DataAccess.getUpgradeOptimizedConnection(); PreparedStatement ps = con.prepareStatement(sql)) { ps.setLong(1, storageLinkId); ps.setLong(2, _group.getCompanyId()); ps.setLong(3, _classNameIdDDMContent); ps.setLong(4, classPK); ps.setLong(5, structureId); ps.executeUpdate(); } } protected void addStructure( long structureId, long parentStructureId, String version, String definition, String storageType) throws Exception { StringBundler sb = new StringBundler(7); sb.append("insert into DDMStructure (uuid_, structureId, groupId, "); sb.append("companyId, userId, userName, versionUserId, "); sb.append("versionUserName, createDate, modifiedDate, "); sb.append("parentStructureId, classNameId, structureKey, version, "); sb.append("name, description, definition, storageType, type_) "); sb.append("values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, "); sb.append("?, ?, ?)"); String sql = sb.toString(); try (Connection con = DataAccess.getUpgradeOptimizedConnection(); PreparedStatement ps = con.prepareStatement(sql)) { ps.setString(1, PortalUUIDUtil.generate()); ps.setLong(2, structureId); ps.setLong(3, _group.getGroupId()); ps.setLong(4, _group.getCompanyId()); ps.setLong(5, TestPropsValues.getUserId()); ps.setString(6, null); ps.setLong(7, TestPropsValues.getUserId()); ps.setString(8, null); ps.setTimestamp(9, _timestamp); ps.setTimestamp(10, _timestamp); ps.setLong(11, parentStructureId); ps.setLong(12, _classNameIdDDLRecordSet); ps.setString(13, StringUtil.randomString()); ps.setString(14, version); ps.setString(15, StringUtil.randomString()); ps.setString(16, StringPool.BLANK); ps.setString(17, definition); ps.setString(18, storageType); ps.setInt(19, DDMStructureConstants.TYPE_DEFAULT); ps.executeUpdate(); } } protected void addTemplate( Long templateId, long structureId, String version, String script, String language, String type) throws Exception { StringBundler sb = new StringBundler(6); sb.append("insert into DDMTemplate (uuid_, templateId, groupId, "); sb.append("companyId, userId, userName, versionUserId, "); sb.append("versionUserName, createDate, modifiedDate, classNameId, "); sb.append("classPK, resourceClassNameId, templateKey, version, name, "); sb.append("mode_, language, script, type_) values (?, ?, ?, ?, ?, ?, "); sb.append("?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); String sql = sb.toString(); try (Connection con = DataAccess.getUpgradeOptimizedConnection(); PreparedStatement ps = con.prepareStatement(sql)) { ps.setString(1, PortalUUIDUtil.generate()); ps.setLong(2, templateId); ps.setLong(3, _group.getGroupId()); ps.setLong(4, _group.getCompanyId()); ps.setLong(5, TestPropsValues.getUserId()); ps.setString(6, null); ps.setLong(7, TestPropsValues.getUserId()); ps.setString(8, null); ps.setTimestamp(9, _timestamp); ps.setTimestamp(10, _timestamp); ps.setLong(11, _classNameIdDDMStructure); ps.setLong(12, structureId); ps.setLong(13, _classNameIdDDLRecordSet); ps.setString(14, StringUtil.randomString()); ps.setString(15, version); ps.setString(16, StringUtil.randomString()); ps.setString(17, DDMTemplateConstants.TEMPLATE_MODE_CREATE); ps.setString(18, language); ps.setString(19, script); ps.setString(20, type); ps.executeUpdate(); } } protected void deleteContent(long contentId) throws Exception { DB db = DBManagerUtil.getDB(); db.runSQL("delete from DDMContent where contentId = " + contentId); } protected void deleteRecord(long recordId) throws Exception { DB db = DBManagerUtil.getDB(); db.runSQL("delete from DDLRecordVersion where recordId = " + recordId); db.runSQL("delete from DDLRecord where recordId = " + recordId); } protected void deleteRecordSet(long recordSetId) throws Exception { DB db = DBManagerUtil.getDB(); db.runSQL( "delete from DDLRecordSet where recordSetId = " + recordSetId); } protected void deleteStorageLink(long storageLinkId) throws Exception { DB db = DBManagerUtil.getDB(); db.runSQL( "delete from DDMStorageLink where storageLinkId = " + storageLinkId); } protected void deleteStructure(long structureId) throws Exception { DB db = DBManagerUtil.getDB(); db.runSQL( "delete from DDMStructure where structureId = " + structureId); } protected void deleteTemplate(long templateId) throws Exception { DB db = DBManagerUtil.getDB(); db.runSQL("delete from DDMTemplate where templateId = " + templateId); } protected String getBasePath() { return "com/liferay/dynamic/data/mapping/dependencies/upgrade/v1_0_0/"; } protected String getContentData(long contentId) throws Exception { DDMContent content = DDMContentLocalServiceUtil.getContent(contentId); return content.getData(); } protected DDMFormLayout getDDMFormLayout(long structureId, String version) throws Exception { DDMStructureVersion structureVersion = getStructureVersion( structureId, version); DDMStructureLayout ddmStructureLayout = DDMStructureLayoutLocalServiceUtil. getStructureLayoutByStructureVersionId( structureVersion.getStructureVersionId()); return ddmStructureLayout.getDDMFormLayout(); } protected String getStructureDefinition(long structureId) throws Exception { DDMStructure structure = DDMStructureLocalServiceUtil.getStructure( structureId); return structure.getDefinition(); } protected String getStructureModelResourceName(long classNameId) throws UpgradeException { String className = PortalUtil.getClassName(classNameId); String structureModelResourceName = _structureModelResourceNames.get( className); if (structureModelResourceName == null) { throw new UpgradeException( "Model " + className + " does not support dynamic data " + "mapping structure permission checking"); } return structureModelResourceName; } protected DDMStructureVersion getStructureVersion( long structureId, String version) throws Exception { return DDMStructureVersionLocalServiceUtil.getStructureVersion( structureId, version); } protected String getTemplateModelResourceName(long classNameId) throws UpgradeException { String className = PortalUtil.getClassName(classNameId); String templateModelResourceName = _templateModelResourceNames.get( className); if (templateModelResourceName == null) { throw new UpgradeException( "Model " + className + " does not support dynamic data " + "mapping template permission checking"); } return templateModelResourceName; } protected String getTemplateScript(long templateId) throws Exception { DDMTemplate template = DDMTemplateLocalServiceUtil.getTemplate( templateId); return template.getScript(); } protected DDMTemplateVersion getTemplateVersion( long templateId, String version) throws Exception { return DDMTemplateVersionLocalServiceUtil.getTemplateVersion( templateId, version); } protected Map<Class<?>, UpgradeStep> mapByClass( UpgradeStep[] upgradeSteps) { Map<Class<?>, UpgradeStep> upgradeStepsMap = new HashMap<>(); for (UpgradeStep upgradeStep : upgradeSteps) { upgradeStepsMap.put(upgradeStep.getClass(), upgradeStep); } return upgradeStepsMap; } protected String read(String fileName) throws Exception { Class<?> clazz = getClass(); return StringUtil.read( clazz.getClassLoader(), getBasePath() + fileName); } protected void setUpClassNameIds() { _classNameIdDDLRecordSet = PortalUtil.getClassNameId( "com.liferay.portlet.dynamicdatalists.model.DDLRecordSet"); _classNameIdDDMStructure = PortalUtil.getClassNameId( "com.liferay.dynamic.data.mapping.model.DDMStructure"); _classNameIdDDMContent = PortalUtil.getClassNameId( "com.liferay.dynamic.data.mapping.model.DDMContent"); _classNameIdExpandoStorageAdapter = PortalUtil.getClassNameId( "com.liferay.portlet.dynamicdatamapping.storage." + "ExpandoStorageAdapter"); } protected void setUpModelResourceNames() { _structureModelResourceNames.put( "com.liferay.document.library.kernel.model.DLFileEntryMetadata", ResourceActionsUtil.getCompositeModelName( "com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata", DDMStructure.class.getName())); _structureModelResourceNames.put( "com.liferay.document.library.kernel.util.RawMetadataProcessor", DDMStructure.class.getName()); _structureModelResourceNames.put( "com.liferay.portlet.dynamicdatalists.model.DDLRecordSet", ResourceActionsUtil.getCompositeModelName( "com.liferay.dynamic.data.lists.model.DDLRecordSet", DDMStructure.class.getName())); _structureModelResourceNames.put( "com.liferay.portlet.journal.model.JournalArticle", ResourceActionsUtil.getCompositeModelName( "com.liferay.journal.model.JournalArticle", DDMStructure.class.getName())); _templateModelResourceNames.put( "com.liferay.portlet.display.template.PortletDisplayTemplate", DDMTemplate.class.getName()); _templateModelResourceNames.put( "com.liferay.portlet.dynamicdatalists.model.DDLRecordSet", ResourceActionsUtil.getCompositeModelName( "com.liferay.dynamic.data.lists.model.DDLRecordSet", DDMTemplate.class.getName())); _templateModelResourceNames.put( "com.liferay.portlet.journal.model.JournalArticle", ResourceActionsUtil.getCompositeModelName( "com.liferay.journal.model.JournalArticle", DDMTemplate.class.getName())); } protected void setUpPrimaryKeys() { _structureId = RandomTestUtil.randomLong(); _parentStructureId = RandomTestUtil.randomLong(); _templateId = RandomTestUtil.randomLong(); _storageLinkId = RandomTestUtil.randomLong(); _contentId = RandomTestUtil.randomLong(); } protected void setUpUpgradeDynamicDataMapping() { Registry registry = RegistryUtil.getRegistry(); UpgradeStepRegistrator upgradeStepRegistror = registry.getService( "com.liferay.dynamic.data.mapping.internal.upgrade." + "DDMServiceUpgrade"); upgradeStepRegistror.register( new UpgradeStepRegistrator.Registry() { @Override public void register( String bundleSymbolicName, String fromSchemaVersionString, String toSchemaVersionString, UpgradeStep... upgradeSteps) { for (UpgradeStep upgradeStep : upgradeSteps) { Class<?> clazz = upgradeStep.getClass(); String className = clazz.getName(); if (className.contains("UpgradeDynamicDataMapping")) { _upgradeDynamicDataMapping = (UpgradeProcess)upgradeStep; } } } }); } private long _classNameIdDDLRecordSet; private long _classNameIdDDMContent; private long _classNameIdDDMStructure; private long _classNameIdExpandoStorageAdapter; private long _contentId; @DeleteAfterTestRun private Group _group; private long _parentStructureId; private long _storageLinkId; private long _structureId; private final Map<String, String> _structureModelResourceNames = new HashMap<>(); private long _templateId; private final Map<String, String> _templateModelResourceNames = new HashMap<>(); private Timestamp _timestamp; private UpgradeProcess _upgradeDynamicDataMapping; }