/**
* 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.journal.service.test;
import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.model.DDMTemplate;
import com.liferay.dynamic.data.mapping.test.util.DDMStructureTestUtil;
import com.liferay.dynamic.data.mapping.test.util.DDMTemplateTestUtil;
import com.liferay.journal.exception.InvalidDDMStructureException;
import com.liferay.journal.model.JournalArticle;
import com.liferay.journal.model.JournalArticleConstants;
import com.liferay.journal.model.JournalFolder;
import com.liferay.journal.model.JournalFolderConstants;
import com.liferay.journal.service.JournalArticleLocalServiceUtil;
import com.liferay.journal.service.JournalFolderLocalServiceUtil;
import com.liferay.journal.service.JournalFolderServiceUtil;
import com.liferay.journal.test.util.JournalTestUtil;
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.rule.Sync;
import com.liferay.portal.kernel.test.rule.SynchronousDestinationTestRule;
import com.liferay.portal.kernel.test.util.GroupTestUtil;
import com.liferay.portal.kernel.test.util.ServiceContextTestUtil;
import com.liferay.portal.kernel.test.util.TestPropsValues;
import com.liferay.portal.kernel.trash.TrashHandler;
import com.liferay.portal.kernel.trash.TrashHandlerRegistryUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.service.test.ServiceTestUtil;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import com.liferay.trash.kernel.exception.RestoreEntryException;
import java.util.List;
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;
/**
* @author Juan Fernández
*/
@RunWith(Arquillian.class)
@Sync
public class JournalFolderServiceTest {
@ClassRule
@Rule
public static final AggregateTestRule aggregateTestRule =
new AggregateTestRule(
new LiferayIntegrationTestRule(),
SynchronousDestinationTestRule.INSTANCE);
@Before
public void setUp() throws Exception {
_group = GroupTestUtil.addGroup();
ServiceTestUtil.setUser(TestPropsValues.getUser());
}
@Test
public void testAddArticle() throws Exception {
JournalFolder folder = JournalTestUtil.addFolder(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Test Folder");
JournalArticle article = JournalTestUtil.addArticle(
_group.getGroupId(), folder.getFolderId(), "Test Article",
"This is a test article.");
Assert.assertEquals(article.getFolderId(), folder.getFolderId());
}
@Test
public void testAddArticleToRestrictedFolder() throws Exception {
JournalFolder folder = JournalTestUtil.addFolder(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Test 1");
DDMStructure ddmStructure1 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
long[] ddmStructureIds = new long[] {ddmStructure1.getStructureId()};
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(_group.getGroupId());
JournalFolderLocalServiceUtil.updateFolder(
TestPropsValues.getUserId(), serviceContext.getScopeGroupId(),
folder.getFolderId(), folder.getParentFolderId(), folder.getName(),
folder.getDescription(), ddmStructureIds,
JournalFolderConstants.RESTRICTION_TYPE_DDM_STRUCTURES_AND_WORKFLOW,
false, serviceContext);
List<DDMStructure> ddmStructures =
JournalFolderLocalServiceUtil.getDDMStructures(
PortalUtil.getCurrentAndAncestorSiteGroupIds(
_group.getGroupId()),
folder.getFolderId(),
JournalFolderConstants.
RESTRICTION_TYPE_DDM_STRUCTURES_AND_WORKFLOW);
Assert.assertFalse(ddmStructures.isEmpty());
String xml = DDMStructureTestUtil.getSampleStructuredContent(
"Test Article");
DDMStructure ddmStructure2 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
DDMTemplate ddmTemplate2 = DDMTemplateTestUtil.addTemplate(
_group.getGroupId(), ddmStructure2.getStructureId(),
PortalUtil.getClassNameId(JournalArticle.class),
LocaleUtil.getDefault());
try {
JournalTestUtil.addArticleWithXMLContent(
_group.getGroupId(), folder.getFolderId(),
JournalArticleConstants.CLASSNAME_ID_DEFAULT, xml,
ddmStructure2.getStructureKey(), ddmTemplate2.getTemplateKey());
Assert.fail();
}
catch (InvalidDDMStructureException iddmse) {
}
JournalFolder subfolder = JournalTestUtil.addFolder(
_group.getGroupId(), folder.getFolderId(), "Test 1.1");
try {
JournalTestUtil.addArticleWithXMLContent(
_group.getGroupId(), subfolder.getFolderId(),
JournalArticleConstants.CLASSNAME_ID_DEFAULT, xml,
ddmStructure2.getStructureKey(), ddmTemplate2.getTemplateKey());
Assert.fail();
}
catch (InvalidDDMStructureException iddmse) {
}
JournalFolderLocalServiceUtil.deleteFolder(folder.getFolderId());
ddmStructures = JournalFolderLocalServiceUtil.getDDMStructures(
PortalUtil.getCurrentAndAncestorSiteGroupIds(_group.getGroupId()),
folder.getFolderId(),
JournalFolderConstants.
RESTRICTION_TYPE_DDM_STRUCTURES_AND_WORKFLOW);
Assert.assertTrue(ddmStructures.isEmpty());
}
@Test
public void testGetInheritedWorkflowFolderId() throws Exception {
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(_group.getGroupId());
JournalFolderServiceUtil.updateFolder(
serviceContext.getScopeGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID,
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, null, null,
new long[0], JournalFolderConstants.RESTRICTION_TYPE_WORKFLOW,
false, serviceContext);
JournalFolder countriesFolder = JournalTestUtil.addFolder(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Countries");
Assert.assertEquals(
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID,
JournalFolderLocalServiceUtil.getInheritedWorkflowFolderId(
countriesFolder.getFolderId()));
JournalFolder germanyFolder = JournalTestUtil.addFolder(
_group.getGroupId(), countriesFolder.getFolderId(), "Germany");
Assert.assertEquals(
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID,
JournalFolderLocalServiceUtil.getInheritedWorkflowFolderId(
germanyFolder.getFolderId()));
JournalFolder spainFolder = JournalTestUtil.addFolder(
_group.getGroupId(), countriesFolder.getFolderId(), "Spain");
DDMStructure ddmStructure1 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
long[] ddmStructureIds = {ddmStructure1.getStructureId()};
JournalFolderServiceUtil.updateFolder(
serviceContext.getScopeGroupId(), spainFolder.getFolderId(),
spainFolder.getParentFolderId(), spainFolder.getName(),
spainFolder.getDescription(), ddmStructureIds,
JournalFolderConstants.RESTRICTION_TYPE_DDM_STRUCTURES_AND_WORKFLOW,
false, serviceContext);
Assert.assertEquals(
spainFolder.getFolderId(),
JournalFolderLocalServiceUtil.getInheritedWorkflowFolderId(
spainFolder.getFolderId()));
JournalFolder madridFolder = JournalTestUtil.addFolder(
_group.getGroupId(), spainFolder.getFolderId(), "Madrid");
Assert.assertEquals(
spainFolder.getFolderId(),
JournalFolderLocalServiceUtil.getInheritedWorkflowFolderId(
madridFolder.getFolderId()));
}
@Test
public void testMoveArticleFromTrashToFolder() throws Exception {
JournalFolder folder1 = JournalTestUtil.addFolder(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Test 1");
String xml = DDMStructureTestUtil.getSampleStructuredContent(
"Test Article");
DDMStructure ddmStructure1 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
DDMTemplate ddmTemplate1 = DDMTemplateTestUtil.addTemplate(
_group.getGroupId(), ddmStructure1.getStructureId(),
PortalUtil.getClassNameId(JournalArticle.class),
LocaleUtil.getDefault());
JournalArticle article = JournalTestUtil.addArticleWithXMLContent(
_group.getGroupId(), folder1.getFolderId(),
JournalArticleConstants.CLASSNAME_ID_DEFAULT, xml,
ddmStructure1.getStructureKey(), ddmTemplate1.getTemplateKey());
JournalFolderLocalServiceUtil.moveFolderToTrash(
TestPropsValues.getUserId(), folder1.getFolderId());
JournalFolder folder2 = JournalTestUtil.addFolder(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Test 2");
DDMStructure ddmStructure2 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
long[] ddmStructureIds = new long[] {ddmStructure2.getStructureId()};
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(_group.getGroupId());
JournalFolderLocalServiceUtil.updateFolder(
TestPropsValues.getUserId(), serviceContext.getScopeGroupId(),
folder2.getFolderId(), folder2.getParentFolderId(),
folder2.getName(), folder2.getDescription(), ddmStructureIds,
JournalFolderConstants.RESTRICTION_TYPE_DDM_STRUCTURES_AND_WORKFLOW,
false, serviceContext);
TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler(
JournalArticle.class.getName());
try {
trashHandler.checkRestorableEntry(
article.getResourcePrimKey(), folder2.getFolderId(), null);
Assert.fail();
}
catch (RestoreEntryException ree) {
}
JournalFolder subfolder = JournalTestUtil.addFolder(
_group.getGroupId(), folder2.getFolderId(), "Test 2.1");
try {
trashHandler.checkRestorableEntry(
article.getResourcePrimKey(), subfolder.getFolderId(), null);
Assert.fail();
}
catch (RestoreEntryException ree) {
}
}
@Test
public void testMoveArticleToRestrictedFolder() throws Exception {
DDMStructure ddmStructure1 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
DDMTemplate ddmTemplate1 = DDMTemplateTestUtil.addTemplate(
_group.getGroupId(), ddmStructure1.getStructureId(),
PortalUtil.getClassNameId(JournalArticle.class),
LocaleUtil.getDefault());
String xml = DDMStructureTestUtil.getSampleStructuredContent(
"Test Article");
JournalArticle article = JournalTestUtil.addArticleWithXMLContent(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID,
JournalArticleConstants.CLASSNAME_ID_DEFAULT, xml,
ddmStructure1.getStructureKey(), ddmTemplate1.getTemplateKey());
JournalFolder folder = JournalTestUtil.addFolder(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Test 1");
DDMStructure ddmStructure2 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
long[] ddmStructureIds = new long[] {ddmStructure2.getStructureId()};
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(_group.getGroupId());
JournalFolderLocalServiceUtil.updateFolder(
TestPropsValues.getUserId(), serviceContext.getScopeGroupId(),
folder.getFolderId(), folder.getParentFolderId(), folder.getName(),
folder.getDescription(), ddmStructureIds,
JournalFolderConstants.RESTRICTION_TYPE_DDM_STRUCTURES_AND_WORKFLOW,
false, serviceContext);
try {
JournalArticleLocalServiceUtil.moveArticle(
_group.getGroupId(), article.getArticleId(),
folder.getFolderId(), serviceContext);
Assert.fail();
}
catch (InvalidDDMStructureException iddmse) {
}
JournalFolder subfolder = JournalTestUtil.addFolder(
_group.getGroupId(), folder.getFolderId(), "Test 1.1");
try {
JournalArticleLocalServiceUtil.moveArticle(
_group.getGroupId(), article.getArticleId(),
subfolder.getFolderId(), serviceContext);
Assert.fail();
}
catch (InvalidDDMStructureException iddmse) {
}
}
@Test
public void testMoveFolderWithAnArticleInTrashToFolder() throws Exception {
JournalFolder folder1 = JournalTestUtil.addFolder(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Test 1");
JournalFolder folder2 = JournalTestUtil.addFolder(
_group.getGroupId(), folder1.getFolderId(), "Test 2");
String xml = DDMStructureTestUtil.getSampleStructuredContent(
"Test Article");
DDMStructure ddmStructure1 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
DDMTemplate ddmTemplate1 = DDMTemplateTestUtil.addTemplate(
_group.getGroupId(), ddmStructure1.getStructureId(),
PortalUtil.getClassNameId(JournalArticle.class),
LocaleUtil.getDefault());
JournalTestUtil.addArticleWithXMLContent(
_group.getGroupId(), folder2.getFolderId(),
JournalArticleConstants.CLASSNAME_ID_DEFAULT, xml,
ddmStructure1.getStructureKey(), ddmTemplate1.getTemplateKey());
JournalFolderLocalServiceUtil.moveFolderToTrash(
TestPropsValues.getUserId(), folder1.getFolderId());
JournalFolder folder3 = JournalTestUtil.addFolder(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Test 3");
DDMStructure ddmStructure2 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
long[] ddmStructureIds = new long[] {ddmStructure2.getStructureId()};
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(_group.getGroupId());
JournalFolderLocalServiceUtil.updateFolder(
TestPropsValues.getUserId(), serviceContext.getScopeGroupId(),
folder3.getFolderId(), folder3.getParentFolderId(),
folder3.getName(), folder3.getDescription(), ddmStructureIds,
JournalFolderConstants.RESTRICTION_TYPE_DDM_STRUCTURES_AND_WORKFLOW,
false, serviceContext);
TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler(
JournalFolder.class.getName());
try {
trashHandler.checkRestorableEntry(
folder2.getFolderId(), folder3.getFolderId(), null);
Assert.fail();
}
catch (RestoreEntryException ree) {
}
JournalFolder subfolder = JournalTestUtil.addFolder(
_group.getGroupId(), folder3.getFolderId(), "Test 3.1");
try {
trashHandler.checkRestorableEntry(
folder2.getFolderId(), subfolder.getFolderId(), null);
Assert.fail();
}
catch (RestoreEntryException ree) {
}
}
@Test
public void testMoveFolderWithAnArticleToFolder() throws Exception {
JournalFolder folder1 = JournalTestUtil.addFolder(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Test 1");
String xml = DDMStructureTestUtil.getSampleStructuredContent(
"Test Article");
DDMStructure ddmStructure1 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
DDMTemplate ddmTemplate1 = DDMTemplateTestUtil.addTemplate(
_group.getGroupId(), ddmStructure1.getStructureId(),
PortalUtil.getClassNameId(JournalArticle.class),
LocaleUtil.getDefault());
JournalTestUtil.addArticleWithXMLContent(
_group.getGroupId(), folder1.getFolderId(),
JournalArticleConstants.CLASSNAME_ID_DEFAULT, xml,
ddmStructure1.getStructureKey(), ddmTemplate1.getTemplateKey());
JournalFolder folder2 = JournalTestUtil.addFolder(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Test 2");
DDMStructure ddmStructure2 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
long[] ddmStructureIds = new long[] {ddmStructure2.getStructureId()};
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(_group.getGroupId());
JournalFolderLocalServiceUtil.updateFolder(
TestPropsValues.getUserId(), serviceContext.getScopeGroupId(),
folder2.getFolderId(), folder2.getParentFolderId(),
folder2.getName(), folder2.getDescription(), ddmStructureIds,
JournalFolderConstants.RESTRICTION_TYPE_DDM_STRUCTURES_AND_WORKFLOW,
false, serviceContext);
try {
JournalFolderLocalServiceUtil.moveFolder(
folder1.getFolderId(), folder2.getFolderId(), serviceContext);
Assert.fail();
}
catch (InvalidDDMStructureException iddmse) {
}
JournalFolder subfolder = JournalTestUtil.addFolder(
_group.getGroupId(), folder2.getFolderId(), "Test 2.1");
try {
JournalFolderLocalServiceUtil.moveFolder(
folder1.getFolderId(), subfolder.getFolderId(), serviceContext);
Assert.fail();
}
catch (InvalidDDMStructureException iddmse) {
}
}
@Test
public void testSubfolders() throws Exception {
JournalFolder folder1 = JournalTestUtil.addFolder(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Test 1");
JournalFolder folder11 = JournalTestUtil.addFolder(
_group.getGroupId(), folder1.getFolderId(), "Test 1.1");
JournalFolder folder111 = JournalTestUtil.addFolder(
_group.getGroupId(), folder11.getFolderId(), "Test 1.1.1");
Assert.assertTrue(folder1.isRoot());
Assert.assertFalse(folder11.isRoot());
Assert.assertFalse(folder111.isRoot());
Assert.assertEquals(
folder1.getFolderId(), folder11.getParentFolderId());
Assert.assertEquals(
folder11.getFolderId(), folder111.getParentFolderId());
}
@Test
public void testUpdateFolderRestrictions() throws Exception {
JournalFolder folder = JournalTestUtil.addFolder(
_group.getGroupId(),
JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Test 1");
String xml = DDMStructureTestUtil.getSampleStructuredContent(
"Test Article");
DDMStructure ddmStructure1 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
DDMTemplate ddmTemplate1 = DDMTemplateTestUtil.addTemplate(
_group.getGroupId(), ddmStructure1.getStructureId(),
PortalUtil.getClassNameId(JournalArticle.class),
LocaleUtil.getDefault());
JournalTestUtil.addArticleWithXMLContent(
_group.getGroupId(), folder.getFolderId(),
JournalArticleConstants.CLASSNAME_ID_DEFAULT, xml,
ddmStructure1.getStructureKey(), ddmTemplate1.getTemplateKey());
DDMStructure ddmStructure2 = DDMStructureTestUtil.addStructure(
_group.getGroupId(), JournalArticle.class.getName());
long[] ddmStructureIds = new long[] {ddmStructure2.getStructureId()};
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(_group.getGroupId());
try {
JournalFolderLocalServiceUtil.updateFolder(
TestPropsValues.getUserId(), serviceContext.getScopeGroupId(),
folder.getFolderId(), folder.getParentFolderId(),
folder.getName(), folder.getDescription(), ddmStructureIds,
JournalFolderConstants.
RESTRICTION_TYPE_DDM_STRUCTURES_AND_WORKFLOW,
false, serviceContext);
Assert.fail();
}
catch (InvalidDDMStructureException iddmse) {
}
JournalFolder subfolder = JournalTestUtil.addFolder(
_group.getGroupId(), folder.getFolderId(), "Test 1.1");
JournalTestUtil.addArticleWithXMLContent(
_group.getGroupId(), subfolder.getFolderId(),
JournalArticleConstants.CLASSNAME_ID_DEFAULT, xml,
ddmStructure1.getStructureKey(), ddmTemplate1.getTemplateKey());
try {
JournalFolderLocalServiceUtil.updateFolder(
TestPropsValues.getUserId(), serviceContext.getScopeGroupId(),
folder.getFolderId(), folder.getParentFolderId(),
folder.getName(), folder.getDescription(), ddmStructureIds,
JournalFolderConstants.
RESTRICTION_TYPE_DDM_STRUCTURES_AND_WORKFLOW,
false, serviceContext);
Assert.fail();
}
catch (InvalidDDMStructureException iddmse) {
}
}
@DeleteAfterTestRun
private Group _group;
}