/** * 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.web.internal.exportimport.data.handler.test; import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian; import com.liferay.dynamic.data.mapping.data.provider.DDMDataProvider; import com.liferay.dynamic.data.mapping.io.DDMFormValuesJSONDeserializer; 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.DDMStructure; 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.test.util.DDMFormTestUtil; import com.liferay.dynamic.data.mapping.test.util.DDMFormValuesTestUtil; import com.liferay.dynamic.data.mapping.test.util.DDMStructureTestUtil; import com.liferay.dynamic.data.mapping.util.DDMFormFactory; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.model.StagedModel; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.test.rule.AggregateTestRule; import com.liferay.portal.kernel.test.rule.Sync; import com.liferay.portal.kernel.test.rule.SynchronousDestinationTestRule; 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.lar.test.BaseStagedModelDataHandlerTestCase; import com.liferay.portal.test.rule.LiferayIntegrationTestRule; import com.liferay.registry.Registry; import com.liferay.registry.RegistryUtil; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; import org.junit.Rule; import org.junit.runner.RunWith; /** * @author Daniel Kocsis */ @RunWith(Arquillian.class) @Sync public class DDMStructureStagedModelDataHandlerTest extends BaseStagedModelDataHandlerTestCase { @ClassRule @Rule public static final AggregateTestRule aggregateTestRule = new AggregateTestRule( new LiferayIntegrationTestRule(), SynchronousDestinationTestRule.INSTANCE); @Before @Override public void setUp() throws Exception { super.setUp(); setUpDDMDataProvider(); setUpDDMFormValuesJSONDeserializer(); } @Override protected Map<String, List<StagedModel>> addDependentStagedModelsMap( Group group) throws Exception { Map<String, List<StagedModel>> dependentStagedModelsMap = new HashMap<>(); // Parent structure DDMStructure ddmStructure = DDMStructureTestUtil.addStructure( group.getGroupId(), _CLASS_NAME, DDMStructureTestUtil.getSampleDDMForm( RandomTestUtil.randomString())); addDependentStagedModel( dependentStagedModelsMap, DDMStructure.class, ddmStructure); // Data provider instance Map<Locale, String> nameMap = new HashMap<>(); nameMap.put(LocaleUtil.getSiteDefault(), "Data provider"); DDMFormValues ddmFormValues = getDDMDataProviderInstanceFormValues(); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext( group, TestPropsValues.getUserId()); DDMDataProviderInstance ddmDataProviderInstance = DDMDataProviderInstanceLocalServiceUtil.addDataProviderInstance( TestPropsValues.getUserId(), group.getGroupId(), nameMap, nameMap, ddmFormValues, "rest", serviceContext); addDependentStagedModel( dependentStagedModelsMap, DDMDataProviderInstance.class, ddmDataProviderInstance); return dependentStagedModelsMap; } @Override protected StagedModel addStagedModel( Group group, Map<String, List<StagedModel>> dependentStagedModelsMap) throws Exception { // Parent structure List<StagedModel> dependentStagedModels = dependentStagedModelsMap.get( DDMStructure.class.getSimpleName()); DDMStructure parentStructure = (DDMStructure)dependentStagedModels.get( 0); // Data provider instance dependentStagedModels = dependentStagedModelsMap.get( DDMDataProviderInstance.class.getSimpleName()); DDMDataProviderInstance ddmDataProviderInstance = (DDMDataProviderInstance)dependentStagedModels.get(0); DDMForm ddmForm = DDMFormTestUtil.createDDMForm("Name"); DDMFormField selectDDMFormField = DDMFormTestUtil.createDDMFormField( "Country", "Country", "select", "string", true, false, true); selectDDMFormField.setProperty("dataSourceType", "data-provider"); selectDDMFormField.setProperty( "ddmDataProviderInstanceId", ddmDataProviderInstance.getDataProviderInstanceId()); ddmForm.addDDMFormField(selectDDMFormField); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext( group, TestPropsValues.getUserId()); return DDMStructureTestUtil.addStructure( group.getGroupId(), _CLASS_NAME, parentStructure.getStructureId(), ddmForm, LocaleUtil.getSiteDefault(), serviceContext); } protected DDMFormValues getDDMDataProviderInstanceFormValues() { Class<?> ddmDataProviderSettings = _ddmDataProvider.getSettings(); DDMForm ddmForm = DDMFormFactory.create(ddmDataProviderSettings); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "cacheable", Boolean.FALSE.toString())); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "key", "countryId")); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "password", "test")); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "url", "http://localhost:8080/api/jsonws/country/get-countries")); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "username", "test@liferay.com")); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "value", "nameCurrentValue")); return ddmFormValues; } protected DDMFormValues getDDMDataProviderInstanceFormValues( DDMDataProviderInstance ddmDataProviderInstance) throws PortalException { Class<?> ddmDataProviderSettings = _ddmDataProvider.getSettings(); DDMForm ddmForm = DDMFormFactory.create(ddmDataProviderSettings); return _ddmFormValuesJSONDeserializer.deserialize( ddmForm, ddmDataProviderInstance.getDefinition()); } @Override protected StagedModel getStagedModel(String uuid, Group group) { try { return DDMStructureLocalServiceUtil.getDDMStructureByUuidAndGroupId( uuid, group.getGroupId()); } catch (Exception e) { return null; } } @Override protected Class<? extends StagedModel> getStagedModelClass() { return DDMStructure.class; } protected void setUpDDMDataProvider() throws Exception { Registry registry = RegistryUtil.getRegistry(); DDMDataProvider[] ddmDataProviders = registry.getServices( "com.liferay.dynamic.data.mapping.data.provider.DDMDataProvider", "(ddm.data.provider.type=rest)"); _ddmDataProvider = ddmDataProviders[0]; } protected void setUpDDMFormValuesJSONDeserializer() { Registry registry = RegistryUtil.getRegistry(); _ddmFormValuesJSONDeserializer = registry.getService( DDMFormValuesJSONDeserializer.class); } @Override protected void validateImport( Map<String, List<StagedModel>> dependentStagedModelsMap, Group group) throws Exception { List<StagedModel> ddmStructureDependentStagedModels = dependentStagedModelsMap.get(DDMStructure.class.getSimpleName()); Assert.assertEquals( ddmStructureDependentStagedModels.toString(), 1, ddmStructureDependentStagedModels.size()); DDMStructure ddmStructure = (DDMStructure)ddmStructureDependentStagedModels.get(0); DDMStructureLocalServiceUtil.getDDMStructureByUuidAndGroupId( ddmStructure.getUuid(), group.getGroupId()); List<StagedModel> ddmDataProviderInstanceDependentStagedModels = dependentStagedModelsMap.get( DDMDataProviderInstance.class.getSimpleName()); Assert.assertEquals( ddmDataProviderInstanceDependentStagedModels.toString(), 1, ddmDataProviderInstanceDependentStagedModels.size()); DDMDataProviderInstance dataProviderInstance = (DDMDataProviderInstance) ddmDataProviderInstanceDependentStagedModels.get(0); DDMDataProviderInstanceLocalServiceUtil. getDDMDataProviderInstanceByUuidAndGroupId( dataProviderInstance.getUuid(), group.getGroupId()); } @Override protected void validateImportedStagedModel( StagedModel stagedModel, StagedModel importedStagedModel) throws Exception { super.validateImportedStagedModel(stagedModel, importedStagedModel); // Structure DDMStructure structure = (DDMStructure)stagedModel; DDMStructure importedStructure = (DDMStructure)importedStagedModel; Assert.assertEquals( structure.getStructureKey(), importedStructure.getStructureKey()); Assert.assertEquals(structure.getName(), importedStructure.getName()); Assert.assertEquals( structure.getDescription(), importedStructure.getDescription()); Assert.assertEquals( structure.getStructureKey(), importedStructure.getStructureKey()); Assert.assertEquals( structure.getStorageType(), importedStructure.getStorageType()); Assert.assertEquals(structure.getType(), importedStructure.getType()); // Data provider instance List<DDMDataProviderInstanceLink> dataProviderInstanceLinks = DDMDataProviderInstanceLinkLocalServiceUtil. getDataProviderInstanceLinks(structure.getStructureId()); List<DDMDataProviderInstanceLink> importedDataProviderInstanceLinks = DDMDataProviderInstanceLinkLocalServiceUtil. getDataProviderInstanceLinks( importedStructure.getStructureId()); Assert.assertEquals( dataProviderInstanceLinks.toString(), 1, dataProviderInstanceLinks.size()); Assert.assertEquals( importedDataProviderInstanceLinks.toString(), 1, importedDataProviderInstanceLinks.size()); DDMDataProviderInstanceLink dataProviderInstanceLink = dataProviderInstanceLinks.get(0); long dataProviderInstanceId = dataProviderInstanceLink.getDataProviderInstanceId(); DDMDataProviderInstance dataProviderInstance = DDMDataProviderInstanceLocalServiceUtil.getDataProviderInstance( dataProviderInstanceId); DDMDataProviderInstanceLink importedDataProviderInstanceLink = importedDataProviderInstanceLinks.get(0); long importedDataProviderInstanceId = importedDataProviderInstanceLink.getDataProviderInstanceId(); DDMDataProviderInstance importedDataProviderInstance = DDMDataProviderInstanceLocalServiceUtil.getDataProviderInstance( importedDataProviderInstanceId); Assert.assertEquals( getDDMDataProviderInstanceFormValues(dataProviderInstance), getDDMDataProviderInstanceFormValues(importedDataProviderInstance)); } private static final String _CLASS_NAME = "com.liferay.dynamic.data.lists.model.DDLRecordSet"; private DDMDataProvider _ddmDataProvider; private DDMFormValuesJSONDeserializer _ddmFormValuesJSONDeserializer; }