package org.pentaho.platform.config; import org.dom4j.Document; import org.dom4j.Element; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.*; /** * Created by rfellows on 10/21/15. */ @RunWith( MockitoJUnitRunner.class ) public class PentahoObjectsConfigTest { @Mock Document document; @Mock Element beanElement; PentahoObjectsConfig pentahoObjectsConfig; PentahoObjectsConfig poc; String className; PentahoObjectsConfig.ScopeType scope; ArgumentCaptor<PentahoObjectsConfig.ObjectDescriptor> captor; @Before public void setUp() throws Exception { pentahoObjectsConfig = new PentahoObjectsConfig(); poc = spy( pentahoObjectsConfig ); poc.setDocument( document ); when( document.getName() ).thenReturn( "documentName" ); when( document.addElement( "default:bean" ) ).thenReturn( beanElement ); className = "org.pentaho.ClassToUse"; scope = PentahoObjectsConfig.ScopeType.singleton; captor = ArgumentCaptor.forClass( PentahoObjectsConfig.ObjectDescriptor.class ); doNothing().when( poc ).updateObject( anyString(), any( PentahoObjectsConfig.ObjectDescriptor.class ) ); doReturn( className ).when( poc ).getObjectClassName( anyString() ); } private void verifySetter( String lookupId ) { verify( poc ).updateObject( eq( lookupId ), captor.capture() ); PentahoObjectsConfig.ObjectDescriptor objectDescriptor = captor.getValue(); assertEquals( className, objectDescriptor.getClassName() ); assertEquals( scope, objectDescriptor.getScope() ); } @Test public void testSetAclPublisher() throws Exception { poc.setAclPublisher( className, scope ); verifySetter( PentahoObjectsConfig.ACL_PUBLISHER_ID ); } @Test public void testGetAclPublisher() throws Exception { String result = poc.getAclPublisher(); verify( poc ).getObjectClassName( PentahoObjectsConfig.ACL_PUBLISHER_ID ); } @Test public void testSetAclVoter() throws Exception { poc.setAclVoter( className, scope ); verifySetter( PentahoObjectsConfig.ACL_VOTER_ID ); } @Test public void testGetAclVoter() throws Exception { String result = poc.getAclVoter(); verify( poc ).getObjectClassName( PentahoObjectsConfig.ACL_VOTER_ID ); } @Test public void testSetAuditFileEntry() throws Exception { poc.setAuditFileEntry( className, scope ); verifySetter( PentahoObjectsConfig.AUDIT_FILE_ENTRY_ID ); } @Test public void testGetAuditFileEntry() throws Exception { String result = poc.getAuditFileEntry(); verify( poc ).getObjectClassName( PentahoObjectsConfig.AUDIT_FILE_ENTRY_ID ); } @Test public void testSetBackgroundExecutionHelper() throws Exception { poc.setBackgroundExecutionHelper( className, scope ); verifySetter( PentahoObjectsConfig.BACKGROUND_EXECUTION_HELPER_ID ); } @Test public void testGetBackgroundExecutionHelper() throws Exception { String result = poc.getBackgroundExecutionHelper(); verify( poc ).getObjectClassName( PentahoObjectsConfig.BACKGROUND_EXECUTION_HELPER_ID ); } @Test public void testSetCacheManager() throws Exception { poc.setCacheManager( className, scope ); verifySetter( PentahoObjectsConfig.CACHE_MGR_ID ); } @Test public void testGetCacheManager() throws Exception { String result = poc.getCacheManager(); verify( poc ).getObjectClassName( PentahoObjectsConfig.CACHE_MGR_ID ); } @Test public void testSetConditionalExecution() throws Exception { poc.setConditionalExecution( className, scope ); verifySetter( PentahoObjectsConfig.CONDITONAL_EXECUTION_ID ); } @Test public void testGetConditionalExecution() throws Exception { String result = poc.getConditionalExecution(); verify( poc ).getObjectClassName( PentahoObjectsConfig.CONDITONAL_EXECUTION_ID ); } @Test public void testSetContentRepository() throws Exception { poc.setContentRepository( className, scope ); verifySetter( PentahoObjectsConfig.CONTENT_REPOSITORY_ID ); } @Test public void testGetContentRepository() throws Exception { String result = poc.getContentRepository(); verify( poc ).getObjectClassName( PentahoObjectsConfig.CONTENT_REPOSITORY_ID ); } @Test public void testSetContentRepositoryOutputHandler() throws Exception { poc.setContentRepositoryOutputHandler( className, scope ); verifySetter( PentahoObjectsConfig.CONTENT_REPOSITORY_OUTPUT_HANDLER_ID ); } @Test public void testGetContentRepositoryOutputHandler() throws Exception { String result = poc.getContentRepositoryOutputHandler(); verify( poc ).getObjectClassName( PentahoObjectsConfig.CONTENT_REPOSITORY_OUTPUT_HANDLER_ID ); } @Test public void testSetDataSource() throws Exception { poc.setDataSource( className, scope ); verifySetter( PentahoObjectsConfig.DATA_SOURCE_ID ); } @Test public void testGetDataSource() throws Exception { String result = poc.getDataSource(); verify( poc ).getObjectClassName( PentahoObjectsConfig.DATA_SOURCE_ID ); } @Test public void testSetDataSourceService() throws Exception { poc.setDataSourceService( className, scope ); verifySetter( PentahoObjectsConfig.DATA_SOURCE_SERVICE_ID ); } @Test public void testGetDataSourceService() throws Exception { String result = poc.getDataSourceService(); verify( poc ).getObjectClassName( PentahoObjectsConfig.DATA_SOURCE_SERVICE_ID ); } @Test public void testSetDataSourcMgmtService() throws Exception { poc.setDataSourcMgmtService( className, scope ); verifySetter( PentahoObjectsConfig.DATA_SOURCE_MGMT_SERVICE_ID ); } @Test public void testGetDataSourcMgmtService() throws Exception { String result = poc.getDataSourcMgmtService(); verify( poc ).getObjectClassName( PentahoObjectsConfig.DATA_SOURCE_MGMT_SERVICE_ID ); } @Test public void testSetFileOutputHandler() throws Exception { poc.setFileOutputHandler( className, scope ); verifySetter( PentahoObjectsConfig.FILE_OUTPUT_HANDLER_ID ); } @Test public void testGetFileOutputHandler() throws Exception { String result = poc.getFileOutputHandler(); verify( poc ).getObjectClassName( PentahoObjectsConfig.FILE_OUTPUT_HANDLER_ID ); } @Test public void testSetMessageFormatter() throws Exception { poc.setMessageFormatter( className, scope ); verifySetter( PentahoObjectsConfig.MSG_FORMATTER_ID ); } @Test public void testGetMessageFormatter() throws Exception { String result = poc.getMessageFormatter(); verify( poc ).getObjectClassName( PentahoObjectsConfig.MSG_FORMATTER_ID ); } @Test public void testSetPasswordService() throws Exception { poc.setPasswordService( className, scope ); verifySetter( PentahoObjectsConfig.PASSWORD_SERVICE_ID ); } @Test public void testGetPasswordService() throws Exception { String result = poc.getPasswordService(); verify( poc ).getObjectClassName( PentahoObjectsConfig.PASSWORD_SERVICE_ID ); } @Test public void testSetRuntimeRepository() throws Exception { poc.setRuntimeRepository( className, scope ); verifySetter( PentahoObjectsConfig.RUNTIME_REPOSITORY_ID ); } @Test public void testGetRuntimeRepository() throws Exception { String result = poc.getRuntimeRepository(); verify( poc ).getObjectClassName( PentahoObjectsConfig.RUNTIME_REPOSITORY_ID ); } @Test public void testSetScheduler() throws Exception { poc.setScheduler( className, scope ); verifySetter( PentahoObjectsConfig.SCHEDULER_ID ); } @Test public void testGetScheduler() throws Exception { String result = poc.getScheduler(); verify( poc ).getObjectClassName( PentahoObjectsConfig.SCHEDULER_ID ); } @Test public void testSetSolutionEngine() throws Exception { poc.setSolutionEngine( className, scope ); verifySetter( PentahoObjectsConfig.SOLUTION_ENGINE_ID ); } @Test public void testGetSolutionEngine() throws Exception { String result = poc.getSolutionEngine(); verify( poc ).getObjectClassName( PentahoObjectsConfig.SOLUTION_ENGINE_ID ); } @Test public void testSetSubscriptionRepository() throws Exception { poc.setSubscriptionRepository( className, scope ); verifySetter( PentahoObjectsConfig.SUBSCRIPTION_REPOSITORY_ID ); } @Test public void testGetSubscriptionRepository() throws Exception { String result = poc.getSubscriptionRepository(); verify( poc ).getObjectClassName( PentahoObjectsConfig.SUBSCRIPTION_REPOSITORY_ID ); } @Test public void testSetSubscriptionScheduler() throws Exception { poc.setSubscriptionScheduler( className, scope ); verifySetter( PentahoObjectsConfig.SUBSCRIPTION_SCHEDULER_ID ); } @Test public void testGetSubscriptionScheduler() throws Exception { String result = poc.getSubscriptionScheduler(); verify( poc ).getObjectClassName( PentahoObjectsConfig.SUBSCRIPTION_SCHEDULER_ID ); } @Test public void testSetUiTemplater() throws Exception { poc.setUiTemplater( className, scope ); verifySetter( PentahoObjectsConfig.UI_TEMPLATER_ID ); } @Test public void testGetUiTemplater() throws Exception { String result = poc.getUiTemplater(); verify( poc ).getObjectClassName( PentahoObjectsConfig.UI_TEMPLATER_ID ); } @Test public void testSetUserFilesComponent() throws Exception { poc.setUserFilesComponent( className, scope ); verifySetter( PentahoObjectsConfig.USER_FILES_COMPONENT_ID ); } @Test public void testGetUserFilesComponent() throws Exception { String result = poc.getUserFilesComponent(); verify( poc ).getObjectClassName( PentahoObjectsConfig.USER_FILES_COMPONENT_ID ); } @Test public void testSetUserSettingsService() throws Exception { poc.setUserSettingsService( className, scope ); verifySetter( PentahoObjectsConfig.USER_SETTINGS_SERVICE_ID ); } @Test public void testGetUserSettingsService() throws Exception { String result = poc.getUserSettingsService(); verify( poc ).getObjectClassName( PentahoObjectsConfig.USER_SETTINGS_SERVICE_ID ); } @Test public void testSetVersionHelper() throws Exception { poc.setVersionHelper( className, scope ); verifySetter( PentahoObjectsConfig.VERSION_HELPER_ID ); } @Test public void testGetVersionHelper() throws Exception { String result = poc.getVersionHelper(); verify( poc ).getObjectClassName( PentahoObjectsConfig.VERSION_HELPER_ID ); } @Test public void testGetObjectBeanElement() throws Exception { Element element = pentahoObjectsConfig.getObjectBeanElement( "hello" ); assertNull( element ); } @Test public void testSetObject() throws Exception { doReturn( null ).when( poc ).getObjectBeanElement( anyString() ); PentahoObjectsConfig.ObjectDescriptor descriptor = mock( PentahoObjectsConfig.ObjectDescriptor.class ); when( descriptor.getScope() ).thenReturn( PentahoObjectsConfig.ScopeType.prototype ); when( descriptor.getClassName() ).thenReturn( className ); poc.setObject( "hello", descriptor ); verify( document ).addElement( "default:bean" ); verify( beanElement ).addAttribute( "id", "hello" ); verify( beanElement ).addAttribute( "class", className ); verify( beanElement ).addAttribute( "scope", PentahoObjectsConfig.ScopeType.prototype.name() ); } @Test public void testUpdateObject_objectDoesNotExist() throws Exception { poc = spy( pentahoObjectsConfig ); doReturn( null ).when( poc ).getObjectBeanElement( anyString() ); PentahoObjectsConfig.ObjectDescriptor descriptor = mock( PentahoObjectsConfig.ObjectDescriptor.class ); when( descriptor.getScope() ).thenReturn( PentahoObjectsConfig.ScopeType.prototype ); when( descriptor.getClassName() ).thenReturn( className ); doNothing().when( poc ).setObject( eq( "hello" ), eq( descriptor ) ); poc.updateObject( "hello", descriptor ); verify( poc ).setObject( eq( "hello" ), eq( descriptor ) ); } @Test public void testUpdateObject_objectDoesExist() throws Exception { poc = spy( pentahoObjectsConfig ); doReturn( beanElement ).when( poc ).getObjectBeanElement( anyString() ); PentahoObjectsConfig.ObjectDescriptor descriptor = mock( PentahoObjectsConfig.ObjectDescriptor.class ); when( descriptor.getScope() ).thenReturn( PentahoObjectsConfig.ScopeType.prototype ); when( descriptor.getClassName() ).thenReturn( className ); poc.updateObject( "hello", descriptor ); verify( poc, never() ).setObject( eq( "hello" ), eq( descriptor ) ); verify( beanElement ).addAttribute( "class", className ); verify( beanElement ).addAttribute( "scope", PentahoObjectsConfig.ScopeType.prototype.name() ); } @Test ( expected = NullPointerException.class ) public void testGetObjectClassName() throws Exception { pentahoObjectsConfig.setDocument( document ); String className = pentahoObjectsConfig.getObjectClassName( "hello" ); } @Test ( expected = NullPointerException.class ) public void testGetObjectScope() throws Exception { pentahoObjectsConfig.setDocument( document ); String scope = pentahoObjectsConfig.getObjectScope( "hello" ); } @Test public void testGetObject() throws Exception { pentahoObjectsConfig.setDocument( document ); assertEquals( document, pentahoObjectsConfig.getDocument() ); when( this.document.selectSingleNode( anyString() ) ).thenReturn( beanElement ); when( beanElement.attributeValue( "class" ) ).thenReturn( "org.pentaho.TestClass" ); when( beanElement.attributeValue( "scope" ) ).thenReturn( "singleton" ); PentahoObjectsConfig.ObjectDescriptor result = pentahoObjectsConfig.getObject( "hello" ); assertNotNull( result ); assertEquals( "org.pentaho.TestClass", result.getClassName() ); assertEquals( PentahoObjectsConfig.ScopeType.singleton, result.getScope() ); } @Test public void testStringToScope() throws Exception { assertEquals( PentahoObjectsConfig.ScopeType.prototype, pentahoObjectsConfig.stringToScopeType( "prototype" ) ); assertEquals( PentahoObjectsConfig.ScopeType.session, pentahoObjectsConfig.stringToScopeType( "session" ) ); assertEquals( PentahoObjectsConfig.ScopeType.singleton, pentahoObjectsConfig.stringToScopeType( "singleton" ) ); assertEquals( PentahoObjectsConfig.ScopeType.undefined, pentahoObjectsConfig.stringToScopeType( null ) ); assertEquals( PentahoObjectsConfig.ScopeType.undefined, pentahoObjectsConfig.stringToScopeType( "xyz" ) ); assertEquals( PentahoObjectsConfig.ScopeType.undefined, pentahoObjectsConfig.stringToScopeType( "other" ) ); } }