mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
RM-1864: New version is created when "Declare as version record"
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.3@97108 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2014 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco 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 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.alfresco.module.org_alfresco_module_rm.action;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
|
||||
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
|
||||
import org.alfresco.service.cmr.action.Action;
|
||||
import org.mockito.Mock;
|
||||
|
||||
/**
|
||||
* Declare as version record action unit test.
|
||||
*
|
||||
* @author Roy Wetherall
|
||||
* @since 2.3
|
||||
*/
|
||||
public abstract class BaseActionUnitTest extends BaseUnitTest
|
||||
{
|
||||
/** mocked action */
|
||||
private @Mock Action mockedAction;
|
||||
|
||||
/**
|
||||
* @return mocked action
|
||||
*/
|
||||
protected Action getMockedAction()
|
||||
{
|
||||
return mockedAction;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to mock an action parameter value
|
||||
*/
|
||||
protected void mockActionParameterValue(String name, Object value)
|
||||
{
|
||||
doReturn(value).when(mockedAction).getParameterValue(name);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,293 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2014 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco 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 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.alfresco.module.org_alfresco_module_rm.action.dm;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.module.org_alfresco_module_rm.action.BaseActionUnitTest;
|
||||
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
|
||||
import org.alfresco.service.cmr.action.Action;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.junit.Test;
|
||||
import org.mockito.InjectMocks;
|
||||
|
||||
/**
|
||||
* Declare as version record action unit test.
|
||||
*
|
||||
* @author Roy Wetherall
|
||||
* @since 2.3
|
||||
*/
|
||||
public class DeclareAsVersionRecordActionUnitTest extends BaseActionUnitTest
|
||||
{
|
||||
/** Sync Model */
|
||||
private static final String SYNC_MODEL_1_0_URI = "http://www.alfresco.org/model/sync/1.0";
|
||||
private static final QName ASPECT_SYNCED = QName.createQName(SYNC_MODEL_1_0_URI, "synced");
|
||||
|
||||
/** actioned upon node reference */
|
||||
private NodeRef actionedUponNodeRef;
|
||||
|
||||
/** declare as version record action */
|
||||
private @InjectMocks DeclareAsVersionRecordAction declareAsVersionRecordAction;
|
||||
|
||||
/**
|
||||
* @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest#before()
|
||||
*/
|
||||
@Override
|
||||
public void before() throws Exception
|
||||
{
|
||||
super.before();
|
||||
|
||||
// mocked action
|
||||
declareAsVersionRecordAction.setAuditable(false);
|
||||
|
||||
// mocked actioned upon noderef
|
||||
actionedUponNodeRef = generateNodeRef();
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that the actioned upon node reference doesn't exist
|
||||
* When I execute the action
|
||||
* Then nothing happens
|
||||
*/
|
||||
@Test
|
||||
public void actionedUponNodeRefDoesntExist()
|
||||
{
|
||||
doReturn(false).when(mockedNodeService).exists(actionedUponNodeRef);
|
||||
declareAsVersionRecordAction.executeImpl(mock(Action.class), actionedUponNodeRef);
|
||||
verify(mockedRecordableVersionService, never()).createRecordFromLatestVersion(filePlan, actionedUponNodeRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that the actioned upon node reference isn't a subtype of cm:content
|
||||
* When I execute the action
|
||||
* Then nothing happens
|
||||
*/
|
||||
@Test
|
||||
public void aciontedUponNodeRefIsntSubTypeOfCmContent()
|
||||
{
|
||||
doReturn(true).when(mockedNodeService).exists(actionedUponNodeRef);
|
||||
doReturn(false).when(mockedDictionaryService).isSubClass(any(QName.class), eq(ContentModel.TYPE_CONTENT));
|
||||
declareAsVersionRecordAction.executeImpl(mock(Action.class), actionedUponNodeRef);
|
||||
verify(mockedRecordableVersionService, never()).createRecordFromLatestVersion(filePlan, actionedUponNodeRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that the actioned upon node reference doesn't have the versionable aspect applied
|
||||
* When I executed the action
|
||||
* Then nothing happens
|
||||
*/
|
||||
@Test
|
||||
public void actionedUponNodeRefDoesntHaveVersionableApplied()
|
||||
{
|
||||
doReturn(true).when(mockedNodeService).exists(actionedUponNodeRef);
|
||||
doReturn(true).when(mockedDictionaryService).isSubClass(any(QName.class), eq(ContentModel.TYPE_CONTENT));
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_VERSIONABLE);
|
||||
declareAsVersionRecordAction.executeImpl(mock(Action.class), actionedUponNodeRef);
|
||||
verify(mockedRecordableVersionService, never()).createRecordFromLatestVersion(filePlan, actionedUponNodeRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that the actioned upon node reference is already an record
|
||||
* When I execute the action
|
||||
* Then nothing happens
|
||||
*/
|
||||
@Test
|
||||
public void actionedUponNodeRefAlreadyRecord()
|
||||
{
|
||||
doReturn(true).when(mockedNodeService).exists(actionedUponNodeRef);
|
||||
doReturn(true).when(mockedDictionaryService).isSubClass(any(QName.class), eq(ContentModel.TYPE_CONTENT));
|
||||
doReturn(true).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_VERSIONABLE);
|
||||
doReturn(true).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD);
|
||||
declareAsVersionRecordAction.executeImpl(mock(Action.class), actionedUponNodeRef);
|
||||
verify(mockedRecordableVersionService, never()).createRecordFromLatestVersion(filePlan, actionedUponNodeRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that the actioned upon node reference is a working copy
|
||||
* When I execute the action
|
||||
* Then nothing happens
|
||||
*/
|
||||
@Test
|
||||
public void actionedUponNodeRefWorkingCopy()
|
||||
{
|
||||
doReturn(true).when(mockedNodeService).exists(actionedUponNodeRef);
|
||||
doReturn(true).when(mockedDictionaryService).isSubClass(any(QName.class), eq(ContentModel.TYPE_CONTENT));
|
||||
doReturn(true).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_VERSIONABLE);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD);
|
||||
doReturn(true).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_WORKING_COPY);
|
||||
declareAsVersionRecordAction.executeImpl(mock(Action.class), actionedUponNodeRef);
|
||||
verify(mockedRecordableVersionService, never()).createRecordFromLatestVersion(filePlan, actionedUponNodeRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that the actioned upon node reference is a rejected record
|
||||
* When I execute the action
|
||||
* Then nothing happens
|
||||
*/
|
||||
@Test
|
||||
public void actionedUponNodeRefRejectedRecord()
|
||||
{
|
||||
doReturn(true).when(mockedNodeService).exists(actionedUponNodeRef);
|
||||
doReturn(true).when(mockedDictionaryService).isSubClass(any(QName.class), eq(ContentModel.TYPE_CONTENT));
|
||||
doReturn(true).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_VERSIONABLE);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_WORKING_COPY);
|
||||
doReturn(true).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD_REJECTION_DETAILS);
|
||||
declareAsVersionRecordAction.executeImpl(mock(Action.class), actionedUponNodeRef);
|
||||
verify(mockedRecordableVersionService, never()).createRecordFromLatestVersion(filePlan, actionedUponNodeRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that the actioned upon node reference is synced to the cloud
|
||||
* When I execute the action
|
||||
* Then nothing happens
|
||||
*/
|
||||
@Test
|
||||
public void actionedUponNodeRefSynced()
|
||||
{
|
||||
doReturn(true).when(mockedNodeService).exists(actionedUponNodeRef);
|
||||
doReturn(true).when(mockedDictionaryService).isSubClass(any(QName.class), eq(ContentModel.TYPE_CONTENT));
|
||||
doReturn(true).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_VERSIONABLE);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_WORKING_COPY);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD_REJECTION_DETAILS);
|
||||
doReturn(true).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_SYNCED);
|
||||
declareAsVersionRecordAction.executeImpl(mock(Action.class), actionedUponNodeRef);
|
||||
verify(mockedRecordableVersionService, never()).createRecordFromLatestVersion(filePlan, actionedUponNodeRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that no file plan is provided
|
||||
* And no default file plan exists
|
||||
* When I execute the action
|
||||
* Then an exception is thrown
|
||||
*/
|
||||
@Test
|
||||
public void noFilePlanParameterNoDefaultFilePlan()
|
||||
{
|
||||
// setup
|
||||
doReturn(true).when(mockedNodeService).exists(actionedUponNodeRef);
|
||||
doReturn(true).when(mockedDictionaryService).isSubClass(any(QName.class), eq(ContentModel.TYPE_CONTENT));
|
||||
doReturn(true).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_VERSIONABLE);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_WORKING_COPY);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD_REJECTION_DETAILS);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_SYNCED);
|
||||
|
||||
// no default file plan
|
||||
doReturn(null).when(mockedFilePlanService).getFilePlanBySiteId(FilePlanService.DEFAULT_RM_SITE_ID);
|
||||
|
||||
// expect exception
|
||||
exception.expect(AlfrescoRuntimeException.class);
|
||||
|
||||
// exceute action
|
||||
declareAsVersionRecordAction.executeImpl(mock(Action.class), actionedUponNodeRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that no file plan is provided
|
||||
* And adefault file plan exists
|
||||
* When I execute the action
|
||||
* Then a version record is declared
|
||||
*/
|
||||
@Test
|
||||
public void noFilePlanParameterDefaultFilePlan()
|
||||
{
|
||||
// setup
|
||||
doReturn(true).when(mockedNodeService).exists(actionedUponNodeRef);
|
||||
doReturn(true).when(mockedDictionaryService).isSubClass(any(QName.class), eq(ContentModel.TYPE_CONTENT));
|
||||
doReturn(true).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_VERSIONABLE);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_WORKING_COPY);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD_REJECTION_DETAILS);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_SYNCED);
|
||||
|
||||
// no default file plan
|
||||
doReturn(filePlan).when(mockedFilePlanService).getFilePlanBySiteId(FilePlanService.DEFAULT_RM_SITE_ID);
|
||||
|
||||
// exceute action
|
||||
declareAsVersionRecordAction.executeImpl(mock(Action.class), actionedUponNodeRef);
|
||||
verify(mockedRecordableVersionService, times(1)).createRecordFromLatestVersion(filePlan, actionedUponNodeRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that a file plan is provided
|
||||
* And it isn't a file plan
|
||||
* When I execute the action
|
||||
* Then an exception is thrown
|
||||
*/
|
||||
@Test
|
||||
public void invalidFilePlanParameter()
|
||||
{
|
||||
// setup
|
||||
doReturn(true).when(mockedNodeService).exists(actionedUponNodeRef);
|
||||
doReturn(true).when(mockedDictionaryService).isSubClass(any(QName.class), eq(ContentModel.TYPE_CONTENT));
|
||||
doReturn(true).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_VERSIONABLE);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_WORKING_COPY);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD_REJECTION_DETAILS);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_SYNCED);
|
||||
|
||||
// not a file plan is provided in the parameters
|
||||
mockActionParameterValue(DeclareAsVersionRecordAction.PARAM_FILE_PLAN, generateNodeRef());
|
||||
|
||||
// expect exception
|
||||
exception.expect(AlfrescoRuntimeException.class);
|
||||
|
||||
// exceute action
|
||||
declareAsVersionRecordAction.executeImpl(getMockedAction(), actionedUponNodeRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that a file plan is provided
|
||||
* And it is a file plan
|
||||
* When I execute the action
|
||||
* Then a version record is declared
|
||||
*/
|
||||
@Test
|
||||
public void validFilePlanParameter()
|
||||
{
|
||||
// setup
|
||||
doReturn(true).when(mockedNodeService).exists(actionedUponNodeRef);
|
||||
doReturn(true).when(mockedDictionaryService).isSubClass(any(QName.class), eq(ContentModel.TYPE_CONTENT));
|
||||
doReturn(true).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_VERSIONABLE);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ContentModel.ASPECT_WORKING_COPY);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_RECORD_REJECTION_DETAILS);
|
||||
doReturn(false).when(mockedNodeService).hasAspect(actionedUponNodeRef, ASPECT_SYNCED);
|
||||
|
||||
// not a file plan is provided in the parameters
|
||||
NodeRef myFilePlan = generateNodeRef(TYPE_FILE_PLAN);
|
||||
doReturn(true).when(mockedFilePlanService).isFilePlan(myFilePlan);
|
||||
mockActionParameterValue(DeclareAsVersionRecordAction.PARAM_FILE_PLAN, myFilePlan);
|
||||
|
||||
// exceute action
|
||||
declareAsVersionRecordAction.executeImpl(getMockedAction(), actionedUponNodeRef);
|
||||
verify(mockedRecordableVersionService, times(1)).createRecordFromLatestVersion(myFilePlan, actionedUponNodeRef);
|
||||
}
|
||||
}
|
@@ -18,17 +18,14 @@
|
||||
*/
|
||||
package org.alfresco.module.org_alfresco_module_rm.action.impl;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
|
||||
import org.alfresco.module.org_alfresco_module_rm.action.BaseActionUnitTest;
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.service.cmr.action.Action;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.junit.Test;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
|
||||
/**
|
||||
* Unit test for file report action.
|
||||
@@ -36,14 +33,11 @@ import org.mockito.Mock;
|
||||
* @author Roy Wetherall
|
||||
* @since 2.2
|
||||
*/
|
||||
public class FileReportActionUnitTest extends BaseUnitTest
|
||||
public class FileReportActionUnitTest extends BaseActionUnitTest
|
||||
{
|
||||
/** actioned upon node reference */
|
||||
private NodeRef actionedUponNodeRef;
|
||||
|
||||
/** mocked action */
|
||||
private @Mock Action mockedAction;
|
||||
|
||||
/** file report action */
|
||||
private @InjectMocks FileReportAction fileReportAction;
|
||||
|
||||
@@ -62,14 +56,6 @@ public class FileReportActionUnitTest extends BaseUnitTest
|
||||
fileReportAction.setAuditable(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to mock an action parameter value
|
||||
*/
|
||||
private void mockActionParameterValue(String name, String value)
|
||||
{
|
||||
doReturn(value).when(mockedAction).getParameterValue(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* given the destination is not set, ensure that an exception is thrown
|
||||
*/
|
||||
@@ -88,7 +74,7 @@ public class FileReportActionUnitTest extends BaseUnitTest
|
||||
// == when ==
|
||||
|
||||
// execute action
|
||||
fileReportAction.executeImpl(mockedAction, actionedUponNodeRef);
|
||||
fileReportAction.executeImpl(getMockedAction(), actionedUponNodeRef);
|
||||
|
||||
// == then ==
|
||||
verifyZeroInteractions(mockedReportService, mockedNodeService);
|
||||
@@ -112,7 +98,7 @@ public class FileReportActionUnitTest extends BaseUnitTest
|
||||
// == when ==
|
||||
|
||||
// execute action
|
||||
fileReportAction.executeImpl(mockedAction, actionedUponNodeRef);
|
||||
fileReportAction.executeImpl(getMockedAction(), actionedUponNodeRef);
|
||||
|
||||
// == then ==
|
||||
verifyZeroInteractions(mockedReportService, mockedNodeService);
|
||||
|
@@ -18,10 +18,15 @@
|
||||
*/
|
||||
package org.alfresco.module.org_alfresco_module_rm.action.impl;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
|
||||
import org.alfresco.module.org_alfresco_module_rm.action.BaseActionUnitTest;
|
||||
import org.alfresco.service.cmr.action.Action;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.junit.Before;
|
||||
@@ -34,7 +39,7 @@ import org.mockito.InjectMocks;
|
||||
* @author Roy Wetherall
|
||||
* @since 2.3
|
||||
*/
|
||||
public class UnlinkFromActionUnitTest extends BaseUnitTest
|
||||
public class UnlinkFromActionUnitTest extends BaseActionUnitTest
|
||||
{
|
||||
private NodeRef record;
|
||||
private NodeRef recordFolder;
|
||||
@@ -107,11 +112,10 @@ public class UnlinkFromActionUnitTest extends BaseUnitTest
|
||||
doReturn(false).when(mockedNodeService).hasAspect(record, ASPECT_PENDING_DELETE);
|
||||
|
||||
// create action mock
|
||||
Action mockedAction = mock(Action.class);
|
||||
doReturn(null).when(mockedAction).getParameterValue(UnlinkFromAction.PARAM_RECORD_FOLDER);
|
||||
mockActionParameterValue(UnlinkFromAction.PARAM_RECORD_FOLDER, null);
|
||||
|
||||
// execute action
|
||||
action.executeImpl(mockedAction, record);
|
||||
action.executeImpl(getMockedAction(), record);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -127,11 +131,10 @@ public class UnlinkFromActionUnitTest extends BaseUnitTest
|
||||
doReturn(false).when(mockedNodeService).hasAspect(record, ASPECT_PENDING_DELETE);
|
||||
|
||||
// create action mock
|
||||
Action mockedAction = mock(Action.class);
|
||||
doReturn(recordFolder.toString()).when(mockedAction).getParameterValue(UnlinkFromAction.PARAM_RECORD_FOLDER);
|
||||
mockActionParameterValue(UnlinkFromAction.PARAM_RECORD_FOLDER, recordFolder.toString());
|
||||
|
||||
// execute action
|
||||
action.executeImpl(mockedAction, record);
|
||||
action.executeImpl(getMockedAction(), record);
|
||||
|
||||
// verify unlink
|
||||
verify(mockedRecordService, times(1)).unlink(record, recordFolder);
|
||||
|
@@ -18,6 +18,7 @@
|
||||
*/
|
||||
package org.alfresco.module.org_alfresco_module_rm.test;
|
||||
|
||||
import org.alfresco.module.org_alfresco_module_rm.action.dm.DeclareAsVersionRecordActionUnitTest;
|
||||
import org.alfresco.module.org_alfresco_module_rm.action.impl.FileReportActionUnitTest;
|
||||
import org.alfresco.module.org_alfresco_module_rm.action.impl.UnlinkFromActionUnitTest;
|
||||
import org.alfresco.module.org_alfresco_module_rm.bootstrap.BootstrapImporterModuleComponentUnitTest;
|
||||
@@ -79,6 +80,7 @@ import org.junit.runners.Suite.SuiteClasses;
|
||||
// action implementations
|
||||
FileReportActionUnitTest.class,
|
||||
UnlinkFromActionUnitTest.class,
|
||||
DeclareAsVersionRecordActionUnitTest.class,
|
||||
|
||||
// patches
|
||||
RMv22RemoveInPlaceRolesFromAllPatchUnitTest.class,
|
||||
|
@@ -47,6 +47,7 @@ import org.alfresco.module.org_alfresco_module_rm.report.ReportService;
|
||||
import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService;
|
||||
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedSecurityService;
|
||||
import org.alfresco.module.org_alfresco_module_rm.util.AuthenticationUtil;
|
||||
import org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionService;
|
||||
import org.alfresco.repo.policy.BehaviourFilter;
|
||||
import org.alfresco.repo.policy.PolicyComponent;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
|
||||
@@ -125,7 +126,8 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel
|
||||
@Mock(name="extendedPermissionService") protected ExtendedPermissionService mockedExtendedPermissionService;
|
||||
@Mock(name="extendedSecurityService") protected ExtendedSecurityService mockedExtendedSecurityService;
|
||||
@Mock(name="recordableVersionConfigService") protected RecordableVersionConfigService mockedRecordableVersionConfigService;
|
||||
@Mock(name="cmObjectType") protected CmObjectType cmObjectType;
|
||||
@Mock(name="cmObjectType") protected CmObjectType mockedCmObjectType;
|
||||
@Mock(name="recordableVersionService") protected RecordableVersionService mockedRecordableVersionService;
|
||||
|
||||
/** application context mock */
|
||||
@Mock(name="applicationContext") protected ApplicationContext mockedApplicationContext;
|
||||
@@ -386,7 +388,17 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel
|
||||
*/
|
||||
protected void makePrimaryParentOf(NodeRef child, NodeRef parent)
|
||||
{
|
||||
doReturn(new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, parent, generateQName(), child))
|
||||
makePrimaryParentOf(child, parent, ContentModel.ASSOC_CONTAINS, generateQName());
|
||||
}
|
||||
|
||||
protected void makePrimaryParentOf(NodeRef child, NodeRef parent, QName assocType, QName assocName)
|
||||
{
|
||||
makePrimaryParentOf(child, parent, assocType, assocName, mockedNodeService);
|
||||
}
|
||||
|
||||
protected void makePrimaryParentOf(NodeRef child, NodeRef parent, QName assocType, QName assocName, NodeService mockedNodeService)
|
||||
{
|
||||
doReturn(new ChildAssociationRef(assocType, parent, assocName, child))
|
||||
.when(mockedNodeService)
|
||||
.getPrimaryParent(child);
|
||||
}
|
||||
|
@@ -29,6 +29,7 @@ import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -38,14 +39,19 @@ import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
|
||||
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
|
||||
import org.alfresco.repo.version.Version2Model;
|
||||
import org.alfresco.repo.version.VersionModel;
|
||||
import org.alfresco.repo.version.common.VersionImpl;
|
||||
import org.alfresco.service.cmr.model.FileInfo;
|
||||
import org.alfresco.service.cmr.repository.ContentReader;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.version.Version;
|
||||
import org.alfresco.service.cmr.version.VersionType;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.junit.Test;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Spy;
|
||||
|
||||
/**
|
||||
* Recordable version service implementation unit test.
|
||||
@@ -71,7 +77,7 @@ public class RecordableVersionServiceImplUnitTest extends BaseUnitTest
|
||||
private @Mock(name="dbNodeService") NodeService mockedDbNodeService;
|
||||
|
||||
/** recordable version service */
|
||||
private @InjectMocks TestRecordableVersionServiceImpl recordableVersionService;
|
||||
private @InjectMocks @Spy TestRecordableVersionServiceImpl recordableVersionService;
|
||||
|
||||
/**
|
||||
* @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest#before()
|
||||
@@ -384,4 +390,109 @@ public class RecordableVersionServiceImplUnitTest extends BaseUnitTest
|
||||
// then the recorded version is created
|
||||
verify(mockedRecordService, times(1)).createRecordFromCopy(filePlan, nodeRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that a node is not versionable
|
||||
* When I try and create a record from the latest version
|
||||
* Then nothing will happen, because there is not version to record
|
||||
*/
|
||||
@Test
|
||||
public void notVersionableCreateRecordFromVersion()
|
||||
{
|
||||
// content node is not versionable
|
||||
doReturn(false).when(mockedNodeService).hasAspect(nodeRef, ContentModel.ASPECT_VERSIONABLE);
|
||||
|
||||
// create record from version
|
||||
recordableVersionService.createRecordFromLatestVersion(filePlan, nodeRef);
|
||||
|
||||
// nothing happens
|
||||
verify(mockedRecordService, never()).createRecordFromCopy(eq(filePlan), any(NodeRef.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that a nodes last version is recorded
|
||||
* When I try and create a record from the latest version
|
||||
* Then nothing will happen, because the latest version is already recorded
|
||||
*/
|
||||
@Test
|
||||
public void alreadyRecordedCreateRecordFromVersion()
|
||||
{
|
||||
// latest version is already recorded
|
||||
Version mockedVersion = mock(VersionImpl.class);
|
||||
doReturn(Collections.singletonMap(RecordableVersionServiceImpl.PROP_VERSION_RECORD, generateNodeRef())).when(mockedVersion).getVersionProperties();
|
||||
doReturn(true).when(mockedNodeService).hasAspect(nodeRef, ContentModel.ASPECT_VERSIONABLE);
|
||||
doReturn(mockedVersion).when(recordableVersionService).getCurrentVersion(nodeRef);
|
||||
|
||||
// create record from version
|
||||
recordableVersionService.createRecordFromLatestVersion(filePlan, nodeRef);
|
||||
|
||||
// nothing happens
|
||||
verify(mockedRecordService, never()).createRecordFromCopy(eq(filePlan), any(NodeRef.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Given that a nodes last version is not recorded
|
||||
* When I try to create a record from the latest version
|
||||
* Then the latest version is marked as record and a new record version is created to store the version state
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void notRecordedCreateRecordFromVersion()
|
||||
{
|
||||
// latest version is not recorded
|
||||
Version mockedVersion = mock(VersionImpl.class);
|
||||
NodeRef versionNodeRef = generateNodeRef();
|
||||
doReturn(Collections.emptyMap()).when(mockedVersion).getVersionProperties();
|
||||
doReturn(true).when(mockedNodeService).hasAspect(nodeRef, ContentModel.ASPECT_VERSIONABLE);
|
||||
|
||||
// version history
|
||||
NodeRef versionHistoryNodeRef = generateNodeRef();
|
||||
doReturn(versionHistoryNodeRef).when(mockedDbNodeService).getChildByName(any(NodeRef.class), eq(Version2Model.CHILD_QNAME_VERSION_HISTORIES), any(String.class));
|
||||
|
||||
// version number
|
||||
doReturn(mockedVersion).when(recordableVersionService).getCurrentVersion(nodeRef);
|
||||
doReturn(versionNodeRef).when(recordableVersionService).convertNodeRef(any(NodeRef.class));
|
||||
makePrimaryParentOf(versionNodeRef, versionHistoryNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "something-0"), mockedDbNodeService);
|
||||
|
||||
// created version
|
||||
NodeRef newVersionNodeRef = generateNodeRef();
|
||||
doReturn(generateChildAssociationRef(versionHistoryNodeRef, newVersionNodeRef)).when(mockedDbNodeService).createNode(
|
||||
eq(versionHistoryNodeRef),
|
||||
eq(Version2Model.CHILD_QNAME_VERSIONS),
|
||||
any(QName.class),
|
||||
any(QName.class),
|
||||
any(Map.class));
|
||||
|
||||
// created record
|
||||
NodeRef newRecordNodeRef = generateNodeRef();
|
||||
doReturn(newRecordNodeRef).when(mockedRecordService).createRecordFromContent(
|
||||
eq(filePlan),
|
||||
any(String.class),
|
||||
any(QName.class),
|
||||
any(Map.class),
|
||||
any(ContentReader.class));
|
||||
|
||||
// create record from version
|
||||
recordableVersionService.createRecordFromLatestVersion(filePlan, nodeRef);
|
||||
|
||||
// verify that the version is converted to a recorded version
|
||||
verify(mockedRecordService, times(1)).createRecordFromContent(
|
||||
eq(filePlan),
|
||||
any(String.class),
|
||||
any(QName.class),
|
||||
any(Map.class),
|
||||
any(ContentReader.class));
|
||||
verify(mockedDbNodeService, times(1)).deleteNode(any(NodeRef.class));
|
||||
verify(mockedDbNodeService, times(1)).createNode(
|
||||
eq(versionHistoryNodeRef),
|
||||
eq(Version2Model.CHILD_QNAME_VERSIONS),
|
||||
any(QName.class),
|
||||
any(QName.class),
|
||||
any(Map.class));
|
||||
verify(mockedNodeService, times(1)).addAspect(eq(newVersionNodeRef), eq(Version2Model.ASPECT_VERSION), any(Map.class));
|
||||
verify(mockedNodeService, times(1)).addAspect(
|
||||
newVersionNodeRef,
|
||||
RecordableVersionModel.ASPECT_RECORDED_VERSION,
|
||||
Collections.singletonMap(RecordableVersionModel.PROP_RECORD_NODE_REF, (Serializable)newRecordNodeRef));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user