/** * 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.trash.test.util; import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery; import com.liferay.portal.kernel.dao.orm.DynamicQuery; import com.liferay.portal.kernel.dao.orm.Property; import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil; import com.liferay.portal.kernel.exception.NoSuchModelException; import com.liferay.portal.kernel.model.BaseModel; import com.liferay.portal.kernel.model.ClassedModel; import com.liferay.portal.kernel.model.ContainerModel; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.model.SystemEventConstants; import com.liferay.portal.kernel.model.TrashedModel; import com.liferay.portal.kernel.model.WorkflowedModel; import com.liferay.portal.kernel.search.Indexer; import com.liferay.portal.kernel.search.IndexerRegistryUtil; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.service.SystemEventLocalServiceUtil; import com.liferay.portal.kernel.test.rule.DeleteAfterTestRun; 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.PortalUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.portal.kernel.workflow.WorkflowThreadLocal; import com.liferay.trash.kernel.exception.RestoreEntryException; import com.liferay.trash.kernel.exception.TrashEntryException; import com.liferay.trash.kernel.model.TrashEntry; import com.liferay.trash.kernel.service.TrashEntryLocalServiceUtil; import com.liferay.trash.kernel.service.TrashEntryServiceUtil; import com.liferay.trash.kernel.service.TrashVersionLocalServiceUtil; import java.util.ArrayList; import java.util.List; import java.util.Objects; import org.junit.Assert; import org.junit.Assume; import org.junit.Before; import org.junit.Test; /** * @author Brian Wing Shun Chan * @author Eudaldo Alonso * @author Manuel de la Peña * @author Cristina González */ public abstract class BaseTrashHandlerTestCase { @Before public void setUp() throws Exception { group = GroupTestUtil.addGroup(); } @Test public void testDeleteTrashVersions() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialTrashVersionsCount = TrashVersionLocalServiceUtil.getTrashVersionsCount(); baseModel = addBaseModel(parentBaseModel, serviceContext); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); WhenHasParent whenHasParent = (WhenHasParent)this; whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialTrashVersionsCount, TrashVersionLocalServiceUtil.getTrashVersionsCount()); } @Test public void testMoveBaseModelToTrash() throws Exception { ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsCount, getNotInTrashBaseModelsCount(parentBaseModel)); Assert.assertEquals( initialTrashEntriesCount + 1, getTrashEntriesCount(group.getGroupId())); TrashEntry trashEntry = TrashEntryLocalServiceUtil.getEntry( getBaseModelClassName(), getTrashEntryClassPK(baseModel)); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); Assert.assertEquals( 1, getDeletionSystemEventCount( trashHandler, trashEntry.getSystemEventSetKey())); } @Test public void testMoveBaseModelToTrashIndexable() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeFalse(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsSearchCount, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount + 1, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testMoveBaseModelToTrashIndexableAndReindex() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeFalse(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); reindex(baseModel); Assert.assertEquals( initialBaseModelsSearchCount, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount + 1, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testMoveBaseModelToTrashIndexableWithEqualsParentAndBaseModelClass() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsSearchCount + 1, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount + 1, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testMoveBaseModelToTrashIndexableWithEqualsParentAndBaseModelClassAndReindex() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); reindex(baseModel); Assert.assertEquals( initialBaseModelsSearchCount + 1, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount + 1, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testMoveBaseModelToTrashIsNotVisible() throws Exception { Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); WhenIsAssetableBaseModel whenIsAssetableBaseModel = (WhenIsAssetableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); Assert.assertFalse( whenIsAssetableBaseModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testMoveBaseModelToTrashStatusIsInTrash() throws Exception { ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); WorkflowedModel workflowedModel = getWorkflowedModel(baseModel); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); workflowedModel = getWorkflowedModel( getBaseModel((Long)baseModel.getPrimaryKeyObj())); Assert.assertEquals( WorkflowConstants.STATUS_IN_TRASH, workflowedModel.getStatus()); } @Test public void testMoveBaseModelToTrashUniqueTitleNotChange() throws Exception { ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); String uniqueTitle = getUniqueTitle(baseModel); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); if (uniqueTitle != null) { Assert.assertEquals(uniqueTitle, getUniqueTitle(baseModel)); } } @Test public void testTrashAndDeleteWithApprovedStatus() throws Exception { ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsCount, getNotInTrashBaseModelsCount(parentBaseModel)); Assert.assertEquals(1, getDeletionSystemEventCount(trashHandler, -1)); } @Test public void testTrashAndDeleteWithApprovedStatusIndexable() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeFalse(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsSearchCount, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashAndDeleteWithApprovedStatusIndexableAndEqualsParentAndBaseModelClass() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsSearchCount + 1, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashAndDeleteWithApprovedStatusIsNotFound() throws Exception { Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); WhenIsAssetableBaseModel whenIsAssetableBaseModel = (WhenIsAssetableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); Assert.assertNull(whenIsAssetableBaseModel.fetchAssetEntry(baseModel)); } @Test public void testTrashAndDeleteWithDraftStatus() throws Exception { Assume.assumeTrue(this instanceof WhenHasDraftStatus); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); baseModel = addDraftBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsCount, getNotInTrashBaseModelsCount(parentBaseModel)); Assert.assertEquals(1, getDeletionSystemEventCount(trashHandler, -1)); } @Test public void testTrashAndDeleteWithDraftStatusIndexable() throws Exception { Assume.assumeTrue(this instanceof WhenHasDraftStatus); Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addDraftBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsSearchCount, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashAndDeleteWithDraftStatusIsNotFound() throws Exception { Assume.assumeTrue(this instanceof WhenHasDraftStatus); Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); WhenIsAssetableBaseModel whenIsAssetableBaseModel = (WhenIsAssetableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addDraftBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); Assert.assertNull(whenIsAssetableBaseModel.fetchAssetEntry(baseModel)); } @Test public void testTrashAndRestoreWithApprovedStatus() throws Exception { ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsCount + 1, getNotInTrashBaseModelsCount(parentBaseModel)); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); Assert.assertEquals(0, getDeletionSystemEventCount(trashHandler, -1)); } @Test public void testTrashAndRestoreWithApprovedStatusIndexable() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeFalse(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsSearchCount + 1, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashAndRestoreWithApprovedStatusIndexableAndEqualsParentAndBaseModelClass() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsSearchCount + 2, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashAndRestoreWithApprovedStatusIsVisible() throws Exception { Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); WhenIsAssetableBaseModel whenIsAssetableBaseModel = (WhenIsAssetableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); Assert.assertTrue( whenIsAssetableBaseModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testTrashAndRestoreWithApprovedStatusRestoreStatus() throws Exception { ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); WorkflowedModel workflowedModel = getWorkflowedModel(baseModel); int oldStatus = workflowedModel.getStatus(); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); workflowedModel = getWorkflowedModel(baseModel); Assert.assertEquals(oldStatus, workflowedModel.getStatus()); } @Test public void testTrashAndRestoreWithApprovedStatusRestoreUniqueTitle() throws Exception { ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); String uniqueTitle = getUniqueTitle(baseModel); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); if (uniqueTitle != null) { Assert.assertEquals(uniqueTitle, getUniqueTitle(baseModel)); } } @Test public void testTrashAndRestoreWithDraftStatus() throws Exception { Assume.assumeTrue(this instanceof WhenHasDraftStatus); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); baseModel = addDraftBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsCount + 1, getNotInTrashBaseModelsCount(parentBaseModel)); Assert.assertEquals(0, getDeletionSystemEventCount(trashHandler, -1)); } @Test public void testTrashAndRestoreWithDraftStatusIndexable() throws Exception { Assume.assumeTrue(this instanceof WhenHasDraftStatus); Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addDraftBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsSearchCount, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashAndRestoreWithDraftStatusIsNotVisible() throws Exception { Assume.assumeTrue(this instanceof WhenHasDraftStatus); Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); WhenIsAssetableBaseModel whenIsAssetableBaseModel = (WhenIsAssetableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addDraftBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); Assert.assertFalse( whenIsAssetableBaseModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testTrashAndRestoreWithDraftStatusRestoreStatus() throws Exception { Assume.assumeTrue(this instanceof WhenHasDraftStatus); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addDraftBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); WorkflowedModel workflowedModel = getWorkflowedModel(baseModel); int oldStatus = workflowedModel.getStatus(); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); workflowedModel = getWorkflowedModel(baseModel); Assert.assertEquals(oldStatus, workflowedModel.getStatus()); } @Test public void testTrashAndRestoreWithDraftStatusRestoreUniqueTitle() throws Exception { Assume.assumeTrue(this instanceof WhenHasDraftStatus); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addDraftBaseModel(parentBaseModel, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); String uniqueTitle = getUniqueTitle(baseModel); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); if (uniqueTitle != null) { Assert.assertEquals(uniqueTitle, getUniqueTitle(baseModel)); } } @Test public void testTrashBaseModelAndDeleteWithParentIsNotRestorable() throws Exception { Assume.assumeTrue(this instanceof WhenIsRestorableBaseModel); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); deleteParentBaseModel(parentBaseModel, false); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); boolean restorable = trashHandler.isRestorable( getAssetClassPK(baseModel)); Assert.assertFalse(restorable); } @Test public void testTrashBaseModelAndParentAndDeleteGroupTrashEntries() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); TrashEntryServiceUtil.deleteEntries(group.getGroupId()); Assert.assertEquals(0, getTrashEntriesCount(group.getGroupId())); try { getBaseModel((Long)baseModel.getPrimaryKeyObj()); Assert.fail(); } catch (NoSuchModelException nsme) { } } @Test public void testTrashBaseModelAndParentAndDeleteParent() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsMoveableFromTrashBaseModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); TrashHandler parentTrashHandler = TrashHandlerRegistryUtil.getTrashHandler( whenHasParent.getParentBaseModelClassName()); parentTrashHandler.deleteTrashEntry( (Long)parentBaseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsCount, getNotInTrashBaseModelsCount(parentBaseModel)); Assert.assertEquals( initialTrashEntriesCount + 1, getTrashEntriesCount(group.getGroupId())); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialTrashEntriesCount, getTrashEntriesCount(group.getGroupId())); } @Test public void testTrashBaseModelAndParentAndDeleteParentNoMoveableFromTrash() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeFalse(this instanceof WhenIsMoveableFromTrashBaseModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); TrashHandler parentTrashHandler = TrashHandlerRegistryUtil.getTrashHandler( whenHasParent.getParentBaseModelClassName()); parentTrashHandler.deleteTrashEntry( (Long)parentBaseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsCount, getNotInTrashBaseModelsCount(parentBaseModel)); try { getBaseModel((Long)baseModel.getPrimaryKeyObj()); Assert.fail(); } catch (NoSuchModelException nsme) { } Assert.assertEquals( initialTrashEntriesCount, getTrashEntriesCount(group.getGroupId())); } @Test public void testTrashBaseModelAndParentAndRestore() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); WhenHasParent whenHasParent = (WhenHasParent)this; int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); Assert.assertEquals( initialTrashEntriesCount + 2, getTrashEntriesCount(group.getGroupId())); TrashHandler parentTrashHandler = TrashHandlerRegistryUtil.getTrashHandler( whenHasParent.getParentBaseModelClassName()); if (Objects.equals( getBaseModelClassName(), whenHasParent.getParentBaseModelClassName())) { Assert.assertEquals( 0, parentTrashHandler.getTrashContainedModelsCount( (Long)parentBaseModel.getPrimaryKeyObj())); Assert.assertEquals( 1, parentTrashHandler.getTrashContainerModelsCount( (Long)parentBaseModel.getPrimaryKeyObj())); } else { Assert.assertEquals( 1, parentTrashHandler.getTrashContainedModelsCount( (Long)parentBaseModel.getPrimaryKeyObj())); Assert.assertEquals( 0, parentTrashHandler.getTrashContainerModelsCount( (Long)parentBaseModel.getPrimaryKeyObj())); } } @Test public void testTrashBaseModelAndParentAndRestoreModel() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsMoveableFromTrashBaseModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsMoveableFromTrashBaseModel whenIsMoveableFromTrashBaseModel = (WhenIsMoveableFromTrashBaseModel)this; BaseModel<?> newParentBaseModel = whenIsMoveableFromTrashBaseModel.moveBaseModelFromTrash( baseModel, group, serviceContext); Assert.assertEquals( initialBaseModelsCount + 1, getNotInTrashBaseModelsCount(newParentBaseModel)); Assert.assertEquals( initialTrashEntriesCount + 1, getTrashEntriesCount(group.getGroupId())); } @Test public void testTrashBaseModelAndParentAndRestoreModelIsVisible() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); Assume.assumeTrue(this instanceof WhenIsMoveableFromTrashBaseModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsMoveableFromTrashBaseModel whenIsMoveableFromTrashBaseModel = (WhenIsMoveableFromTrashBaseModel)this; whenIsMoveableFromTrashBaseModel.moveBaseModelFromTrash( baseModel, group, serviceContext); WhenIsAssetableBaseModel whenIsAssetableBaseModel = (WhenIsAssetableBaseModel)this; Assert.assertTrue( whenIsAssetableBaseModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testTrashBaseModelAndParentIsInContainerBaseModel() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); Assert.assertTrue(isInTrashContainer(baseModel)); } @Test public void testTrashBaseModelAndParentIsNotVisible() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsAssetableBaseModel whenIsAssetableBaseModel = (WhenIsAssetableBaseModel)this; Assert.assertFalse( whenIsAssetableBaseModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testTrashBaseModelAndTrashParentAndDeleteParentIsNotRestorable() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsRestorableBaseModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); TrashHandler parentTrashHandler = TrashHandlerRegistryUtil.getTrashHandler( whenHasParent.getParentBaseModelClassName()); parentTrashHandler.deleteTrashEntry( (Long)parentBaseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); boolean restorable = trashHandler.isRestorable( getAssetClassPK(baseModel)); Assert.assertFalse(restorable); } @Test public void testTrashBaseModelAndTrashParentIsNotRestorable() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsRestorableBaseModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); boolean restorable = trashHandler.isRestorable( getAssetClassPK(baseModel)); Assert.assertFalse(restorable); } @Test public void testTrashBaseModelIsInTrashContainer() throws Exception { ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); Assert.assertFalse(isInTrashContainer(baseModel)); } @Test public void testTrashBaseModelWithParentIsRestorable() throws Exception { Assume.assumeTrue(this instanceof WhenIsRestorableBaseModel); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); boolean restorable = trashHandler.isRestorable( getAssetClassPK(baseModel)); Assert.assertTrue(restorable); } @Test public void testTrashDuplicate() throws Exception { Assume.assumeTrue(this instanceof WhenCanBeDuplicatedInTrash); WhenCanBeDuplicatedInTrash whenCanBeDuplicatedInTrash = (WhenCanBeDuplicatedInTrash)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); baseModel = addBaseModel(parentBaseModel, serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); String baseModelName = whenCanBeDuplicatedInTrash.getBaseModelName( baseModel); Assert.assertTrue(isValidTrashTitle(baseModelName)); BaseModel<?> duplicateBaseModel = addBaseModel( parentBaseModel, serviceContext); moveBaseModelToTrash((Long)duplicateBaseModel.getPrimaryKeyObj()); duplicateBaseModel = getBaseModel( (Long)duplicateBaseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsCount, getNotInTrashBaseModelsCount(parentBaseModel)); Assert.assertEquals( initialTrashEntriesCount + 2, getTrashEntriesCount(group.getGroupId())); String duplicateBaseModelName = whenCanBeDuplicatedInTrash.getBaseModelName(duplicateBaseModel); Assert.assertTrue(isValidTrashTitle(duplicateBaseModelName)); } @Test public void testTrashGrandparentBaseModel() throws Exception { Assume.assumeTrue(this instanceof WhenHasGrandParent); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> grandparentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( grandparentBaseModel); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, (Long)grandparentBaseModel.getPrimaryKeyObj(), serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); if (Objects.equals( getBaseModelClassName(), whenHasParent.getParentBaseModelClassName())) { Assert.assertEquals( initialBaseModelsCount + 1, getNotInTrashBaseModelsCount(grandparentBaseModel)); } else { Assert.assertEquals( initialBaseModelsCount, getNotInTrashBaseModelsCount(grandparentBaseModel)); } whenHasParent.moveParentBaseModelToTrash( (Long)grandparentBaseModel.getPrimaryKeyObj()); Assert.assertTrue(isInTrashContainer(baseModel)); Assert.assertTrue(isInTrashContainer(parentBaseModel)); Assert.assertEquals( initialBaseModelsCount, getNotInTrashBaseModelsCount(grandparentBaseModel)); Assert.assertEquals( initialTrashEntriesCount + 1, getTrashEntriesCount(group.getGroupId())); } @Test public void testTrashGrandparentBaseModelAndRestoreParentModel() throws Exception { Assume.assumeTrue(this instanceof WhenHasGrandParent); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> grandparentBaseModel = getParentBaseModel( group, serviceContext); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, (Long)grandparentBaseModel.getPrimaryKeyObj(), serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)grandparentBaseModel.getPrimaryKeyObj()); TrashHandler parentTrashHandler = TrashHandlerRegistryUtil.getTrashHandler( whenHasParent.getParentBaseModelClassName()); parentTrashHandler.restoreTrashEntry( TestPropsValues.getUserId(), (Long)grandparentBaseModel.getPrimaryKeyObj()); Assert.assertEquals( initialTrashEntriesCount, getTrashEntriesCount(group.getGroupId())); } @Test public void testTrashGrandparentBaseModelAndRestoreParentModelIsNotInTrashContainer() throws Exception { Assume.assumeTrue(this instanceof WhenHasGrandParent); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> grandparentBaseModel = getParentBaseModel( group, serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, (Long)grandparentBaseModel.getPrimaryKeyObj(), serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)grandparentBaseModel.getPrimaryKeyObj()); TrashHandler parentTrashHandler = TrashHandlerRegistryUtil.getTrashHandler( whenHasParent.getParentBaseModelClassName()); parentTrashHandler.restoreTrashEntry( TestPropsValues.getUserId(), (Long)grandparentBaseModel.getPrimaryKeyObj()); Assert.assertFalse(isInTrashContainer(baseModel)); Assert.assertFalse(isInTrashContainer(parentBaseModel)); } @Test public void testTrashGrandparentBaseModelAndRestoreParentModelIsVisible() throws Exception { Assume.assumeTrue(this instanceof WhenHasGrandParent); Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> grandparentBaseModel = getParentBaseModel( group, serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, (Long)grandparentBaseModel.getPrimaryKeyObj(), serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)grandparentBaseModel.getPrimaryKeyObj()); TrashHandler parentTrashHandler = TrashHandlerRegistryUtil.getTrashHandler( whenHasParent.getParentBaseModelClassName()); parentTrashHandler.restoreTrashEntry( TestPropsValues.getUserId(), (Long)grandparentBaseModel.getPrimaryKeyObj()); WhenIsAssetableBaseModel whenIsAssetableBaseModel = (WhenIsAssetableBaseModel)this; Assert.assertTrue( whenIsAssetableBaseModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testTrashGrandparentBaseModelAndRestoreParentModelIsVisibleParent() throws Exception { Assume.assumeTrue(this instanceof WhenHasGrandParent); Assume.assumeTrue(this instanceof WhenIsAssetableParentModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> grandparentBaseModel = getParentBaseModel( group, serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, (Long)grandparentBaseModel.getPrimaryKeyObj(), serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)grandparentBaseModel.getPrimaryKeyObj()); TrashHandler parentTrashHandler = TrashHandlerRegistryUtil.getTrashHandler( whenHasParent.getParentBaseModelClassName()); parentTrashHandler.restoreTrashEntry( TestPropsValues.getUserId(), (Long)grandparentBaseModel.getPrimaryKeyObj()); WhenIsAssetableParentModel whenIsAssetableParentModel = (WhenIsAssetableParentModel)this; Assert.assertTrue( whenIsAssetableParentModel.isAssetEntryVisible( parentBaseModel, getAssetClassPK(parentBaseModel))); } @Test public void testTrashGrandparentBaseModelIsNotVisible() throws Exception { Assume.assumeTrue(this instanceof WhenHasGrandParent); Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> grandparentBaseModel = getParentBaseModel( group, serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, (Long)grandparentBaseModel.getPrimaryKeyObj(), serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)grandparentBaseModel.getPrimaryKeyObj()); WhenIsAssetableBaseModel whenIsAssetableModel = (WhenIsAssetableBaseModel)this; Assert.assertFalse( whenIsAssetableModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testTrashGrandparentBaseModelIsNotVisibleParent() throws Exception { Assume.assumeTrue(this instanceof WhenHasGrandParent); Assume.assumeTrue(this instanceof WhenIsAssetableParentModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> grandparentBaseModel = getParentBaseModel( group, serviceContext); BaseModel<?> parentBaseModel = getParentBaseModel( group, (Long)grandparentBaseModel.getPrimaryKeyObj(), serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)grandparentBaseModel.getPrimaryKeyObj()); WhenIsAssetableParentModel whenIsAssetableParentModel = (WhenIsAssetableParentModel)this; Assert.assertFalse( whenIsAssetableParentModel.isAssetEntryVisible( parentBaseModel, getAssetClassPK(parentBaseModel))); } @Test public void testTrashIsRestorableBaseModel() throws Exception { Assume.assumeTrue(this instanceof WhenIsRestorableBaseModel); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); baseModel = addBaseModelWithWorkflow(serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); boolean restorable = trashHandler.isRestorable( getAssetClassPK(baseModel)); Assert.assertTrue(restorable); } @Test public void testTrashMyBaseModel() throws Exception { Assume.assumeTrue(this instanceof WhenHasMyBaseModel); Assume.assumeTrue(this instanceof WhenHasParent); WhenHasMyBaseModel whenHasMyBaseModel = (WhenHasMyBaseModel)this; int initialBaseModelsCount = whenHasMyBaseModel.getMineBaseModelsCount( group.getGroupId(), TestPropsValues.getUserId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); addBaseModel(parentBaseModel, serviceContext); Assert.assertEquals( initialBaseModelsCount + 1, whenHasMyBaseModel.getMineBaseModelsCount( group.getGroupId(), TestPropsValues.getUserId())); WhenHasParent whenHasParent = (WhenHasParent)this; whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsCount, whenHasMyBaseModel.getMineBaseModelsCount( group.getGroupId(), TestPropsValues.getUserId())); } @Test public void testTrashParent() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsCount, getNotInTrashBaseModelsCount(parentBaseModel)); Assert.assertEquals( initialTrashEntriesCount + 1, getTrashEntriesCount(group.getGroupId())); TrashHandler parentTrashHandler = TrashHandlerRegistryUtil.getTrashHandler( whenHasParent.getParentBaseModelClassName()); if (Objects.equals( getBaseModelClassName(), whenHasParent.getParentBaseModelClassName())) { Assert.assertEquals( 0, parentTrashHandler.getTrashContainedModelsCount( (Long)parentBaseModel.getPrimaryKeyObj())); Assert.assertEquals( 1, parentTrashHandler.getTrashContainerModelsCount( (Long)parentBaseModel.getPrimaryKeyObj())); } else { Assert.assertEquals( 1, parentTrashHandler.getTrashContainedModelsCount( (Long)parentBaseModel.getPrimaryKeyObj())); Assert.assertEquals( 0, parentTrashHandler.getTrashContainerModelsCount( (Long)parentBaseModel.getPrimaryKeyObj())); } } @Test(expected = TrashEntryException.class) public void testTrashParentAndBaseModel() throws Exception { Assume.assumeTrue(this instanceof WhenIsRestorableBaseModel); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); WhenHasParent whenHasParent = (WhenHasParent)this; whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); } @Test public void testTrashParentAndDeleteGroupTrashEntries() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); TrashEntryServiceUtil.deleteEntries(group.getGroupId()); Assert.assertEquals(0, getTrashEntriesCount(group.getGroupId())); try { getBaseModel((Long)baseModel.getPrimaryKeyObj()); Assert.fail(); } catch (NoSuchModelException nsme) { } } @Test public void testTrashParentAndDeleteParent() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); TrashHandler parentTrashHandler = TrashHandlerRegistryUtil.getTrashHandler( whenHasParent.getParentBaseModelClassName()); parentTrashHandler.deleteTrashEntry( (Long)parentBaseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsCount, getNotInTrashBaseModelsCount(parentBaseModel)); try { getBaseModel((Long)baseModel.getPrimaryKeyObj()); Assert.fail(); } catch (NoSuchModelException nsme) { } Assert.assertEquals( initialTrashEntriesCount, getTrashEntriesCount(group.getGroupId())); } @Test public void testTrashParentAndRestoreBaseModelIsVisible() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); Assume.assumeTrue(this instanceof WhenIsMoveableFromTrashBaseModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsMoveableFromTrashBaseModel whenIsMoveableFromTrashBaseModel = (WhenIsMoveableFromTrashBaseModel)this; whenIsMoveableFromTrashBaseModel.moveBaseModelFromTrash( baseModel, group, serviceContext); WhenIsAssetableBaseModel whenIsAssetableModel = (WhenIsAssetableBaseModel)this; Assert.assertTrue( whenIsAssetableModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testTrashParentAndRestoreIndexable() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenIsMoveableFromTrashBaseModel); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsMoveableFromTrashBaseModel whenIsMoveableFromTrashBaseModel = (WhenIsMoveableFromTrashBaseModel)this; whenIsMoveableFromTrashBaseModel.moveBaseModelFromTrash( baseModel, group, serviceContext); if (isBaseModelContainerModel()) { Assert.assertEquals( initialBaseModelsSearchCount + 2, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); } else { Assert.assertEquals( initialBaseModelsSearchCount + 1, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); } } @Test(expected = RestoreEntryException.class) public void testTrashParentAndRestoreParentAndBaseModel() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsRestorableBaseModel); Assume.assumeTrue( this instanceof WhenIsRestorableParentBaseModelFromTrash); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); WhenHasParent whenHasParent = (WhenHasParent)this; whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsRestorableParentBaseModelFromTrash whenIsRestorableParentBaseModelFromTrash = (WhenIsRestorableParentBaseModelFromTrash)this; whenIsRestorableParentBaseModelFromTrash. restoreParentBaseModelFromTrash( (Long)parentBaseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); } @Test public void testTrashParentIndexable() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsSearchCount, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); } @Test public void testTrashParentIndexableAndReindex() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); reindex(baseModel); Assert.assertEquals( initialBaseModelsSearchCount, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); } @Test public void testTrashParentIsNotVisible() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsAssetableBaseModel whenIsAssetableModel = (WhenIsAssetableBaseModel)this; Assert.assertFalse( whenIsAssetableModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testTrashParentWithBaseModelIsInTrashContainer() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); Assert.assertTrue(isInTrashContainer(baseModel)); } @Test public void testTrashParentWithBaseModelIsIsNotVisible() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsAssetableBaseModel whenIsAssetableModel = (WhenIsAssetableBaseModel)this; Assert.assertFalse( whenIsAssetableModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testTrashRecentBaseModel() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenHasRecentBaseModelCount); WhenHasRecentBaseModelCount whenHasRecentBaseModelCount = (WhenHasRecentBaseModelCount)this; int initialBaseModelsCount = whenHasRecentBaseModelCount.getRecentBaseModelsCount( group.getGroupId()); WhenHasParent whenHasParent = (WhenHasParent)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); addBaseModel(parentBaseModel, serviceContext); Assert.assertEquals( initialBaseModelsCount + 1, whenHasRecentBaseModelCount.getRecentBaseModelsCount( group.getGroupId())); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsCount, whenHasRecentBaseModelCount.getRecentBaseModelsCount( group.getGroupId())); } @Test public void testTrashVersionBaseModel() throws Exception { Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsCount, getNotInTrashBaseModelsCount(parentBaseModel)); Assert.assertEquals( initialTrashEntriesCount + 1, getTrashEntriesCount(group.getGroupId())); } @Test public void testTrashVersionBaseModelAndDelete() throws Exception { Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsCount, getNotInTrashBaseModelsCount(parentBaseModel)); Assert.assertEquals( initialTrashEntriesCount, getTrashEntriesCount(group.getGroupId())); } @Test public void testTrashVersionBaseModelAndDeleteIndexable() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeFalse(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsSearchCount, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashVersionBaseModelAndDeleteIndexableWithEqualsParentAndBaseModelClass() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeTrue(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsSearchCount + 1, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashVersionBaseModelAndDeleteIsNotFound() throws Exception { Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.deleteTrashEntry(getTrashEntryClassPK(baseModel)); WhenIsAssetableBaseModel whenIsAssetableBaseModel = (WhenIsAssetableBaseModel)this; Assert.assertNull(whenIsAssetableBaseModel.fetchAssetEntry(baseModel)); } @Test public void testTrashVersionBaseModelAndRestore() throws Exception { Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsCount + 1, getNotInTrashBaseModelsCount(parentBaseModel)); Assert.assertEquals( initialTrashEntriesCount, getTrashEntriesCount(group.getGroupId())); } @Test public void testTrashVersionBaseModelAndRestoreIndexable() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeFalse(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsSearchCount + 1, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashVersionBaseModelAndRestoreIndexableWithEqualsParentAndBaseModelClass() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeTrue(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); Assert.assertEquals( initialBaseModelsSearchCount + 2, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashVersionBaseModelAndRestoreIsVisible() throws Exception { Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); WhenIsAssetableBaseModel whenIsAssetableModel = (WhenIsAssetableBaseModel)this; moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( getBaseModelClassName()); trashHandler.restoreTrashEntry( TestPropsValues.getUserId(), getTrashEntryClassPK(baseModel)); Assert.assertTrue( whenIsAssetableModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testTrashVersionBaseModelIndexable() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeFalse(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsSearchCount, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount + 1, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashVersionBaseModelIndexableAndReindex() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeFalse(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); reindex(baseModel); Assert.assertEquals( initialBaseModelsSearchCount, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount + 1, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashVersionBaseModelIndexableWithEqualsParentAndBaseModelClass() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeTrue(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsSearchCount + 1, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount + 1, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashVersionBaseModelIndexableWithEqualsParentAndBaseModelClassAndReindex() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeTrue(this instanceof WhenParentModelIsSameType); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); reindex(baseModel); Assert.assertEquals( initialBaseModelsSearchCount + 1, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount + 1, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashVersionBaseModelIsNotVisible() throws Exception { Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); WhenIsAssetableBaseModel whenIsAssetableModel = (WhenIsAssetableBaseModel)this; moveBaseModelToTrash((Long)baseModel.getPrimaryKeyObj()); Assert.assertFalse( whenIsAssetableModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testTrashVersionParentBaseModel() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeTrue(this instanceof WhenIsVersionableBaseModel); WhenIsVersionableBaseModel whenIsVersionableBaseModel = (WhenIsVersionableBaseModel)this; int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsVersionableBaseModel.expireBaseModel( baseModel, serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; WorkflowedModel workflowedModel = getWorkflowedModel(baseModel); List<Integer> originalStatuses = new ArrayList<>(); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); WhenHasParent whenHasParent = (WhenHasParent)this; workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); Assert.assertEquals( initialTrashEntriesCount + 1, getTrashEntriesCount(group.getGroupId())); Assert.assertTrue(isInTrashContainer(baseModel)); } @Test public void testTrashVersionParentBaseModelAndCustomRestore() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeFalse(this instanceof WhenIsMoveableFromTrashBaseModel); Assume.assumeTrue( this instanceof WhenIsRestorableParentBaseModelFromTrash); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeTrue(this instanceof WhenIsVersionableBaseModel); WhenIsVersionableBaseModel whenIsVersionableBaseModel = (WhenIsVersionableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsVersionableBaseModel.expireBaseModel( baseModel, serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; WorkflowedModel workflowedModel = getWorkflowedModel(baseModel); List<Integer> originalStatuses = new ArrayList<>(); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); WhenHasParent whenHasParent = (WhenHasParent)this; workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsRestorableParentBaseModelFromTrash whenIsRestorableParentBaseModelFromTrash = (WhenIsRestorableParentBaseModelFromTrash)this; whenIsRestorableParentBaseModelFromTrash. restoreParentBaseModelFromTrash( (Long)parentBaseModel.getPrimaryKeyObj()); List<? extends WorkflowedModel> childrenWorkflowedModels = whenIsRestorableParentBaseModelFromTrash. getChildrenWorkflowedModels(parentBaseModel); for (int i = 1; i <= childrenWorkflowedModels.size(); i++) { WorkflowedModel childrenWorkflowedModel = childrenWorkflowedModels.get(i - 1); int originalStatus = originalStatuses.get( childrenWorkflowedModels.size() - i); Assert.assertEquals( originalStatus, childrenWorkflowedModel.getStatus()); } } @Test public void testTrashVersionParentBaseModelAndRestore() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsMoveableFromTrashBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeTrue(this instanceof WhenIsVersionableBaseModel); WhenIsVersionableBaseModel whenIsVersionableBaseModel = (WhenIsVersionableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); int initialBaseModelsCount = getNotInTrashBaseModelsCount( parentBaseModel); int initialTrashEntriesCount = getTrashEntriesCount(group.getGroupId()); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsVersionableBaseModel.expireBaseModel( baseModel, serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; WorkflowedModel workflowedModel = getWorkflowedModel(baseModel); List<Integer> originalStatuses = new ArrayList<>(); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); WhenHasParent whenHasParent = (WhenHasParent)this; workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsMoveableFromTrashBaseModel whenIsMoveableFromTrashBaseModel = (WhenIsMoveableFromTrashBaseModel)this; BaseModel<?> newParentBaseModel = whenIsMoveableFromTrashBaseModel.moveBaseModelFromTrash( baseModel, group, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); Assert.assertEquals( initialBaseModelsCount + 1, getNotInTrashBaseModelsCount(newParentBaseModel)); Assert.assertEquals( initialTrashEntriesCount + 1, getTrashEntriesCount(group.getGroupId())); } @Test public void testTrashVersionParentBaseModelAndRestoreIsNotInTrashContainer() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsMoveableFromTrashBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeTrue(this instanceof WhenIsVersionableBaseModel); WhenIsVersionableBaseModel whenIsVersionableBaseModel = (WhenIsVersionableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsVersionableBaseModel.expireBaseModel( baseModel, serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; WorkflowedModel workflowedModel = getWorkflowedModel(baseModel); List<Integer> originalStatuses = new ArrayList<>(); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); WhenHasParent whenHasParent = (WhenHasParent)this; workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsMoveableFromTrashBaseModel whenIsMoveableFromTrashBaseModel = (WhenIsMoveableFromTrashBaseModel)this; whenIsMoveableFromTrashBaseModel.moveBaseModelFromTrash( baseModel, group, serviceContext); baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); Assert.assertFalse(isInTrashContainer(baseModel)); } @Test public void testTrashVersionParentBaseModelAndRestoreIsVisible() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); Assume.assumeTrue(this instanceof WhenIsMoveableFromTrashBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeTrue(this instanceof WhenIsVersionableBaseModel); WhenIsVersionableBaseModel whenIsVersionableBaseModel = (WhenIsVersionableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsVersionableBaseModel.expireBaseModel( baseModel, serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; WorkflowedModel workflowedModel = getWorkflowedModel(baseModel); List<Integer> originalStatuses = new ArrayList<>(); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); WhenHasParent whenHasParent = (WhenHasParent)this; workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsMoveableFromTrashBaseModel whenIsMoveableFromTrashBaseModel = (WhenIsMoveableFromTrashBaseModel)this; whenIsMoveableFromTrashBaseModel.moveBaseModelFromTrash( baseModel, group, serviceContext); WhenIsAssetableBaseModel whenIsAssetableModel = (WhenIsAssetableBaseModel)this; baseModel = getBaseModel((Long)baseModel.getPrimaryKeyObj()); Assert.assertTrue( whenIsAssetableModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } @Test public void testTrashVersionParentBaseModelIndexable() throws Exception { Assume.assumeTrue(this instanceof WhenIsIndexableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeTrue(this instanceof WhenIsVersionableBaseModel); WhenIsIndexableBaseModel whenIsIndexableBaseModel = (WhenIsIndexableBaseModel)this; int initialBaseModelsSearchCount = whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId()); ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); int initialTrashEntriesSearchCount = whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext); WhenIsVersionableBaseModel whenIsVersionableBaseModel = (WhenIsVersionableBaseModel)this; BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsVersionableBaseModel.expireBaseModel( baseModel, serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; WorkflowedModel workflowedModel = getWorkflowedModel(baseModel); List<Integer> originalStatuses = new ArrayList<>(); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); Assert.assertEquals( initialBaseModelsSearchCount + 1, whenIsIndexableBaseModel.searchBaseModelsCount( getBaseModelClass(), group.getGroupId())); Assert.assertEquals( initialTrashEntriesSearchCount, whenIsIndexableBaseModel.searchTrashEntriesCount( whenIsIndexableBaseModel.getSearchKeywords(), serviceContext)); } @Test public void testTrashVersionParentBaseModelIsNotVisible() throws Exception { Assume.assumeTrue(this instanceof WhenHasParent); Assume.assumeTrue(this instanceof WhenIsAssetableBaseModel); Assume.assumeTrue(this instanceof WhenIsUpdatableBaseModel); Assume.assumeTrue(this instanceof WhenIsVersionableBaseModel); WhenIsVersionableBaseModel whenIsVersionableBaseModel = (WhenIsVersionableBaseModel)this; ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(group.getGroupId()); BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); baseModel = addBaseModel(parentBaseModel, serviceContext); baseModel = whenIsVersionableBaseModel.expireBaseModel( baseModel, serviceContext); WhenIsUpdatableBaseModel whenIsUpdatableBaseModel = (WhenIsUpdatableBaseModel)this; WorkflowedModel workflowedModel = getWorkflowedModel(baseModel); List<Integer> originalStatuses = new ArrayList<>(); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT); baseModel = whenIsUpdatableBaseModel.updateBaseModel( (Long)baseModel.getPrimaryKeyObj(), serviceContext); WhenHasParent whenHasParent = (WhenHasParent)this; workflowedModel = getWorkflowedModel(baseModel); originalStatuses.add(workflowedModel.getStatus()); whenHasParent.moveParentBaseModelToTrash( (Long)parentBaseModel.getPrimaryKeyObj()); WhenIsAssetableBaseModel whenIsAssetableModel = (WhenIsAssetableBaseModel)this; Assert.assertFalse( whenIsAssetableModel.isAssetEntryVisible( baseModel, getAssetClassPK(baseModel))); } protected BaseModel<?> addBaseModel( BaseModel<?> parentBaseModel, ServiceContext serviceContext) throws Exception { boolean workflowEnabled = WorkflowThreadLocal.isEnabled(); try { WorkflowThreadLocal.setEnabled(true); BaseModel<?> baseModel = addBaseModelWithWorkflow( parentBaseModel, serviceContext); return baseModel; } finally { WorkflowThreadLocal.setEnabled(workflowEnabled); } } protected abstract BaseModel<?> addBaseModelWithWorkflow( BaseModel<?> parentBaseModel, ServiceContext serviceContext) throws Exception; protected BaseModel<?> addBaseModelWithWorkflow( ServiceContext serviceContext) throws Exception { BaseModel<?> parentBaseModel = getParentBaseModel( group, serviceContext); return addBaseModelWithWorkflow(parentBaseModel, serviceContext); } protected BaseModel<?> addDraftBaseModel( BaseModel<?> parentBaseModel, ServiceContext serviceContext) throws Exception { boolean workflowEnabled = WorkflowThreadLocal.isEnabled(); try { WorkflowThreadLocal.setEnabled(true); Assume.assumeTrue(this instanceof WhenHasDraftStatus); WhenHasDraftStatus whenHasDraftStatus = (WhenHasDraftStatus)this; BaseModel<?> baseModel = whenHasDraftStatus.addDraftBaseModelWithWorkflow( parentBaseModel, serviceContext); return baseModel; } finally { WorkflowThreadLocal.setEnabled(workflowEnabled); } } protected void deleteParentBaseModel( BaseModel<?> parentBaseModel, boolean includeTrashedEntries) throws Exception { } protected Long getAssetClassPK(ClassedModel classedModel) { return (Long)classedModel.getPrimaryKeyObj(); } protected abstract BaseModel<?> getBaseModel(long primaryKey) throws Exception; protected abstract Class<?> getBaseModelClass(); protected String getBaseModelClassName() { Class<?> clazz = getBaseModelClass(); return clazz.getName(); } protected long getDeletionSystemEventCount( TrashHandler trashHandler, final long systemEventSetKey) throws Exception { final long systemEventClassNameId = PortalUtil.getClassNameId( trashHandler.getSystemEventClassName()); ActionableDynamicQuery actionableDynamicQuery = SystemEventLocalServiceUtil.getActionableDynamicQuery(); actionableDynamicQuery.setAddCriteriaMethod( new ActionableDynamicQuery.AddCriteriaMethod() { @Override public void addCriteria(DynamicQuery dynamicQuery) { Property classNameIdProperty = PropertyFactoryUtil.forName( "classNameId"); dynamicQuery.add( classNameIdProperty.eq(systemEventClassNameId)); if (systemEventSetKey > 0) { Property systemEventSetKeyProperty = PropertyFactoryUtil.forName("systemEventSetKey"); dynamicQuery.add( systemEventSetKeyProperty.eq(systemEventSetKey)); } Property typeProperty = PropertyFactoryUtil.forName("type"); dynamicQuery.add( typeProperty.eq(SystemEventConstants.TYPE_DELETE)); } }); actionableDynamicQuery.setGroupId(group.getGroupId()); return actionableDynamicQuery.performCount(); } protected abstract int getNotInTrashBaseModelsCount( BaseModel<?> parentBaseModel) throws Exception; protected BaseModel<?> getParentBaseModel( Group group, long parentBaseModelId, ServiceContext serviceContext) throws Exception { return group; } protected BaseModel<?> getParentBaseModel( Group group, ServiceContext serviceContext) throws Exception { return group; } protected int getTrashEntriesCount(long groupId) throws Exception { return TrashEntryLocalServiceUtil.getEntriesCount(groupId); } protected long getTrashEntryClassPK(ClassedModel classedModel) { return (Long)classedModel.getPrimaryKeyObj(); } protected abstract String getUniqueTitle(BaseModel<?> baseModel); protected WorkflowedModel getWorkflowedModel(ClassedModel baseModel) throws Exception { return (WorkflowedModel)baseModel; } protected boolean isBaseModelContainerModel() { if (baseModel instanceof ContainerModel) { return true; } return false; } protected boolean isInTrashContainer(ClassedModel classedModel) throws Exception { if (classedModel instanceof TrashedModel) { TrashedModel trashedModel = (TrashedModel)classedModel; return trashedModel.isInTrashContainer(); } return false; } protected boolean isValidTrashTitle(String title) { if (title.startsWith(_TRASH_PREFIX)) { return true; } return false; } protected abstract void moveBaseModelToTrash(long primaryKey) throws Exception; protected void reindex(ClassedModel classedModel) throws Exception { Indexer<?> indexer = IndexerRegistryUtil.nullSafeGetIndexer( classedModel.getModelClassName()); long classPK = (Long)classedModel.getPrimaryKeyObj(); indexer.reindex(classedModel.getModelClassName(), classPK); } protected BaseModel<?> baseModel; @DeleteAfterTestRun protected Group group; private static final String _TRASH_PREFIX = StringPool.SLASH; }