/*! * Copyright 2010 - 2016 Pentaho Corporation. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.pentaho.di.repository.pur; import org.apache.commons.lang.reflect.FieldUtils; import org.junit.Test; import org.pentaho.di.job.JobMeta; import org.pentaho.di.repository.RepositoryDirectoryInterface; import org.pentaho.di.repository.RepositoryElementInterface; import org.pentaho.di.repository.RepositoryObject; import org.pentaho.di.repository.RepositoryObjectType; import org.pentaho.di.repository.StringObjectId; import org.pentaho.di.trans.TransMeta; import org.pentaho.platform.api.repository2.unified.IUnifiedRepository; import java.io.Serializable; import java.util.concurrent.Callable; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** * @author Andrey Khayrutdinov */ public class PurRepository_GetObjectInformation_IT extends PurRepositoryTestBase { public PurRepository_GetObjectInformation_IT( Boolean lazyRepo ) { super( lazyRepo ); } @Test public void getObjectInformation_IsDeletedFlagSet_Job() throws Exception { testDeletedFlagForObject( new Callable<RepositoryElementInterface>() { @Override public RepositoryElementInterface call() throws Exception { JobMeta jobMeta = new JobMeta(); jobMeta.setName( "testJobMeta" ); return jobMeta; } } ); } @Test public void getObjectInformation_IsDeletedFlagSet_Trans() throws Exception { testDeletedFlagForObject( new Callable<RepositoryElementInterface>() { @Override public RepositoryElementInterface call() throws Exception { TransMeta transMeta = new TransMeta(); transMeta.setName( "testTransMeta" ); return transMeta; } } ); } private void testDeletedFlagForObject( Callable<RepositoryElementInterface> elementProvider ) throws Exception { TransDelegate transDelegate = new TransDelegate( purRepository, unifiedRepository ); JobDelegate jobDelegate = new JobDelegate( purRepository, unifiedRepository ); FieldUtils.writeField( purRepository, "transDelegate", transDelegate, true ); FieldUtils.writeField( purRepository, "jobDelegate", jobDelegate, true ); RepositoryElementInterface element = elementProvider.call(); RepositoryDirectoryInterface directory = purRepository.findDirectory( element.getRepositoryDirectory().getPath() ); element.setRepositoryDirectory( directory ); purRepository.save( element, null, null ); assertNotNull( "Element was saved", element.getObjectId() ); RepositoryObject information; information = purRepository.getObjectInformation( element.getObjectId(), element.getRepositoryElementType() ); assertNotNull( information ); assertFalse( information.isDeleted() ); purRepository.deleteTransformation( element.getObjectId() ); assertNotNull( "Element was moved to Trash", unifiedRepository.getFileById( element.getObjectId().getId() ) ); information = purRepository.getObjectInformation( element.getObjectId(), element.getRepositoryElementType() ); assertNotNull( information ); assertTrue( information.isDeleted() ); } @Test public void getObjectInformation_InvalidRepositoryId_ExceptionIsHandled() throws Exception { IUnifiedRepository unifiedRepository = mock( IUnifiedRepository.class ); when( unifiedRepository.getFileById( any( Serializable.class ) ) ).thenThrow( new RuntimeException( "unknown id" ) ); purRepository.setTest( unifiedRepository ); RepositoryObject information = purRepository.getObjectInformation( new StringObjectId( "invalid id" ), RepositoryObjectType.JOB ); assertNull( "Should return null if file was not found", information ); } @Test public void getObjectInformation_InvalidRepositoryId_NullIsHandled() throws Exception { IUnifiedRepository unifiedRepository = mock( IUnifiedRepository.class ); when( unifiedRepository.getFileById( any( Serializable.class ) ) ).thenReturn( null ); purRepository.setTest( unifiedRepository ); RepositoryObject information = purRepository.getObjectInformation( new StringObjectId( "invalid id" ), RepositoryObjectType.JOB ); assertNull( "Should return null if file was not found", information ); } }