/** * 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.wiki.trash.test; import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian; import com.liferay.portal.kernel.exception.PortalException; 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.RandomTestUtil; 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.StringPool; import com.liferay.portal.service.test.ServiceTestUtil; import com.liferay.portal.test.rule.LiferayIntegrationTestRule; import com.liferay.trash.kernel.service.TrashEntryLocalServiceUtil; import com.liferay.trash.kernel.service.TrashVersionLocalServiceUtil; import com.liferay.wiki.model.WikiNode; import com.liferay.wiki.model.WikiPage; import com.liferay.wiki.model.WikiPageResource; import com.liferay.wiki.service.WikiPageLocalServiceUtil; import com.liferay.wiki.service.WikiPageResourceLocalServiceUtil; import com.liferay.wiki.util.test.WikiPageTrashHandlerTestUtil; import com.liferay.wiki.util.test.WikiTestUtil; 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 Roberto Díaz */ @RunWith(Arquillian.class) @Sync public class WikiPageDependentsTrashHandlerTest { @ClassRule @Rule public static final AggregateTestRule aggregateTestRule = new AggregateTestRule( new LiferayIntegrationTestRule(), SynchronousDestinationTestRule.INSTANCE); @Before public void setUp() throws Exception { ServiceTestUtil.setUser(TestPropsValues.getUser()); _group = GroupTestUtil.addGroup(); _node = WikiTestUtil.addNode(_group.getGroupId()); } @Test public void testAddPageWithSameTitleAsImplicitlyDeletedPageVersion() throws Exception { RelatedPages relatedPages = buildRelatedPages(); WikiPage childPage = relatedPages.getChildPage(); String childPageOriginalTitle = childPage.getTitle(); movePageToTrash(relatedPages.getPage()); childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); Assert.assertNotEquals(childPageOriginalTitle, childPage.getTitle()); WikiPage newPage = WikiTestUtil.addPage( TestPropsValues.getUserId(), _group.getGroupId(), _node.getNodeId(), childPageOriginalTitle, true); Assert.assertNotNull(newPage); } @Test public void testMoveExplicitlyChildPageAndParentPageWithRedirectorPageToTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); movePageToTrash(relatedPages.getRedirectorPage()); movePageToTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertTrue(page.isInTrashExplicitly()); Assert.assertTrue(childPage.isInTrashExplicitly()); Assert.assertTrue(redirectorPage.isInTrashExplicitly()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); } @Test public void testMoveExplicitlyChildPageWithChildPageAndParentPageToTrash() throws Exception { int initialBaseModelsCount = WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node); int initialTrashEntriesCount = TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId()); RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); movePageToTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage grandchildPage = WikiPageLocalServiceUtil.getPage( relatedPages.getGrandchildPageResourcePrimKey()); Assert.assertTrue(page.isInTrashExplicitly()); Assert.assertTrue(childPage.isInTrashExplicitly()); Assert.assertTrue(grandchildPage.isInTrashImplicitly()); Assert.assertEquals( childPage.getTitle(), grandchildPage.getParentTitle()); Assert.assertEquals( initialBaseModelsCount + 1, WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node)); Assert.assertEquals( initialTrashEntriesCount + 2, TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId())); } @Test public void testMoveExplicitlyChildPageWithChildPageToTrash() throws Exception { int initialBaseModelsCount = WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node); int initialTrashEntriesCount = TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId()); RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage grandchildPage = WikiPageLocalServiceUtil.getPage( relatedPages.getGrandchildPageResourcePrimKey()); Assert.assertFalse(page.isInTrash()); Assert.assertTrue(childPage.isInTrashExplicitly()); Assert.assertTrue(grandchildPage.isInTrashImplicitly()); Assert.assertEquals( childPage.getTitle(), grandchildPage.getParentTitle()); Assert.assertEquals( initialBaseModelsCount + 3, WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node)); Assert.assertEquals( initialTrashEntriesCount + 1, TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId())); } @Test public void testMoveExplicitlyPageAndRedirectorPageToTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getRedirectorPage()); movePageToTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertTrue(page.isInTrashExplicitly()); Assert.assertTrue(redirectorPage.isInTrashExplicitly()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); } @Test public void testMoveExplicitlyParentPageAndChildPageAndRedirectorPageToTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); movePageToTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertTrue(page.isInTrashExplicitly()); Assert.assertTrue(childPage.isInTrashExplicitly()); Assert.assertTrue(redirectorPage.isInTrashImplicitly()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); } @Test public void testMoveExplicitlyParentPageAndChildPagePageWithChildToTrash() throws Exception { int initialBaseModelsCount = WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node); int initialTrashEntriesCount = TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId()); RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage grandchildPage = WikiPageLocalServiceUtil.getPage( relatedPages.getGrandchildPageResourcePrimKey()); Assert.assertTrue(page.isInTrashExplicitly()); Assert.assertTrue(childPage.isInTrashImplicitly()); Assert.assertTrue(grandchildPage.isInTrashImplicitly()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals( childPage.getTitle(), grandchildPage.getParentTitle()); Assert.assertEquals( initialBaseModelsCount + 1, WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node)); Assert.assertEquals( initialTrashEntriesCount + 1, TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId())); } @Test public void testMoveExplicitlyParentPageAndChildPageToTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); movePageToTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); Assert.assertTrue(page.isInTrashExplicitly()); Assert.assertTrue(childPage.isInTrashExplicitly()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); } @Test public void testMoveExplicitlyParentPageAndRedirectorPageToTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getRedirectorPage()); movePageToTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertTrue(childPage.isInTrashImplicitly()); Assert.assertTrue(redirectorPage.isInTrashExplicitly()); Assert.assertTrue(page.isInTrashExplicitly()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); } @Test public void testMoveInitialParentPageToTrash() throws Exception { int initialBaseModelsCount = WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node); int initialTrashEntriesCount = TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId()); RelatedPages relatedPages = buildRelatedPages(); WikiPage parentPage = relatedPages.getParentPage(); WikiPage page = relatedPages.getPage(); WikiPage newParentPage = WikiTestUtil.addPage( TestPropsValues.getUserId(), _group.getGroupId(), _node.getNodeId(), RandomTestUtil.randomString(), true); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group.getGroupId()); WikiPageLocalServiceUtil.changeParent( TestPropsValues.getUserId(), _node.getNodeId(), page.getTitle(), newParentPage.getTitle(), serviceContext); movePageToTrash(parentPage); newParentPage = WikiPageLocalServiceUtil.getPage( newParentPage.getResourcePrimKey()); page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); parentPage = WikiPageLocalServiceUtil.getPage( parentPage.getResourcePrimKey()); Assert.assertFalse(page.isInTrash()); Assert.assertFalse(newParentPage.isInTrash()); Assert.assertTrue(parentPage.isInTrashExplicitly()); Assert.assertEquals(page.getParentTitle(), newParentPage.getTitle()); Assert.assertEquals(newParentPage.getTitle(), page.getParentTitle()); Assert.assertEquals( initialBaseModelsCount + 5, WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node)); Assert.assertEquals( initialTrashEntriesCount + 1, TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId())); } @Test public void testMovePageWithRedirectorPageToTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertTrue(page.isInTrashExplicitly()); Assert.assertTrue(redirectorPage.isInTrashImplicitly()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); } @Test public void testMoveParentPageToTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); Assert.assertTrue(page.isInTrashExplicitly()); Assert.assertTrue(childPage.isInTrashImplicitly()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); } @Test public void testMoveParentPageWithRedirectorPageToTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); WikiPage childRedirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildRedirectorPageResourcePrimKey()); Assert.assertTrue(page.isInTrashExplicitly()); Assert.assertTrue(childPage.isInTrashImplicitly()); Assert.assertTrue(redirectorPage.isInTrashImplicitly()); Assert.assertTrue(childRedirectorPage.isInTrashImplicitly()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals( page.getTitle(), childRedirectorPage.getParentTitle()); Assert.assertEquals( childPage.getTitle(), childRedirectorPage.getRedirectTitle()); } @Test public void testMoveRedirectorPageToTrash() throws Exception { int initialBaseModelsCount = WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node); int initialTrashEntriesCount = TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId()); RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getRedirectorPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage grandchildPage = WikiPageLocalServiceUtil.getPage( relatedPages.getGrandchildPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertFalse(childPage.isInTrash()); Assert.assertFalse(page.isInTrash()); Assert.assertFalse(grandchildPage.isInTrash()); Assert.assertTrue(redirectorPage.isInTrashExplicitly()); Assert.assertEquals( childPage.getTitle(), grandchildPage.getParentTitle()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); Assert.assertEquals( initialTrashEntriesCount + 1, TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId())); Assert.assertEquals( initialBaseModelsCount + 5, WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node)); } @Test public void testRestoreExplicitlyTrashedChildPageAndParentPageWithRedirectorPageFromTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getChildPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); Assert.assertFalse(childPage.isInTrash()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); } @Test public void testRestoreExplicitlyTrashedChildPageWithChildPageFromTrash() throws Exception { int initialBaseModelsCount = WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node); int initialTrashEntriesCount = TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId()); RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); restoreFromTrash(relatedPages.getChildPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage grandchildPage = WikiPageLocalServiceUtil.getPage( relatedPages.getGrandchildPageResourcePrimKey()); Assert.assertFalse(page.isInTrash()); Assert.assertFalse(childPage.isInTrash()); Assert.assertFalse(grandchildPage.isInTrash()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals( childPage.getTitle(), grandchildPage.getParentTitle()); Assert.assertEquals( initialTrashEntriesCount, TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId())); Assert.assertEquals( initialBaseModelsCount + 6, WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node)); } @Test public void testRestoreExplicitlyTrashedChildPageWithTrashedParentFromTrash() throws Exception { int initialBaseModelsCount = WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node); int initialTrashEntriesCount = TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId()); RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getChildPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage grandchildPage = WikiPageLocalServiceUtil.getPage( relatedPages.getGrandchildPageResourcePrimKey()); Assert.assertTrue(page.isInTrashExplicitly()); Assert.assertFalse(childPage.isInTrash()); Assert.assertFalse(grandchildPage.isInTrash()); Assert.assertEquals(StringPool.BLANK, childPage.getParentTitle()); Assert.assertEquals( childPage.getTitle(), grandchildPage.getParentTitle()); Assert.assertEquals( initialBaseModelsCount + 4, WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node)); Assert.assertEquals( initialTrashEntriesCount + 1, TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId())); } @Test public void testRestoreExplicitlyTrashedPageWithRedirectorPageFromTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getRedirectorPage()); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertFalse(page.isInTrash()); Assert.assertTrue(redirectorPage.isInTrashExplicitly()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); } @Test public void testRestoreExplicitlyTrashedParentPageAndChildPageAndRedirectorPageFromTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); movePageToTrash(relatedPages.getRedirectorPage()); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getChildPage()); restoreFromTrash(relatedPages.getRedirectorPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertFalse(childPage.isInTrash()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); } @Test public void testRestoreExplicitlyTrashedParentPageAndChildPageFromTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getChildPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); Assert.assertFalse(childPage.isInTrash()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); } @Test public void testRestoreExplicitlyTrashedParentPageAndRedirectorFromTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getRedirectorPage()); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getRedirectorPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertFalse(redirectorPage.isInTrash()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); } @Test public void testRestoreExplicitlyTrashedParentPageFromTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); Assert.assertFalse(childPage.isInTrash()); Assert.assertFalse(page.isInTrash()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); } @Test public void testRestoreExplicitlyTrashedParentPageWitExplicitlyTrashedChildPageFromTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); Assert.assertFalse(page.isInTrash()); Assert.assertTrue(childPage.isInTrashExplicitly()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); } @Test public void testRestoreExplicitlyTrashedParentPageWithChildPageAndgrandchildPageFromTrash() throws Exception { int initialBaseModelsCount = WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node); int initialTrashEntriesCount = TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId()); RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage grandchildPage = WikiPageLocalServiceUtil.getPage( relatedPages.getGrandchildPageResourcePrimKey()); Assert.assertFalse(page.isInTrash()); Assert.assertFalse(childPage.isInTrash()); Assert.assertFalse(grandchildPage.isInTrash()); Assert.assertEquals( childPage.getTitle(), grandchildPage.getParentTitle()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals( initialTrashEntriesCount, TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId())); Assert.assertEquals( initialBaseModelsCount + 6, WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node)); } @Test public void testRestoreExplicitlyTrashedParentPageWithRedirectorPageFromTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getRedirectorPage()); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertFalse(page.isInTrash()); Assert.assertFalse(childPage.isInTrash()); Assert.assertTrue(redirectorPage.isInTrashExplicitly()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); restoreFromTrash(relatedPages.getRedirectorPage()); redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertFalse(redirectorPage.isInTrash()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); } @Test public void testRestoreExplicitlyTrashedParentPageWithRedirectorPageToTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); movePageToTrash(relatedPages.getRedirectorPage()); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertFalse(page.isInTrash()); Assert.assertTrue(childPage.isInTrashExplicitly()); Assert.assertTrue(redirectorPage.isInTrashExplicitly()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); } @Test public void testRestoreExplicitlyTrashedRedirectorPageWithRestoredPageFromTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getRedirectorPage()); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getRedirectorPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertFalse(redirectorPage.isInTrash()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); } @Test public void testRestorePageToADifferentNode() throws Exception { RelatedPages relatedPages = buildRelatedPages(); WikiPageTrashHandlerTestUtil.moveParentBaseModelToTrash( _node.getNodeId()); WikiNode newNode = WikiTestUtil.addNode(_group.getGroupId()); moveTrashEntry( relatedPages.getChildPageResourcePrimKey(), newNode.getNodeId()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertEquals(_node.getNodeId(), page.getNodeId()); Assert.assertEquals(newNode.getNodeId(), childPage.getNodeId()); Assert.assertEquals(_node.getNodeId(), redirectorPage.getNodeId()); Assert.assertNull(childPage.getParentPage()); WikiPageResource pageResource = WikiPageResourceLocalServiceUtil.getWikiPageResource( page.getResourcePrimKey()); WikiPageResource childPageResource = WikiPageResourceLocalServiceUtil.getWikiPageResource( childPage.getResourcePrimKey()); WikiPageResource redirectorPageResource = WikiPageResourceLocalServiceUtil.getWikiPageResource( redirectorPage.getResourcePrimKey()); Assert.assertEquals(_node.getNodeId(), pageResource.getNodeId()); Assert.assertEquals(newNode.getNodeId(), childPageResource.getNodeId()); Assert.assertEquals( _node.getNodeId(), redirectorPageResource.getNodeId()); } @Test public void testRestorePageToADifferentNodeAndParent() throws Exception { RelatedPages relatedPages = buildRelatedPages(); WikiPageTrashHandlerTestUtil.moveParentBaseModelToTrash( _node.getNodeId()); WikiNode newNode = WikiTestUtil.addNode(_group.getGroupId()); WikiPage newParentPage = WikiTestUtil.addPage( _group.getGroupId(), newNode.getNodeId(), true); moveTrashEntry( relatedPages.getChildPageResourcePrimKey(), newParentPage.getResourcePrimKey()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertEquals(_node.getNodeId(), page.getNodeId()); Assert.assertEquals(newNode.getNodeId(), childPage.getNodeId()); Assert.assertEquals(_node.getNodeId(), redirectorPage.getNodeId()); Assert.assertEquals( newParentPage.getTitle(), childPage.getParentTitle()); } @Test public void testRestorePageWithParentPageInTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getParentPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage newParentPage = WikiTestUtil.addPage( _group.getGroupId(), _node.getNodeId(), true); movePage(page, newParentPage); page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); Assert.assertFalse(page.isInTrash()); Assert.assertEquals(newParentPage.getTitle(), page.getParentTitle()); } @Test public void testRestoreParentPageWithExplicitlyTrashedRedirectorPageFromTrash() throws Exception { RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getChildPage()); movePageToTrash(relatedPages.getPage()); restoreFromTrash(relatedPages.getPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertFalse(page.isInTrash()); Assert.assertTrue(childPage.isInTrashExplicitly()); Assert.assertFalse(redirectorPage.isInTrash()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); } @Test public void testRestoreRedirectorPageWithParentPageFromTrash() throws Exception { int initialBaseModelsCount = WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node); int initialTrashEntriesCount = TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId()); RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getRedirectorPage()); restoreFromTrash(relatedPages.getRedirectorPage()); WikiPage page = WikiPageLocalServiceUtil.getPage( relatedPages.getPageResourcePrimKey()); WikiPage childPage = WikiPageLocalServiceUtil.getPage( relatedPages.getChildPageResourcePrimKey()); WikiPage grandchildPage = WikiPageLocalServiceUtil.getPage( relatedPages.getGrandchildPageResourcePrimKey()); WikiPage redirectorPage = WikiPageLocalServiceUtil.getPage( relatedPages.getRedirectorPageResourcePrimKey()); Assert.assertFalse(page.isInTrash()); Assert.assertFalse(childPage.isInTrash()); Assert.assertFalse(grandchildPage.isInTrash()); Assert.assertFalse(redirectorPage.isInTrashExplicitly()); Assert.assertEquals(page.getTitle(), childPage.getParentTitle()); Assert.assertEquals( childPage.getTitle(), grandchildPage.getParentTitle()); Assert.assertEquals(page.getTitle(), redirectorPage.getRedirectTitle()); Assert.assertEquals( initialTrashEntriesCount, TrashEntryLocalServiceUtil.getEntriesCount(_group.getGroupId())); Assert.assertEquals( initialBaseModelsCount + 6, WikiPageTrashHandlerTestUtil.getNotInTrashBaseModelsCount(_node)); } @Test public void testTrashVersionCreationWhenMovingToTrash() throws Exception { int initialTrashVersionsCount = TrashVersionLocalServiceUtil.getTrashVersionsCount(); RelatedPages relatedPages = buildRelatedPages(); movePageToTrash(relatedPages.getPage()); Assert.assertEquals( initialTrashVersionsCount + 5, TrashVersionLocalServiceUtil.getTrashVersionsCount()); } @Test public void testTrashVersionDeletionWhenRestoringFromTrash() throws Exception { int initialTrashVersionCount = TrashVersionLocalServiceUtil.getTrashVersionsCount(); RelatedPages relatedPages = buildRelatedPages(); WikiPage page = relatedPages.getPage(); page = WikiPageLocalServiceUtil.movePageToTrash( TestPropsValues.getUserId(), _node.getNodeId(), page.getTitle()); restoreFromTrash(page); Assert.assertEquals( initialTrashVersionCount, TrashVersionLocalServiceUtil.getTrashVersionsCount()); } protected RelatedPages buildRelatedPages() throws Exception { WikiTestUtil.addPage( TestPropsValues.getUserId(), _group.getGroupId(), _node.getNodeId(), _PARENT_PAGE_TITLE, true); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group.getGroupId()); createRedirectorAndRedirectPage( _PARENT_PAGE_TITLE, _REDIRECTOR_PAGE_TITLE, _PAGE_TITLE, serviceContext); createRedirectorAndRedirectPage( _PAGE_TITLE, _CHILD_REDIRECTOR_PAGE_TITLE, _CHILD_PAGE_TITLE, serviceContext); WikiTestUtil.addPage( TestPropsValues.getUserId(), _node.getNodeId(), _GRANDCHILD_PAGE_TITLE, RandomTestUtil.randomString(), _CHILD_PAGE_TITLE, true, serviceContext); return new RelatedPages( WikiPageLocalServiceUtil.getPage( _node.getNodeId(), _PARENT_PAGE_TITLE), WikiPageLocalServiceUtil.getPage(_node.getNodeId(), _PAGE_TITLE), WikiPageLocalServiceUtil.getPage( _node.getNodeId(), _CHILD_PAGE_TITLE), WikiPageLocalServiceUtil.getPage( _node.getNodeId(), _GRANDCHILD_PAGE_TITLE), WikiPageLocalServiceUtil.getPage( _node.getNodeId(), _REDIRECTOR_PAGE_TITLE), WikiPageLocalServiceUtil.getPage( _node.getNodeId(), _CHILD_REDIRECTOR_PAGE_TITLE)); } protected void createRedirectorAndRedirectPage( String parentPageTitle, String oldTitle, String newTitle, ServiceContext serviceContext) throws Exception { WikiTestUtil.addPage( TestPropsValues.getUserId(), _node.getNodeId(), oldTitle, RandomTestUtil.randomString(), parentPageTitle, true, serviceContext); WikiPageLocalServiceUtil.renamePage( TestPropsValues.getUserId(), _node.getNodeId(), oldTitle, newTitle, serviceContext); } protected void movePage(WikiPage trashedPage, WikiPage newParentPage) throws PortalException { TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( WikiPage.class.getName()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group.getGroupId()); trashHandler.moveEntry( TestPropsValues.getUserId(), trashedPage.getResourcePrimKey(), newParentPage.getResourcePrimKey(), serviceContext); } protected void movePageToTrash(WikiPage page) throws PortalException { WikiPageLocalServiceUtil.movePageToTrash( TestPropsValues.getUserId(), _node.getNodeId(), page.getTitle()); } protected void moveTrashEntry(long classPK, long newContainerId) throws Exception { TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( WikiPage.class.getName()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group.getGroupId()); trashHandler.moveTrashEntry( TestPropsValues.getUserId(), classPK, newContainerId, serviceContext); } protected void restoreFromTrash(WikiPage page) throws Exception { TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( WikiPage.class.getName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), page.getResourcePrimKey()); } private static final String _CHILD_PAGE_TITLE = "ChildPage"; private static final String _CHILD_REDIRECTOR_PAGE_TITLE = "ChildRedirectorPage"; private static final String _GRANDCHILD_PAGE_TITLE = "GrandchildPage"; private static final String _PAGE_TITLE = "Page"; private static final String _PARENT_PAGE_TITLE = "ParentPage"; private static final String _REDIRECTOR_PAGE_TITLE = "RedirectorPage"; @DeleteAfterTestRun private Group _group; private WikiNode _node; private static class RelatedPages { public RelatedPages( WikiPage parentPage, WikiPage page, WikiPage childPage, WikiPage grandchildPage, WikiPage redirectorPage, WikiPage childRedirectorPage) { _parentPage = parentPage; _page = page; _grandchildPage = grandchildPage; _childPage = childPage; _redirectorPage = redirectorPage; _childRedirectorPage = childRedirectorPage; } public WikiPage getChildPage() { return _childPage; } public long getChildPageResourcePrimKey() { return _childPage.getResourcePrimKey(); } public long getChildRedirectorPageResourcePrimKey() { return _childRedirectorPage.getResourcePrimKey(); } public long getGrandchildPageResourcePrimKey() { return _grandchildPage.getResourcePrimKey(); } public WikiPage getPage() { return _page; } public long getPageResourcePrimKey() { return _page.getResourcePrimKey(); } public WikiPage getParentPage() { return _parentPage; } public WikiPage getRedirectorPage() { return _redirectorPage; } public long getRedirectorPageResourcePrimKey() { return _redirectorPage.getResourcePrimKey(); } private final WikiPage _childPage; private final WikiPage _childRedirectorPage; private final WikiPage _grandchildPage; private final WikiPage _page; private final WikiPage _parentPage; private final WikiPage _redirectorPage; } }