package org.bonitasoft.console.common.server.utils; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.BDDMockito.given; import java.io.File; import org.bonitasoft.console.common.server.preferences.constants.WebBonitaConstantsUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class BonitaHomeFolderAccessorTest { @Mock private WebBonitaConstantsUtils webBonitaConstantsUtils; @Spy private final BonitaHomeFolderAccessor tenantFolder = new BonitaHomeFolderAccessor(); @Before public void setUp() throws Exception { } @Test public void should_authorized_a_file_in_temp_folder() throws Exception { given(webBonitaConstantsUtils.getTempFolder()).willReturn(new File("." + File.separator + "tempFolder")); final File file = new File(webBonitaConstantsUtils.getTempFolder().getAbsolutePath(), "" + File.separator + ".." + File.separator + "tempFolder" + File.separator + "fileName.txt"); final boolean isInTempFolder = tenantFolder.isInTempFolder(file, webBonitaConstantsUtils); assertTrue(isInTempFolder); } @Test public void should_unauthorized_a_file_not_in_temp_folder() throws Exception { given(webBonitaConstantsUtils.getTempFolder()).willReturn(new File("." + File.separator + "tempFolder")); final File file = new File(webBonitaConstantsUtils.getTempFolder().getAbsolutePath(), "" + File.separator + ".." + File.separator + ".." + File.separator + ".." + File.separator + "fileName.txt"); final boolean isInTempFolder = tenantFolder.isInTempFolder(file, webBonitaConstantsUtils); assertFalse(isInTempFolder); } @Test public void should_authorized_a_file_in_a_specific_folder() throws Exception { final File folder = new File("." + File.separator + "anyFolder"); final File file = new File("." + File.separator + "anyFolder" + File.separator + ".." + File.separator + "anyFolder" + File.separator + "fileName.txt"); final boolean isInTempFolder = tenantFolder.isInFolder(file, folder); assertTrue(isInTempFolder); } @Test public void should_unauthorized_a_file_not_in_a_specific_folder() throws Exception { final File folder = new File("." + File.separator + "anyFolder"); final File file = new File("." + File.separator + "anyFolder" + File.separator + ".." + File.separator + ".." + File.separator + "fileName.txt"); final boolean isInTempFolder = tenantFolder.isInFolder(file, folder); assertFalse(isInTempFolder); } @Test public void should_complete_file_path() throws Exception { final String fileName = "fileName.txt"; given(tenantFolder.getBonitaConstantUtil(1L)).willReturn(webBonitaConstantsUtils); given(webBonitaConstantsUtils.getTempFolder()).willReturn(new File("." + File.separator + "tempFolder")); final String completedPath = tenantFolder.getCompleteTempFilePath(fileName, 1L); assertThat(new File(completedPath).getCanonicalPath()).isEqualTo( new File("." + File.separator + "tempFolder" + File.separator + "fileName.txt").getCanonicalPath()); } @Test public void should_verifyAuthorization_file_path() throws Exception { final String fileName = "c:" + File.separator + "tempFolder" + File.separator + "fileName.txt"; given(tenantFolder.getBonitaConstantUtil(1L)).willReturn(webBonitaConstantsUtils); given(webBonitaConstantsUtils.getTempFolder()).willReturn(new File("c:" + File.separator + "tempFolder")); final String completedPath = tenantFolder.getCompleteTempFilePath(fileName, 1L); assertThat(completedPath).isEqualTo("c:" + File.separator + "tempFolder" + File.separator + "fileName.txt"); } @Test(expected = UnauthorizedFolderException.class) public void should_UnauthorizedFolder() throws Exception { final String fileName = "c:" + File.separator + "UnauthorizedFolder" + File.separator + "tempFolder" + File.separator + "fileName.txt"; given(tenantFolder.getBonitaConstantUtil(1L)).willReturn(webBonitaConstantsUtils); given(webBonitaConstantsUtils.getTempFolder()).willReturn(new File("c:" + File.separator + "tempFolder")); tenantFolder.getCompleteTempFilePath(fileName, 1L); } @Test public void should_return_completed_temp_file() throws Exception { final String fileName = "fileName.txt"; given(tenantFolder.getBonitaConstantUtil(1L)).willReturn(webBonitaConstantsUtils); given(webBonitaConstantsUtils.getTempFolder()).willReturn(new File("." + File.separator + "tempFolder")); final File completedFile = tenantFolder.getTempFile(fileName, 1L); assertThat(completedFile.getCanonicalPath()).isEqualTo( new File("." + File.separator + "tempFolder" + File.separator + "fileName.txt").getCanonicalPath()); } }