/**
* 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.lists.service.test;
import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian;
import com.liferay.dynamic.data.lists.helper.DDLRecordSetTestHelper;
import com.liferay.dynamic.data.lists.model.DDLRecordSet;
import com.liferay.dynamic.data.lists.model.DDLRecordSetConstants;
import com.liferay.dynamic.data.lists.model.DDLRecordSetVersion;
import com.liferay.dynamic.data.lists.service.DDLRecordSetLocalServiceUtil;
import com.liferay.dynamic.data.lists.service.DDLRecordSetVersionLocalServiceUtil;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.storage.StorageAdapter;
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.DDMStructureTestHelper;
import com.liferay.dynamic.data.mapping.test.util.storage.FailStorageAdapter;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.service.ServiceContext;
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.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.workflow.WorkflowConstants;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import com.liferay.registry.Registry;
import com.liferay.registry.RegistryUtil;
import com.liferay.registry.ServiceRegistration;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* @author Rafael Praxedes
*/
@RunWith(Arquillian.class)
public class DDLRecordSetServiceTest {
@ClassRule
@Rule
public static final AggregateTestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@BeforeClass
public static void setUpClass() {
Registry registry = RegistryUtil.getRegistry();
_serviceRegistration = registry.registerService(
StorageAdapter.class, new FailStorageAdapter());
}
@AfterClass
public static void tearDownClass() {
_serviceRegistration.unregister();
}
@Before
public void setUp() throws Exception {
_availableLocales = DDMFormTestUtil.createAvailableLocales(Locale.US);
_defaultLocale = Locale.US;
_group = GroupTestUtil.addGroup();
_ddmStructureTestHelper = new DDMStructureTestHelper(
PortalUtil.getClassNameId(DDLRecordSet.class), _group);
_ddlRecordSetTestHelper = new DDLRecordSetTestHelper(_group);
}
@Test
public void testAddRecordSetCreatesRecordSetVersion() throws Exception {
DDMForm ddmStructureDDMForm = DDMFormTestUtil.createDDMForm("Field");
DDLRecordSet ddlRecordSet = addRecordSet(
ddmStructureDDMForm, StorageType.JSON.toString());
Assert.assertEquals(
DDLRecordSetConstants.VERSION_DEFAULT, ddlRecordSet.getVersion());
DDLRecordSetVersion ddlRecordSetVersion =
ddlRecordSet.getRecordSetVersion();
Assert.assertEquals(
DDLRecordSetConstants.VERSION_DEFAULT,
ddlRecordSetVersion.getVersion());
}
@Test
public void testAddRecordSetWithFailStorage() throws Exception {
DDMForm ddmStructureDDMForm = DDMFormTestUtil.createDDMForm("Field");
DDLRecordSet ddlRecordSet = addRecordSet(
ddmStructureDDMForm, FailStorageAdapter.STORAGE_TYPE);
DDMStructure ddmStructure = ddlRecordSet.getDDMStructure();
Assert.assertEquals(
ddmStructure.getStorageType(), FailStorageAdapter.STORAGE_TYPE);
}
@Test
public void testDeleteRecordSetDeletesRecordSetVersions() throws Exception {
DDMForm ddmStructureDDMForm = DDMFormTestUtil.createDDMForm("Field");
DDLRecordSet ddlRecordSet = addRecordSet(
ddmStructureDDMForm, StorageType.JSON.toString());
DDLRecordSetLocalServiceUtil.deleteRecordSet(
ddlRecordSet.getRecordSetId());
int actualCount =
DDLRecordSetVersionLocalServiceUtil.getRecordSetVersionsCount(
ddlRecordSet.getRecordSetId());
Assert.assertEquals(0, actualCount);
}
@Test
public void testDraftVersionCombinedWithApprovedVersion() throws Exception {
DDMForm ddmStructureDDMForm = DDMFormTestUtil.createDDMForm("Field");
DDMStructure ddmStructure = _ddmStructureTestHelper.addStructure(
ddmStructureDDMForm, StorageType.JSON.toString());
Map<Locale, String> nameMap = new HashMap<>();
nameMap.put(LocaleUtil.US, RandomTestUtil.randomString());
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(_group.getGroupId());
serviceContext.setAttribute("status", WorkflowConstants.STATUS_DRAFT);
DDLRecordSet recordSet = DDLRecordSetLocalServiceUtil.addRecordSet(
TestPropsValues.getUserId(), _group.getGroupId(),
ddmStructure.getStructureId(), null, nameMap, null,
DDLRecordSetConstants.MIN_DISPLAY_ROWS_DEFAULT,
DDLRecordSetConstants.SCOPE_FORMS, serviceContext);
long recordSetId = recordSet.getRecordSetId();
DDLRecordSetVersion recordSetVersion = recordSet.getRecordSetVersion();
Assert.assertEquals(
WorkflowConstants.STATUS_DRAFT, recordSetVersion.getStatus());
Assert.assertEquals(
recordSet.getVersion(), recordSetVersion.getVersion());
serviceContext = ServiceContextTestUtil.getServiceContext(
_group.getGroupId());
recordSet = DDLRecordSetLocalServiceUtil.updateRecordSet(
recordSetId, ddmStructure.getStructureId(), nameMap, null,
DDLRecordSetConstants.MIN_DISPLAY_ROWS_DEFAULT, serviceContext);
recordSetVersion = recordSet.getRecordSetVersion();
Assert.assertEquals(
WorkflowConstants.STATUS_APPROVED, recordSetVersion.getStatus());
Assert.assertEquals(
recordSet.getVersion(), recordSetVersion.getVersion());
List<DDLRecordSetVersion> recordSetVersions =
DDLRecordSetVersionLocalServiceUtil.getRecordSetVersions(
recordSetId);
Assert.assertEquals(
recordSetVersions.toString(), 2, recordSetVersions.size());
serviceContext = ServiceContextTestUtil.getServiceContext(
_group.getGroupId());
serviceContext.setAttribute("status", WorkflowConstants.STATUS_DRAFT);
recordSet = DDLRecordSetLocalServiceUtil.updateRecordSet(
recordSetId, ddmStructure.getStructureId(), nameMap, null,
DDLRecordSetConstants.MIN_DISPLAY_ROWS_DEFAULT, serviceContext);
recordSetVersion = recordSet.getRecordSetVersion();
Assert.assertEquals(
WorkflowConstants.STATUS_DRAFT, recordSetVersion.getStatus());
Assert.assertEquals(
recordSet.getVersion(), recordSetVersion.getVersion());
recordSetVersions =
DDLRecordSetVersionLocalServiceUtil.getRecordSetVersions(
recordSetId);
Assert.assertEquals(
recordSetVersions.toString(), 3, recordSetVersions.size());
}
@Test
public void testUpdateDraftVersion() throws Exception {
DDMForm ddmStructureDDMForm = DDMFormTestUtil.createDDMForm("Field");
DDMStructure ddmStructure = _ddmStructureTestHelper.addStructure(
ddmStructureDDMForm, StorageType.JSON.toString());
Map<Locale, String> nameMap = new HashMap<>();
nameMap.put(LocaleUtil.US, RandomTestUtil.randomString());
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(_group.getGroupId());
serviceContext.setAttribute("status", WorkflowConstants.STATUS_DRAFT);
DDLRecordSet recordSet = DDLRecordSetLocalServiceUtil.addRecordSet(
TestPropsValues.getUserId(), _group.getGroupId(),
ddmStructure.getStructureId(), null, nameMap, null,
DDLRecordSetConstants.MIN_DISPLAY_ROWS_DEFAULT,
DDLRecordSetConstants.SCOPE_FORMS, serviceContext);
long recordSetId = recordSet.getRecordSetId();
DDLRecordSetVersion recordSetVersion = recordSet.getRecordSetVersion();
Assert.assertEquals(
WorkflowConstants.STATUS_DRAFT, recordSetVersion.getStatus());
Assert.assertEquals(
recordSet.getVersion(), recordSetVersion.getVersion());
recordSet = DDLRecordSetLocalServiceUtil.updateRecordSet(
recordSetId, ddmStructure.getStructureId(), nameMap, null,
DDLRecordSetConstants.MIN_DISPLAY_ROWS_DEFAULT, serviceContext);
recordSetVersion = recordSet.getRecordSetVersion();
Assert.assertEquals(
WorkflowConstants.STATUS_DRAFT, recordSetVersion.getStatus());
Assert.assertEquals(
recordSet.getVersion(), recordSetVersion.getVersion());
List<DDLRecordSetVersion> recordSetVersions =
DDLRecordSetVersionLocalServiceUtil.getRecordSetVersions(
recordSetId);
Assert.assertEquals(
recordSetVersions.toString(), 1, recordSetVersions.size());
}
@Test
public void testUpdateRecordSetCreatesMajorRecordSetVersion()
throws Exception {
DDMForm ddmStructureDDMForm = DDMFormTestUtil.createDDMForm("Field");
DDLRecordSet ddlRecordSet = addRecordSet(
ddmStructureDDMForm, StorageType.JSON.toString());
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(_group.getGroupId());
serviceContext.setAttribute("majorVersion", Boolean.TRUE);
DDLRecordSet updatedDDLRecordSet =
DDLRecordSetLocalServiceUtil.updateRecordSet(
ddlRecordSet.getRecordSetId(), ddlRecordSet.getDDMStructureId(),
ddlRecordSet.getNameMap(), null,
DDLRecordSetConstants.MIN_DISPLAY_ROWS_DEFAULT, serviceContext);
Assert.assertEquals("2.0", updatedDDLRecordSet.getVersion());
}
@Test
public void testUpdateRecordSetCreatesRecordSetVersion() throws Exception {
DDMForm ddmStructureDDMForm = DDMFormTestUtil.createDDMForm("Field");
DDLRecordSet ddlRecordSet = addRecordSet(
ddmStructureDDMForm, StorageType.JSON.toString());
DDLRecordSet updatedDDLRecordSet =
_ddlRecordSetTestHelper.updateRecordSet(
ddlRecordSet.getRecordSetId(), ddlRecordSet.getDDMStructure());
Assert.assertEquals("1.1", updatedDDLRecordSet.getVersion());
DDLRecordSetVersion ddlRecordSetVersion =
updatedDDLRecordSet.getRecordSetVersion();
Assert.assertEquals(
updatedDDLRecordSet.getVersion(), ddlRecordSetVersion.getVersion());
}
@Test
public void testUpdateRecordSetWithFailStorage() throws Exception {
DDMForm ddmStructureDDMForm = DDMFormTestUtil.createDDMForm("Field");
DDLRecordSet ddlRecordSet = addRecordSet(
ddmStructureDDMForm, FailStorageAdapter.STORAGE_TYPE);
String storageAdpater = ddlRecordSet.getDDMStructure().getStorageType();
DDMFormTestUtil.addTextDDMFormFields(ddmStructureDDMForm, "Name");
ddlRecordSet = updateRecordSet(ddlRecordSet, ddmStructureDDMForm);
DDMStructure ddmStructure = ddlRecordSet.getDDMStructure();
Assert.assertEquals(storageAdpater, ddmStructure.getStorageType());
}
protected DDLRecordSet addRecordSet(
DDMForm ddmStructureDDMForm, String storageType)
throws Exception {
DDMStructure ddmStructure = _ddmStructureTestHelper.addStructure(
ddmStructureDDMForm, storageType);
return _ddlRecordSetTestHelper.addRecordSet(ddmStructure);
}
protected DDLRecordSet updateRecordSet(
DDLRecordSet ddlRecordSet, DDMForm ddmStructureDDMForm)
throws Exception {
DDMStructure ddmStructure = ddlRecordSet.getDDMStructure();
ddmStructure = _ddmStructureTestHelper.updateStructure(
ddmStructure.getStructureId(), ddmStructureDDMForm);
return _ddlRecordSetTestHelper.updateRecordSet(
ddlRecordSet.getRecordSetId(), ddmStructure);
}
private static ServiceRegistration<StorageAdapter> _serviceRegistration;
private Set<Locale> _availableLocales;
private DDLRecordSetTestHelper _ddlRecordSetTestHelper;
private DDMStructureTestHelper _ddmStructureTestHelper;
private Locale _defaultLocale;
@DeleteAfterTestRun
private Group _group;
}