From 22ead45f3feacd91003638a9410431fd675d2b47 Mon Sep 17 00:00:00 2001 From: Neil McErlean Date: Thu, 26 Mar 2015 15:07:28 +0000 Subject: [PATCH] Refactoring test code to separate it from BaseUnitTest. RM-2027. +review RM git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@100172 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../ClassificationServiceImpl.java | 12 ++- .../classification/Configuration.java | 2 +- .../ClassificationServiceImplUnitTest.java | 99 ++++++++++++------- 3 files changed, 74 insertions(+), 39 deletions(-) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImpl.java index 396ae85094..2e2f467d59 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImpl.java @@ -59,7 +59,17 @@ public class ClassificationServiceImpl extends ServiceBaseImpl /** The classification reasons currently configured in this server. */ private List configuredReasons; - private Configuration config = new Configuration(DEFAULT_LEVELS_FILE, DEFAULT_REASONS_FILE); + private final Configuration config; + + public ClassificationServiceImpl() + { + this.config = new Configuration(DEFAULT_LEVELS_FILE, DEFAULT_REASONS_FILE); + } + + ClassificationServiceImpl(Configuration config) + { + this.config = config; + } public void setAttributeService(AttributeService service) { this.attributeService = service; } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/Configuration.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/Configuration.java index 5d236759f6..405dccc61f 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/Configuration.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/Configuration.java @@ -50,7 +50,7 @@ class Configuration } /** - * Gets the list (in descending order) of classification levels - as defined in the system configuration. + * Gets the list (in descending order) of classification levels - as defined in the classpath. * * @return the configured classification levels in descending order, or an empty list if there are none. */ diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImplUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImplUnitTest.java index 64d2c41b9c..9c1786f773 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImplUnitTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImplUnitTest.java @@ -19,15 +19,26 @@ package org.alfresco.module.org_alfresco_module_rm.classification; import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationServiceException.MissingConfiguration; -import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; +import org.alfresco.module.org_alfresco_module_rm.util.AuthenticationUtil; import org.alfresco.service.cmr.attributes.AttributeService; +import org.junit.Before; import org.junit.Test; -import org.mockito.Mock; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; /** * Unit tests for {@link ClassificationServiceImpl}. @@ -35,7 +46,7 @@ import static org.junit.Assert.assertEquals; * @author Neil Mc Erlean * @since 3.0 */ -public class ClassificationServiceImplUnitTest extends BaseUnitTest +public class ClassificationServiceImplUnitTest { private static final List DEFAULT_CLASSIFICATION_LEVELS = asLevelList("Top Secret", "rm.classification.topSecret", "Secret", "rm.classification.secret", @@ -70,54 +81,68 @@ public class ClassificationServiceImplUnitTest extends BaseUnitTest return levels; } - @Mock(name="attributeService") protected AttributeService mockedAttributeService; - private ClassificationServiceImpl classificationService; - @Test public void defaultConfigurationVanillaSystem() + private AttributeService mockedAttributeService = mock(AttributeService.class); + private AuthenticationUtil mockedAuthenticationUtil = mock(AuthenticationUtil.class); + private Configuration mockConfig = mock(Configuration.class); + + @Before public void setUp() { - classificationService = new TestClassificationService(null, DEFAULT_CLASSIFICATION_LEVELS); + reset(mockConfig, mockedAttributeService); + + // FIXME This should be out of here (and BaseUnitTest) and into a common utility class. + // We don't care about authentication here. + doAnswer(new Answer() + { + @SuppressWarnings("rawtypes") + @Override + public Object answer(InvocationOnMock invocation) throws Throwable + { + org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork work + = (org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork)invocation.getArguments()[0]; + return work.doWork(); + } + + }).when(mockedAuthenticationUtil).runAs(any(org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork.class), anyString()); + + // Use the admin user + doReturn("admin").when(mockedAuthenticationUtil).getAdminUserName(); + doReturn("admin").when(mockedAuthenticationUtil).getFullyAuthenticatedUser(); + + classificationService = new ClassificationServiceImpl(mockConfig); classificationService.setAttributeService(mockedAttributeService); - - classificationService.initConfiguredClassificationLevels(); - - assertEquals(DEFAULT_CLASSIFICATION_LEVELS, classificationService.getClassificationLevels()); + classificationService.setAuthenticationUtil(mockedAuthenticationUtil); } - @Test public void alternativeConfigurationPreviouslyStartedSystem() + @Test public void defaultLevelsConfigurationVanillaSystem() { - classificationService = new TestClassificationService(DEFAULT_CLASSIFICATION_LEVELS, ALT_CLASSIFICATION_LEVELS); - classificationService.setAttributeService(mockedAttributeService); + when(mockConfig.getConfiguredLevels()).thenReturn(DEFAULT_CLASSIFICATION_LEVELS); + when(mockedAttributeService.getAttribute(anyString(), anyString(), anyString())).thenReturn(null); classificationService.initConfiguredClassificationLevels(); - assertEquals(ALT_CLASSIFICATION_LEVELS, classificationService.getClassificationLevels()); + verify(mockedAttributeService).setAttribute(eq((Serializable) DEFAULT_CLASSIFICATION_LEVELS), + anyString(), anyString(), anyString()); + } + + @Test public void alternativeLevelsConfigurationPreviouslyStartedSystem() + { + when(mockConfig.getConfiguredLevels()).thenReturn(ALT_CLASSIFICATION_LEVELS); + when(mockedAttributeService.getAttribute(anyString(), anyString(), anyString())) + .thenReturn((Serializable) DEFAULT_CLASSIFICATION_LEVELS); + + classificationService.initConfiguredClassificationLevels(); + + verify(mockedAttributeService).setAttribute(eq((Serializable) ALT_CLASSIFICATION_LEVELS), + anyString(), anyString(), anyString()); } @Test (expected=MissingConfiguration.class) - public void missingConfigurationVanillaSystemShouldFail() throws Exception + public void missingLevelsConfigurationVanillaSystemShouldFail() throws Exception { - classificationService = new TestClassificationService(null, null); - classificationService.setAttributeService(mockedAttributeService); + when(mockedAttributeService.getAttribute(anyString(), anyString(), anyString())).thenReturn(null); classificationService.initConfiguredClassificationLevels(); } - - /** - * Helper class for test purposes that allows us to replace the persisted - * and configured lists of {@link ClassificationLevel}s. - */ - private static class TestClassificationService extends ClassificationServiceImpl - { - private final List persisted; - private final List configured; - public TestClassificationService(List persisted, List configured) - { - this.persisted = persisted; - this.configured = configured; - } - - @Override List getPersistedLevels() { return persisted; } - @Override List getConfigurationLevels() { return configured; } - } }