/**
* 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.service.test;
import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian;
import com.liferay.dynamic.data.mapping.exception.InvalidParentStructureException;
import com.liferay.dynamic.data.mapping.exception.RequiredStructureException;
import com.liferay.dynamic.data.mapping.exception.StructureDefinitionException;
import com.liferay.dynamic.data.mapping.exception.StructureDuplicateElementException;
import com.liferay.dynamic.data.mapping.exception.StructureDuplicateStructureKeyException;
import com.liferay.dynamic.data.mapping.exception.StructureNameException;
import com.liferay.dynamic.data.mapping.model.DDMDataProviderInstance;
import com.liferay.dynamic.data.mapping.model.DDMDataProviderInstanceLink;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.DDMFormRule;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.model.DDMStructureConstants;
import com.liferay.dynamic.data.mapping.model.DDMTemplate;
import com.liferay.dynamic.data.mapping.service.DDMDataProviderInstanceLinkLocalServiceUtil;
import com.liferay.dynamic.data.mapping.service.DDMDataProviderInstanceLocalServiceUtil;
import com.liferay.dynamic.data.mapping.service.DDMStructureLocalServiceUtil;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
import com.liferay.dynamic.data.mapping.storage.StorageType;
import com.liferay.dynamic.data.mapping.test.util.DDMFormTestUtil;
import com.liferay.dynamic.data.mapping.test.util.DDMFormValuesTestUtil;
import com.liferay.dynamic.data.mapping.util.DDMUtil;
import com.liferay.dynamic.data.mapping.util.comparator.StructureIdComparator;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.test.rule.AggregateTestRule;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.test.util.ServiceContextTestUtil;
import com.liferay.portal.kernel.test.util.TestPropsValues;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.skyscreamer.jsonassert.JSONAssert;
/**
* @author Eduardo Garcia
*/
@RunWith(Arquillian.class)
public class DDMStructureLocalServiceTest extends BaseDDMServiceTestCase {
@ClassRule
@Rule
public static final AggregateTestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@BeforeClass
public static void setUpClass() {
_classNameId = PortalUtil.getClassNameId(DDL_RECORD_SET_CLASS_NAME);
}
@Test(expected = StructureDefinitionException.class)
public void testAddStructureMissingRequiredElementAttribute()
throws Exception {
addStructure(
_classNameId, null, "Test Structure",
read("ddm-structure-required-element-attribute.xsd"),
StorageType.JSON.getValue(), DDMStructureConstants.TYPE_DEFAULT);
}
@Test(expected = StructureDuplicateElementException.class)
public void testAddStructureWithDuplicateElementName() throws Exception {
addStructure(
_classNameId, null, "Test Structure",
read("ddm-structure-duplicate-element-name.xsd"),
StorageType.JSON.getValue(), DDMStructureConstants.TYPE_DEFAULT);
}
@Test(expected = StructureDuplicateElementException.class)
public void testAddStructureWithDuplicateElementNameInParent()
throws Exception {
DDMStructure parentStructure = addStructure(
_classNameId, null, "Test Parent Structure",
read("ddm-structure-duplicate-element-name.xsd"),
StorageType.JSON.getValue(), DDMStructureConstants.TYPE_DEFAULT);
addStructure(
parentStructure.getStructureId(), _classNameId, null,
"Test Structure", read("ddm-structure-duplicate-element-name.xsd"),
StorageType.JSON.getValue(), DDMStructureConstants.TYPE_DEFAULT);
}
@Test(expected = StructureDuplicateStructureKeyException.class)
public void testAddStructureWithDuplicateKey() throws Exception {
String structureKey = RandomTestUtil.randomString();
addStructure(
_classNameId, structureKey, "Test Structure 1",
read("test-structure.xsd"), StorageType.JSON.getValue(),
DDMStructureConstants.TYPE_DEFAULT);
addStructure(
_classNameId, structureKey, "Test Structure 2",
read("test-structure.xsd"), StorageType.JSON.getValue(),
DDMStructureConstants.TYPE_DEFAULT);
}
@Test(expected = StructureDefinitionException.class)
public void testAddStructureWithInvalidElementAttribute() throws Exception {
addStructure(
_classNameId, null, "Test Structure",
read("ddm-structure-invalid-element-attribute.xsd"),
StorageType.JSON.getValue(), DDMStructureConstants.TYPE_DEFAULT);
}
@Test(expected = StructureDefinitionException.class)
public void testAddStructureWithoutDefinition() throws Exception {
addStructure(
_classNameId, null, "Test Structure", StringPool.BLANK,
StorageType.JSON.getValue(), DDMStructureConstants.TYPE_DEFAULT);
}
@Test(expected = StructureNameException.class)
public void testAddStructureWithoutName() throws Exception {
addStructure(
_classNameId, null, StringPool.BLANK, read("test-structure.xsd"),
StorageType.JSON.getValue(), DDMStructureConstants.TYPE_DEFAULT);
}
@Test
public void testAddStructureWithReferencedDataProviderInstance1()
throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
DDMFormField ddmFormField = new DDMFormField("Field", "select");
ddmFormField.setDataType("string");
long ddmDataProviderInstanceId = RandomTestUtil.randomLong();
ddmFormField.setProperty("dataSourceType", "data-provider");
ddmFormField.setProperty(
"ddmDataProviderInstanceId", ddmDataProviderInstanceId);
ddmForm.addDDMFormField(ddmFormField);
DDMStructure structure = ddmStructureTestHelper.addStructure(
ddmForm, StorageType.JSON.getValue());
DDMDataProviderInstanceLink dataProviderInstanceLink =
DDMDataProviderInstanceLinkLocalServiceUtil.
fetchDataProviderInstanceLink(
ddmDataProviderInstanceId, structure.getStructureId());
Assert.assertNotNull(dataProviderInstanceLink);
DDMStructureLocalServiceUtil.deleteStructure(structure);
dataProviderInstanceLink =
DDMDataProviderInstanceLinkLocalServiceUtil.
fetchDataProviderInstanceLink(
ddmDataProviderInstanceId, structure.getStructureId());
Assert.assertNull(dataProviderInstanceLink);
}
@Test
public void testAddStructureWithReferencedDataProviderInstance2()
throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm("Field1");
DDMDataProviderInstance dataProviderInstance1 =
createDDMDataProviderInstance();
List<String> actions = new ArrayList<>();
String action = String.format(
"call('%s','','')", dataProviderInstance1.getUuid());
actions.add(action);
DDMFormRule ddmFormRule = new DDMFormRule("TRUE", actions);
ddmForm.addDDMFormRule(ddmFormRule);
DDMStructure structure = ddmStructureTestHelper.addStructure(
ddmForm, StorageType.JSON.getValue());
List<DDMDataProviderInstanceLink> dataProviderInstanceLinks =
DDMDataProviderInstanceLinkLocalServiceUtil.
getDataProviderInstanceLinks(structure.getStructureId());
Assert.assertEquals(
dataProviderInstanceLinks.toString(), 1,
dataProviderInstanceLinks.size());
}
@Test
public void testCopyStructure() throws Exception {
DDMStructure structure = addStructure(_classNameId, "Test Structure");
DDMStructure copyStructure = copyStructure(structure);
Assert.assertEquals(structure.getGroupId(), copyStructure.getGroupId());
JSONAssert.assertEquals(
structure.getDefinition(), copyStructure.getDefinition(), false);
Assert.assertEquals(
structure.getStorageType(), copyStructure.getStorageType());
Assert.assertEquals(structure.getType(), copyStructure.getType());
}
@Test
public void testDeleteStructure() throws Exception {
DDMStructure structure = addStructure(_classNameId, "Test Structure");
DDMStructureLocalServiceUtil.deleteStructure(
structure.getStructureId());
Assert.assertNull(
DDMStructureLocalServiceUtil.fetchDDMStructure(
structure.getStructureId()));
}
@Test(
expected =
RequiredStructureException.
MustNotDeleteStructureReferencedByTemplates.class
)
public void testDeleteStructureReferencedByTemplates() throws Exception {
DDMStructure structure = addStructure(_classNameId, "Test Structure");
addDisplayTemplate(
structure.getPrimaryKey(), "Test Display Template",
WorkflowConstants.STATUS_APPROVED);
addFormTemplate(
structure.getPrimaryKey(), "Test Form Template",
WorkflowConstants.STATUS_APPROVED);
DDMStructureLocalServiceUtil.deleteStructure(
structure.getStructureId());
}
@Test
public void testFetchStructure() throws Exception {
DDMStructure structure = addStructure(_classNameId, "Test Structure");
Assert.assertNotNull(
DDMStructureLocalServiceUtil.fetchStructure(
structure.getGroupId(), _classNameId,
structure.getStructureKey()));
}
@Test
public void testGetFullHierarchyDDMFormFieldsMap() throws Exception {
DDMForm parentDDMForm = DDMFormTestUtil.createDDMForm();
DDMFormField nameDDMFormField = DDMFormTestUtil.createTextDDMFormField(
"Name", true, false, false);
nameDDMFormField.addNestedDDMFormField(
DDMFormTestUtil.createTextDDMFormField("Age", true, false, false));
parentDDMForm.addDDMFormField(nameDDMFormField);
DDMStructure parentStructure = ddmStructureTestHelper.addStructure(
parentDDMForm, StorageType.JSON.toString());
DDMForm childDDMForm = DDMFormTestUtil.createDDMForm();
DDMFormField descriptionDDMFormField =
DDMFormTestUtil.createTextDDMFormField(
"Description", true, false, false);
childDDMForm.addDDMFormField(descriptionDDMFormField);
DDMStructure childStructure = ddmStructureTestHelper.addStructure(
parentStructure.getStructureId(), parentStructure.getClassNameId(),
null, "Child Structure", StringPool.BLANK, childDDMForm,
DDMUtil.getDefaultDDMFormLayout(childDDMForm),
StorageType.JSON.toString(), DDMStructureConstants.TYPE_DEFAULT);
Map<String, DDMFormField> childFullHierarchyDDMFormFieldsMap =
childStructure.getFullHierarchyDDMFormFieldsMap(true);
Assert.assertTrue(
childFullHierarchyDDMFormFieldsMap.containsKey("Name"));
Assert.assertTrue(
childFullHierarchyDDMFormFieldsMap.containsKey("Age"));
Assert.assertTrue(
childFullHierarchyDDMFormFieldsMap.containsKey("Description"));
// Update parent DDM form to have just the Name field
DDMForm parentDDMFormUpdated = DDMFormTestUtil.createDDMForm();
parentDDMFormUpdated.addDDMFormField(nameDDMFormField);
parentStructure.setDDMForm(parentDDMFormUpdated);
DDMStructureLocalServiceUtil.updateDDMStructure(parentStructure);
// Assert that the child DDM form has the full hierarchy updated
childStructure = DDMStructureLocalServiceUtil.getStructure(
childStructure.getStructureId());
childFullHierarchyDDMFormFieldsMap =
childStructure.getFullHierarchyDDMFormFieldsMap(true);
Assert.assertTrue(
childFullHierarchyDDMFormFieldsMap.containsKey("Name"));
Assert.assertTrue(
childFullHierarchyDDMFormFieldsMap.containsKey("Description"));
}
@Test
public void testGetStructures() throws Exception {
DDMStructure structure = addStructure(_classNameId, "Test Structure");
List<DDMStructure> structures =
DDMStructureLocalServiceUtil.getStructures(structure.getGroupId());
Assert.assertTrue(structures.contains(structure));
}
@Test
public void testGetTemplates() throws Exception {
DDMStructure structure = addStructure(_classNameId, "Test Structure");
addDisplayTemplate(
structure.getStructureId(), "Test Display Template",
WorkflowConstants.STATUS_APPROVED);
addFormTemplate(
structure.getStructureId(), "Test Form Template",
WorkflowConstants.STATUS_APPROVED);
List<DDMTemplate> templates = structure.getTemplates();
Assert.assertEquals(templates.toString(), 2, templates.size());
}
@Test
public void testSearchByAnyStatus() throws Exception {
addStructure(
0, _classNameId, null, StringUtil.randomString(), StringPool.BLANK,
read("test-structure.xsd"), StorageType.JSON.getValue(),
DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED);
addStructure(
0, _classNameId, null, StringUtil.randomString(), StringPool.BLANK,
read("test-structure.xsd"), StorageType.JSON.getValue(),
DDMStructureConstants.TYPE_DEFAULT, WorkflowConstants.STATUS_DRAFT);
List<DDMStructure> structures = DDMStructureLocalServiceUtil.search(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, null, null, null, DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_ANY, true, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, null);
Assert.assertEquals(structures.toString(), 2, structures.size());
}
@Test
public void testSearchByClassNameId() throws Exception {
addStructure(_classNameId, StringUtil.randomString());
addStructure(_classNameId, StringUtil.randomString());
addStructure(_classNameId, StringUtil.randomString());
List<DDMStructure> structures = DDMStructureLocalServiceUtil.search(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, null, null, null, DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED, true, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, null);
Assert.assertEquals(structures.toString(), 3, structures.size());
}
@Test
public void testSearchByDescription() throws Exception {
addStructure(_classNameId, StringUtil.randomString(), "Contact");
addStructure(_classNameId, StringUtil.randomString(), "Event");
List<DDMStructure> structures = DDMStructureLocalServiceUtil.search(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, null, "Contact", null,
DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED, true, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, null);
DDMStructure structure = structures.get(0);
Assert.assertEquals(
"Contact", structure.getDescription(group.getDefaultLanguageId()));
}
@Test
public void testSearchByDraftStatus() throws Exception {
addStructure(
0, _classNameId, null, StringUtil.randomString(), StringPool.BLANK,
read("test-structure.xsd"), StorageType.JSON.getValue(),
DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED);
addStructure(
0, _classNameId, null, StringUtil.randomString(), StringPool.BLANK,
read("test-structure.xsd"), StorageType.JSON.getValue(),
DDMStructureConstants.TYPE_DEFAULT, WorkflowConstants.STATUS_DRAFT);
List<DDMStructure> structures = DDMStructureLocalServiceUtil.search(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, null, null, null, DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_DRAFT, true, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, null);
Assert.assertEquals(structures.toString(), 1, structures.size());
}
@Test
public void testSearchByKeywords1() throws Exception {
DDMStructure structure = addStructure(_classNameId, "Events");
addStructure(_classNameId, "Event");
List<DDMStructure> structures = DDMStructureLocalServiceUtil.search(
structure.getCompanyId(), new long[] {structure.getGroupId()},
structure.getClassNameId(), "Event",
WorkflowConstants.STATUS_APPROVED, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, new StructureIdComparator(true));
Assert.assertEquals("Events", getStructureName(structures.get(0)));
Assert.assertEquals("Event", getStructureName(structures.get(1)));
}
@Test
public void testSearchByKeywords2() throws Exception {
DDMStructure structure = addStructure(_classNameId, "To Do");
addStructure(_classNameId, "To Doing");
List<DDMStructure> structures = DDMStructureLocalServiceUtil.search(
structure.getCompanyId(), new long[] {structure.getGroupId()},
structure.getClassNameId(), "To Do",
WorkflowConstants.STATUS_APPROVED, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, new StructureIdComparator(true));
Assert.assertEquals(structures.toString(), 2, structures.size());
Assert.assertEquals("To Do", getStructureName(structures.get(0)));
Assert.assertEquals("To Doing", getStructureName(structures.get(1)));
}
@Test
public void testSearchByName() throws Exception {
addStructure(_classNameId, "Contact");
addStructure(_classNameId, "Event");
List<DDMStructure> structures = DDMStructureLocalServiceUtil.search(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, "Contact", null, null,
DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED, true, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, null);
Assert.assertEquals("Contact", getStructureName(structures.get(0)));
}
@Test
public void testSearchByNameAndDescription() throws Exception {
addStructure(_classNameId, "Contact", "Contact");
addStructure(_classNameId, "Event", "Event");
List<DDMStructure> structures = DDMStructureLocalServiceUtil.search(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, "Contact", "Event", null,
DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED, true, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, null);
Assert.assertEquals(structures.toString(), 0, structures.size());
}
@Test
public void testSearchByNameOrDescription() throws Exception {
addStructure(_classNameId, "Contact", "Contact");
addStructure(_classNameId, "Event", "Event");
List<DDMStructure> structures = DDMStructureLocalServiceUtil.search(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, "Contact", "Event", null,
DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED, false, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, new StructureIdComparator(true));
Assert.assertEquals("Contact", getStructureName(structures.get(0)));
Assert.assertEquals("Event", getStructureName(structures.get(1)));
}
@Test
public void testSearchByNonExistingStorageType() throws Exception {
addStructure(_classNameId, StringUtil.randomString());
List<DDMStructure> structures = DDMStructureLocalServiceUtil.search(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, null, null, "NonExistingStorageType",
DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED, true, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, null);
Assert.assertEquals(structures.toString(), 0, structures.size());
}
@Test
public void testSearchByStorageType() throws Exception {
addStructure(_classNameId, StringUtil.randomString());
List<DDMStructure> structures = DDMStructureLocalServiceUtil.search(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, null, null, StorageType.JSON.toString(),
DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED, true, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, null);
Assert.assertEquals(structures.toString(), 1, structures.size());
}
@Test
public void testSearchByType() throws Exception {
addStructure(
0, _classNameId, null, StringUtil.randomString(), StringPool.BLANK,
read("test-structure.xsd"), StorageType.JSON.getValue(),
DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED);
addStructure(
0, _classNameId, null, StringUtil.randomString(), StringPool.BLANK,
read("test-structure.xsd"), StorageType.JSON.getValue(),
DDMStructureConstants.TYPE_FRAGMENT,
WorkflowConstants.STATUS_APPROVED);
List<DDMStructure> structures = DDMStructureLocalServiceUtil.search(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, null, null, null, DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED, true, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, null);
Assert.assertEquals(structures.toString(), 1, structures.size());
structures = DDMStructureLocalServiceUtil.search(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, null, null, null, DDMStructureConstants.TYPE_FRAGMENT,
WorkflowConstants.STATUS_APPROVED, true, QueryUtil.ALL_POS,
QueryUtil.ALL_POS, null);
Assert.assertEquals(structures.toString(), 1, structures.size());
}
@Test
public void testSearchCount() throws Exception {
int initialCount = DDMStructureLocalServiceUtil.searchCount(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, "Test Structure", null, null,
DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED, false);
addStructure(_classNameId, "Test Structure");
int count = DDMStructureLocalServiceUtil.searchCount(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, "Test Structure", null, null,
DDMStructureConstants.TYPE_DEFAULT,
WorkflowConstants.STATUS_APPROVED, false);
Assert.assertEquals(initialCount + 1, count);
}
@Test
public void testSearchCountByKeywords() throws Exception {
int initialCount = DDMStructureLocalServiceUtil.searchCount(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, null, WorkflowConstants.STATUS_APPROVED);
addStructure(_classNameId, "Test Structure");
int count = DDMStructureLocalServiceUtil.searchCount(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, null, WorkflowConstants.STATUS_APPROVED);
Assert.assertEquals(initialCount + 1, count);
}
@Test
public void testSearchCountByType() throws Exception {
int initialCount = DDMStructureLocalServiceUtil.searchCount(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, null, null, null, DDMStructureConstants.TYPE_FRAGMENT,
WorkflowConstants.STATUS_ANY, true);
addStructure(
0, _classNameId, null, StringUtil.randomString(), StringPool.BLANK,
read("test-structure.xsd"), StorageType.JSON.getValue(),
DDMStructureConstants.TYPE_FRAGMENT,
WorkflowConstants.STATUS_APPROVED);
int count = DDMStructureLocalServiceUtil.searchCount(
TestPropsValues.getCompanyId(), new long[] {group.getGroupId()},
_classNameId, null, null, null, DDMStructureConstants.TYPE_FRAGMENT,
WorkflowConstants.STATUS_ANY, true);
Assert.assertEquals(initialCount + 1, count);
}
@Test
public void testUpdateStructureWithReferencedDataProviderInstance()
throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm();
List<DDMFormField> ddmFormFields = new ArrayList<>();
DDMFormField ddmFormField1 = new DDMFormField("Field1", "select");
ddmFormField1.setDataType("string");
long ddmDataProviderInstanceId1 = RandomTestUtil.randomLong();
ddmFormField1.setProperty("dataSourceType", "data-provider");
ddmFormField1.setProperty(
"ddmDataProviderInstanceId", ddmDataProviderInstanceId1);
ddmFormFields.add(ddmFormField1);
DDMFormField ddmFormField2 = new DDMFormField("Field2", "select");
ddmFormField2.setDataType("string");
long ddmDataProviderInstanceId2 = RandomTestUtil.randomLong();
ddmFormField2.setProperty("dataSourceType", "data-provider");
ddmFormField2.setProperty(
"ddmDataProviderInstanceId", ddmDataProviderInstanceId2);
ddmFormFields.add(ddmFormField2);
ddmForm.setDDMFormFields(ddmFormFields);
DDMStructure structure = ddmStructureTestHelper.addStructure(
ddmForm, StorageType.JSON.getValue());
List<DDMDataProviderInstanceLink> dataProviderInstanceLinks =
DDMDataProviderInstanceLinkLocalServiceUtil.
getDataProviderInstanceLinks(structure.getStructureId());
Assert.assertEquals(
dataProviderInstanceLinks.toString(), 2,
dataProviderInstanceLinks.size());
// Remove one of the data provider instance links
ddmFormFields.remove(ddmFormField2);
ddmForm.setDDMFormFields(ddmFormFields);
ddmStructureTestHelper.updateStructure(
structure.getStructureId(), ddmForm);
dataProviderInstanceLinks =
DDMDataProviderInstanceLinkLocalServiceUtil.
getDataProviderInstanceLinks(structure.getStructureId());
Assert.assertEquals(
dataProviderInstanceLinks.toString(), 1,
dataProviderInstanceLinks.size());
DDMStructureLocalServiceUtil.deleteStructure(structure);
dataProviderInstanceLinks =
DDMDataProviderInstanceLinkLocalServiceUtil.
getDataProviderInstanceLinks(structure.getStructureId());
Assert.assertEquals(
dataProviderInstanceLinks.toString(), 0,
dataProviderInstanceLinks.size());
}
@Test
public void testUpdateStructureWithReferencedDataProviderInstance2()
throws Exception {
DDMForm ddmForm = DDMFormTestUtil.createDDMForm("Field1");
DDMDataProviderInstance dataProviderInstance1 =
createDDMDataProviderInstance();
DDMDataProviderInstance dataProviderInstance2 =
createDDMDataProviderInstance();
List<String> actions = new ArrayList<>();
String action1 = String.format(
"call('%s','','')", dataProviderInstance1.getUuid());
String action2 = String.format(
"call('%s','','')", dataProviderInstance2.getUuid());
actions.add(action1);
actions.add(action2);
DDMFormRule ddmFormRule1 = new DDMFormRule("TRUE", actions);
ddmForm.addDDMFormRule(ddmFormRule1);
actions = new ArrayList<>();
actions.add(action1);
DDMFormRule ddmFormRule2 = new DDMFormRule("FALSE", actions);
ddmForm.addDDMFormRule(ddmFormRule2);
DDMStructure structure = ddmStructureTestHelper.addStructure(
ddmForm, StorageType.JSON.getValue());
List<DDMDataProviderInstanceLink> dataProviderInstanceLinks =
DDMDataProviderInstanceLinkLocalServiceUtil.
getDataProviderInstanceLinks(structure.getStructureId());
Assert.assertEquals(
dataProviderInstanceLinks.toString(), 2,
dataProviderInstanceLinks.size());
// Remove one of the data provider instance links
List<DDMFormRule> ddmFormRules = ddmForm.getDDMFormRules();
ddmFormRules.remove(ddmFormRule1);
ddmForm.setDDMFormRules(ddmFormRules);
ddmStructureTestHelper.updateStructure(
structure.getStructureId(), ddmForm);
dataProviderInstanceLinks =
DDMDataProviderInstanceLinkLocalServiceUtil.
getDataProviderInstanceLinks(structure.getStructureId());
Assert.assertEquals(
dataProviderInstanceLinks.toString(), 1,
dataProviderInstanceLinks.size());
DDMStructureLocalServiceUtil.deleteStructure(structure);
dataProviderInstanceLinks =
DDMDataProviderInstanceLinkLocalServiceUtil.
getDataProviderInstanceLinks(structure.getStructureId());
Assert.assertEquals(
dataProviderInstanceLinks.toString(), 0,
dataProviderInstanceLinks.size());
}
@Test(expected = InvalidParentStructureException.class)
public void testValidateParentStructure() throws Exception {
DDMStructure structure1 = addStructure(
0, _classNameId, null, "Test Structure 1", null,
read("ddm-structure-text-field.xsd"), StorageType.JSON.getValue(),
DDMStructureConstants.TYPE_DEFAULT);
DDMStructure structure2 = addStructure(
structure1.getStructureId(), _classNameId, null, "Test Structure 2",
null, read("ddm-structure-radio-field.xsd"),
StorageType.JSON.getValue(), DDMStructureConstants.TYPE_DEFAULT);
DDMStructure structure3 = addStructure(
structure2.getStructureId(), _classNameId, null, "Test Structure 3",
null, read("ddm-structure-select-field.xsd"),
StorageType.JSON.getValue(), DDMStructureConstants.TYPE_DEFAULT);
structure1.setParentStructureId(structure3.getStructureId());
updateStructure(structure1);
}
protected DDMStructure copyStructure(DDMStructure structure)
throws Exception {
return DDMStructureLocalServiceUtil.copyStructure(
structure.getUserId(), structure.getStructureId(),
structure.getNameMap(), structure.getDescriptionMap(),
ServiceContextTestUtil.getServiceContext(group.getGroupId()));
}
protected DDMDataProviderInstance createDDMDataProviderInstance()
throws Exception {
Map<Locale, String> nameMap = new HashMap<>();
nameMap.put(LocaleUtil.getSiteDefault(), StringUtil.randomString());
DDMForm ddmForm = DDMFormTestUtil.createDDMForm("dataProviderName");
DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues(
ddmForm);
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(
group.getGroupId(), TestPropsValues.getUserId());
return DDMDataProviderInstanceLocalServiceUtil.addDataProviderInstance(
TestPropsValues.getUserId(), group.getGroupId(), nameMap, nameMap,
ddmFormValues, "rest", serviceContext);
}
protected String getStructureName(DDMStructure structure) {
return structure.getName(group.getDefaultLanguageId());
}
protected DDMStructure updateStructure(DDMStructure structure)
throws Exception {
return DDMStructureLocalServiceUtil.updateStructure(
structure.getUserId(), structure.getStructureId(),
structure.getParentStructureId(), structure.getNameMap(),
structure.getDescriptionMap(), structure.getDDMForm(),
structure.getDDMFormLayout(),
ServiceContextTestUtil.getServiceContext(group.getGroupId()));
}
private static long _classNameId;
}