package org.pentaho.platform.web.http.api.resources;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.pentaho.platform.api.repository2.unified.IUnifiedRepository;
import org.pentaho.platform.api.repository2.unified.RepositoryFile;
import org.pentaho.platform.api.usersettings.IUserSettingService;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import static org.junit.Assert.*;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.*;
/**
* Created by rfellows on 9/23/15.
*/
public class SchedulerOutputPathResolverTest {
SchedulerOutputPathResolver schedulerOutputPathResolver;
IUnifiedRepository repo;
IUserSettingService userSettingService;
@Before
public void setUp() throws Exception {
repo = mock( IUnifiedRepository.class );
userSettingService = mock( IUserSettingService.class );
PentahoSystem.registerObject( repo );
PentahoSystem.registerObject( userSettingService );
}
@Test
public void testResolveOutputFilePath() throws Exception {
JobScheduleRequest scheduleRequest = new JobScheduleRequest();
String inputFile = "/home/admin/test.prpt";
String outputFolder = "/home/admin/output";
scheduleRequest.setInputFile( inputFile );
scheduleRequest.setOutputFile( outputFolder );
RepositoryFile repoFile = mock( RepositoryFile.class );
when( repo.getFile( outputFolder ) ).thenReturn( repoFile );
when( repoFile.isFolder() ).thenReturn( true );
schedulerOutputPathResolver = new SchedulerOutputPathResolver( scheduleRequest );
String outputFilePath = schedulerOutputPathResolver.resolveOutputFilePath();
assertEquals( "/home/admin/output/test.*", outputFilePath );
verify( repo ).getFile( outputFolder );
}
@Test
public void testResolveOutputFilePath_ContainsPatternAlready() throws Exception {
JobScheduleRequest scheduleRequest = new JobScheduleRequest();
String inputFile = "/home/admin/test.prpt";
String outputFolder = "/home/admin/output/test.*";
scheduleRequest.setInputFile( inputFile );
scheduleRequest.setOutputFile( outputFolder );
RepositoryFile repoFile = mock( RepositoryFile.class );
when( repo.getFile( anyString() ) ).thenReturn( repoFile );
when( repoFile.isFolder() ).thenReturn( true );
schedulerOutputPathResolver = new SchedulerOutputPathResolver( scheduleRequest );
String outputFilePath = schedulerOutputPathResolver.resolveOutputFilePath();
assertEquals( "/home/admin/output/test.*", outputFilePath );
verify( repo ).getFile( "/home/admin/output" );
}
@Test
public void testResolveOutputFilePath_Fallback() throws Exception {
JobScheduleRequest scheduleRequest = new JobScheduleRequest();
String inputFile = "/home/admin/test.prpt";
String outputFolder = null;
scheduleRequest.setInputFile( inputFile );
scheduleRequest.setOutputFile( outputFolder );
RepositoryFile repoFile = mock( RepositoryFile.class );
when( repo.getFile( anyString() ) ).thenReturn( repoFile );
when( repoFile.isFolder() ).thenReturn( false );
schedulerOutputPathResolver = spy( new SchedulerOutputPathResolver( scheduleRequest ) );
doReturn( "/home/admin/setting" ).when( schedulerOutputPathResolver ).getUserSettingOutputPath();
doReturn( "/system/setting" ).when( schedulerOutputPathResolver ).getSystemSettingOutputPath();
doReturn( "/home/admin" ).when( schedulerOutputPathResolver ).getUserHomeDirectoryPath();
doReturn( true ).when( schedulerOutputPathResolver ).isValidOutputPath( "/home/admin/setting" );
String outputFilePath = schedulerOutputPathResolver.resolveOutputFilePath();
assertEquals( "/home/admin/setting/test.*", outputFilePath );
}
@Test
public void testResolveOutputFilePath_FallbackFarther() throws Exception {
JobScheduleRequest scheduleRequest = new JobScheduleRequest();
String inputFile = "/home/admin/test.prpt";
String outputFolder = null;
scheduleRequest.setInputFile( inputFile );
scheduleRequest.setOutputFile( outputFolder );
RepositoryFile repoFile = mock( RepositoryFile.class );
when( repo.getFile( anyString() ) ).thenReturn( repoFile );
when( repoFile.isFolder() ).thenReturn( false );
schedulerOutputPathResolver = spy( new SchedulerOutputPathResolver( scheduleRequest ) );
doReturn( null ).when( schedulerOutputPathResolver ).getUserSettingOutputPath();
doReturn( null ).when( schedulerOutputPathResolver ).getSystemSettingOutputPath();
doReturn( "/home/admin" ).when( schedulerOutputPathResolver ).getUserHomeDirectoryPath();
doReturn( true ).when( schedulerOutputPathResolver ).isValidOutputPath( "/home/admin" );
String outputFilePath = schedulerOutputPathResolver.resolveOutputFilePath();
assertEquals( "/home/admin/test.*", outputFilePath );
}
@After
public void tearDown() throws Exception {
PentahoSystem.clearObjectFactory();
}
}