/* * Copyright (C) 2016 LibreCCM Foundation. * * 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. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ package org.librecms.contentsection; import static org.libreccm.testutils.DependenciesHelpers.*; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.ShouldThrowException; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.junit.InSequence; import org.jboss.arquillian.persistence.CreateSchema; import org.jboss.arquillian.persistence.PersistenceTest; import org.jboss.arquillian.persistence.ShouldMatchDataSet; import org.jboss.arquillian.persistence.UsingDataSet; import org.jboss.arquillian.transaction.api.annotation.TransactionMode; import org.jboss.arquillian.transaction.api.annotation.Transactional; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.EmptyAsset; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.libreccm.tests.categories.IntegrationTest; import javax.inject.Inject; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; /** * * @author Jens Pelzetter */ @Category(IntegrationTest.class) @RunWith(Arquillian.class) @PersistenceTest @Transactional(TransactionMode.COMMIT) @CreateSchema({"create_ccm_cms_schema.sql"}) public class FolderManagerTest { @Inject private FolderRepository folderRepo; @Inject private FolderManager folderManager; public FolderManagerTest() { } @BeforeClass public static void setUpClass() { } @AfterClass public static void tearDownClass() { } @Before public void setUp() { } @After public void tearDown() { } @Deployment public static WebArchive createDeployment() { return ShrinkWrap .create(WebArchive.class, "LibreCCM-org.libreccm.cms.contentsection.ContentSectionManagerTest.war") .addPackage(org.libreccm.auditing.CcmRevision.class.getPackage()) .addPackage(org.libreccm.categorization.Categorization.class .getPackage()) .addPackage(org.libreccm.cdi.utils.CdiUtil.class.getPackage()) .addPackage(org.libreccm.configuration.Configuration.class .getPackage()) .addPackage(org.libreccm.core.CcmCore.class.getPackage()) .addPackage(org.libreccm.jpa.EntityManagerProducer.class .getPackage()) .addPackage(org.libreccm.l10n.LocalizedString.class .getPackage()) .addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class. getPackage()) .addPackage(org.libreccm.security.Permission.class.getPackage()) .addPackage(org.libreccm.web.CcmApplication.class.getPackage()) .addPackage(org.libreccm.workflow.Workflow.class.getPackage()) .addPackage(com.arsdigita.bebop.Component.class.getPackage()) .addPackage(com.arsdigita.bebop.util.BebopConstants.class .getPackage()) .addClass(com.arsdigita.kernel.KernelConfig.class) .addClass(com.arsdigita.runtime.CCMResourceManager.class) .addClass( com.arsdigita.ui.admin.applications.AbstractAppInstanceForm.class) .addClass( com.arsdigita.ui.admin.applications.AbstractAppSettingsPane.class) .addClass( com.arsdigita.ui.admin.applications.DefaultApplicationInstanceForm.class) .addClass( com.arsdigita.ui.admin.applications.DefaultApplicationSettingsPane.class) .addPackage(com.arsdigita.cms.dispatcher.ItemResolver.class. getPackage()) .addPackage(com.arsdigita.util.Lockable.class.getPackage()) .addPackage(com.arsdigita.web.BaseServlet.class.getPackage()) .addPackage(org.librecms.Cms.class.getPackage()) .addPackage(org.librecms.contentsection.Asset.class.getPackage()) .addPackage(org.librecms.contentsection.AttachmentList.class .getPackage()) .addPackage(org.librecms.lifecycle.Lifecycle.class.getPackage()) .addPackage(ContentSection.class.getPackage()) .addPackage(org.libreccm.tests.categories.IntegrationTest.class .getPackage()) // .addAsLibraries(getModuleDependencies()) .addAsLibraries(getCcmCoreDependencies()) .addAsResource("test-persistence.xml", "META-INF/persistence.xml") .addAsResource("configs/shiro.ini", "shiro.ini") .addAsWebInfResource("test-web.xml", "web.xml") .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml"); } @Test @InSequence(10) public void checkInjection() { assertThat(folderRepo, is(not(nullValue()))); assertThat(folderManager, is(not(nullValue()))); } @Test @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/after-create-docs-folder.xml", excludeColumns = {"object_id", "folder_id", "uuid", "unique_id", "category_order", "content_section_id"}) @InSequence(1000) public void createDocumentsFolder() { final Folder parent = folderRepo.findById(-2005L); assertThat(parent, is(not(nullValue()))); final Folder test = folderManager.createFolder("test", parent); assertThat(test, is(not(nullValue()))); assertThat(test.getName(), is(equalTo("test"))); assertThat(test.getSection().getObjectId(), is(-1100L)); } @Test @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/after-create-assets-folder.xml", excludeColumns = {"object_id", "folder_id", "uuid", "unique_id", "category_order", "content_section_id"}) @InSequence(1100) public void createAssetsFolder() { final Folder parent = folderRepo.findById(-2013L); assertThat(parent, is(not(nullValue()))); final Folder test = folderManager.createFolder("test", parent); assertThat(test, is(not(nullValue()))); assertThat(test.getName(), is(equalTo("test"))); assertThat(test.getSection().getObjectId(), is(-1100L)); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(1400) public void createFolderNoParent() { folderManager.createFolder("test", null); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(1500) public void createFolderNullName() { final Folder parent = folderRepo.findById(-2005L); assertThat(parent, is(not(nullValue()))); final Folder test = folderManager.createFolder(null, parent); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(1500) public void createFolderEmptyName() { final Folder parent = folderRepo.findById(-2005L); assertThat(parent, is(not(nullValue()))); final Folder test = folderManager.createFolder(" ", parent); } @Test @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/after-delete-folder.xml", excludeColumns = {"object_id"}) @InSequence(2000) public void deleteFolder() { //docs-1-1-1 final Folder folder = folderRepo.findById(-2007L); folderManager.deleteFolder(folder); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(2100) public void deleteNonEmptyFolder() { final Folder folder = folderRepo.findById(-2008L); folderManager.deleteFolder(folder); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(2100) public void deleteNonEmptySubFolder() { final Folder folder = folderRepo.findById(-2006L); folderManager.deleteFolder(folder); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(2210) public void deleteRootFolder() { final Folder folder = folderRepo.findById(-2003L); folderManager.deleteFolder(folder); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(2220) public void deleteNullFolder() { folderManager.deleteFolder(null); } @Test @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/after-move-folder.xml", excludeColumns = {"category_order"}) @InSequence(3000) public void moveFolder() { //docs-1-1-2 to docs-2 final Folder folder = folderRepo.findById(-2008L); final Folder target = folderRepo.findById(-2010L); folderManager.moveFolder(folder, target); } @Test @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/after-move-folder-same-name.xml", excludeColumns = {"category_order"}) @InSequence(3010) public void moveFolderTargetFolderSameName() { //docs-1/downloads to /docs-2/ final Folder folder = folderRepo.findById(-2009L); final Folder target = folderRepo.findById(-2010L); folderManager.moveFolder(folder, target); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(3100) public void moveDocumentsFolderToAssetsFolder() { final Folder folder = folderRepo.findById(-2009L); final Folder target = folderRepo.findById(-2014L); folderManager.moveFolder(folder, target); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(3110) public void moveAssetsFolderToDocumentsFolder() { final Folder folder = folderRepo.findById(-2014L); final Folder target = folderRepo.findById(-2010L); folderManager.moveFolder(folder, target); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(3110) public void moveFolderToItself() { final Folder folder = folderRepo.findById(-2008L); folderManager.moveFolder(folder, folder); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(3200) public void moveFolderNull() { final Folder target = folderRepo.findById(-2010L); folderManager.moveFolder(null, target); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(3210) public void moveFolderTargetNull() { final Folder folder = folderRepo.findById(-2008L); folderManager.moveFolder(folder, null); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(3300) public void moveFolderWithLiveItems() { final Folder folder = folderRepo.findById(-2011L); final Folder target = folderRepo.findById(-2010L); folderManager.moveFolder(folder, target); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(3310) public void moveFolderWithLiveItemsInSubFolder() { final Folder folder = folderRepo.findById(-2010L); final Folder target = folderRepo.findById(-2005L); folderManager.moveFolder(folder, target); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(3320) public void moveFolderToOtherSection() { final Folder folder = folderRepo.findById(-2008L); final Folder target = folderRepo.findById(-2003L); folderManager.moveFolder(folder, target); } @Test @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @InSequence(3400) public void getFolderPath() { final Folder infoRoot = folderRepo.findById(-2001L); final Folder infoAssets = folderRepo.findById(-2002L); final Folder projectsRoot = folderRepo.findById(-2003L); final Folder projectsAssets = folderRepo.findById(-2004L); final Folder docs1 = folderRepo.findById(-2005L); final Folder docs11 = folderRepo.findById(-2006L); final Folder docs111 = folderRepo.findById(-2007L); final Folder docs112 = folderRepo.findById(-2008L); final Folder downloads1 = folderRepo.findById(-2009L); final Folder docs2 = folderRepo.findById(-2010L); final Folder docs21 = folderRepo.findById(-2011L); final Folder downloads2 = folderRepo.findById(-2012L); final Folder assets1 = folderRepo.findById(-2013L); final Folder assets11 = folderRepo.findById(-2014L); final Folder assets12 = folderRepo.findById(-2015L); assertThat(folderManager.getFolderPath(infoRoot), is(equalTo("/info_root/"))); assertThat(folderManager.getFolderPath(infoAssets), is(equalTo("/info_assets/"))); assertThat(folderManager.getFolderPath(projectsRoot), is(equalTo("/projects_root/"))); assertThat(folderManager.getFolderPath(projectsAssets), is(equalTo("/projects_assets/"))); assertThat(folderManager.getFolderPath(docs1), is(equalTo("/info_root/docs-1/"))); assertThat(folderManager.getFolderPath(docs11), is(equalTo("/info_root/docs-1/docs-1-1/"))); assertThat(folderManager.getFolderPath(docs111), is(equalTo("/info_root/docs-1/docs-1-1/docs-1-1-1/"))); assertThat(folderManager.getFolderPath(docs112), is(equalTo("/info_root/docs-1/docs-1-1/docs-1-1-2/"))); assertThat(folderManager.getFolderPath(downloads1), is(equalTo("/info_root/docs-1/downloads/"))); assertThat(folderManager.getFolderPath(docs2), is(equalTo("/info_root/docs-2/"))); assertThat(folderManager.getFolderPath(docs21), is(equalTo("/info_root/docs-2/docs-2-1/"))); assertThat(folderManager.getFolderPath(downloads2), is(equalTo("/info_root/docs-2/downloads/"))); assertThat(folderManager.getFolderPath(assets1), is(equalTo("/info_assets/assets-1/"))); assertThat(folderManager.getFolderPath(assets11), is(equalTo("/info_assets/assets-1/assets-1-1/"))); assertThat(folderManager.getFolderPath(assets12), is(equalTo("/info_assets/assets-1/assets-1-2/"))); } @Test @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @InSequence(3410) public void getFolderPathWithContentSection() { final Folder infoRoot = folderRepo.findById(-2001L); final Folder infoAssets = folderRepo.findById(-2002L); final Folder projectsRoot = folderRepo.findById(-2003L); final Folder projectsAssets = folderRepo.findById(-2004L); final Folder docs1 = folderRepo.findById(-2005L); final Folder docs11 = folderRepo.findById(-2006L); final Folder docs111 = folderRepo.findById(-2007L); final Folder docs112 = folderRepo.findById(-2008L); final Folder downloads1 = folderRepo.findById(-2009L); final Folder docs2 = folderRepo.findById(-2010L); final Folder docs21 = folderRepo.findById(-2011L); final Folder downloads2 = folderRepo.findById(-2012L); final Folder assets1 = folderRepo.findById(-2013L); final Folder assets11 = folderRepo.findById(-2014L); final Folder assets12 = folderRepo.findById(-2015L); assertThat(folderManager.getFolderPath(infoRoot, true), is(equalTo("info:/info_root/"))); assertThat(folderManager.getFolderPath(infoAssets, true), is(equalTo("info:/info_assets/"))); assertThat(folderManager.getFolderPath(projectsRoot, true), is(equalTo("projects:/projects_root/"))); assertThat(folderManager.getFolderPath(projectsAssets, true), is(equalTo("projects:/projects_assets/"))); assertThat(folderManager.getFolderPath(docs1, true), is(equalTo("info:/info_root/docs-1/"))); assertThat(folderManager.getFolderPath(docs11, true), is(equalTo("info:/info_root/docs-1/docs-1-1/"))); assertThat(folderManager.getFolderPath(docs111, true), is(equalTo("info:/info_root/docs-1/docs-1-1/docs-1-1-1/"))); assertThat(folderManager.getFolderPath(docs112, true), is(equalTo("info:/info_root/docs-1/docs-1-1/docs-1-1-2/"))); assertThat(folderManager.getFolderPath(downloads1, true), is(equalTo("info:/info_root/docs-1/downloads/"))); assertThat(folderManager.getFolderPath(docs2, true), is(equalTo("info:/info_root/docs-2/"))); assertThat(folderManager.getFolderPath(docs21, true), is(equalTo("info:/info_root/docs-2/docs-2-1/"))); assertThat(folderManager.getFolderPath(downloads2, true), is(equalTo("info:/info_root/docs-2/downloads/"))); assertThat(folderManager.getFolderPath(assets1, true), is(equalTo("info:/info_assets/assets-1/"))); assertThat(folderManager.getFolderPath(assets11, true), is(equalTo("info:/info_assets/assets-1/assets-1-1/"))); assertThat(folderManager.getFolderPath(assets12, true), is(equalTo("info:/info_assets/assets-1/assets-1-2/"))); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(3410) public void getFolderPathNull() { folderManager.getFolderPath(null); } @Test(expected = IllegalArgumentException.class) @UsingDataSet("datasets/org/librecms/contentsection/" + "FolderManagerTest/data.xml") @ShouldThrowException(IllegalArgumentException.class) @InSequence(3410) public void getFolderPathNullWithContentSection() { folderManager.getFolderPath(null, true); } }