package org.jabref.model.database;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
import org.jabref.model.metadata.FileDirectoryPreferences;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class BibDatabaseContextTest {
private Path currentWorkingDir;
// Store the minimal preferences for the
// BibDatabaseContext.getFileDirectories(File,
// FileDirectoryPreferences) incocation:
private FileDirectoryPreferences fileDirPrefs;
@Rule public ExpectedException thrown = ExpectedException.none();
@Before
public void setUp() {
fileDirPrefs = mock(FileDirectoryPreferences.class);
currentWorkingDir = Paths.get(System.getProperty("user.dir"));
when(fileDirPrefs.isBibLocationAsPrimary()).thenReturn(true);
}
@Test
public void getFileDirectoriesWithEmptyDbParent() {
BibDatabaseContext dbContext = new BibDatabaseContext();
dbContext.setDatabaseFile(Paths.get("biblio.bib").toFile());
List<String> fileDirectories = dbContext.getFileDirectories("file", fileDirPrefs);
assertEquals(Collections.singletonList(currentWorkingDir.toString()),
fileDirectories);
}
@Test
public void getFileDirectoriesWithRelativeDbParent() {
Path file = Paths.get("relative/subdir").resolve("biblio.bib");
BibDatabaseContext dbContext = new BibDatabaseContext();
dbContext.setDatabaseFile(file.toFile());
List<String> fileDirectories = dbContext.getFileDirectories("file", fileDirPrefs);
assertEquals(Collections.singletonList(currentWorkingDir.resolve(file.getParent()).toString()),
fileDirectories);
}
@Test
public void getFileDirectoriesWithRelativeDottedDbParent() {
Path file = Paths.get("./relative/subdir").resolve("biblio.bib");
BibDatabaseContext dbContext = new BibDatabaseContext();
dbContext.setDatabaseFile(file.toFile());
List<String> fileDirectories = dbContext.getFileDirectories("file", fileDirPrefs);
assertEquals(Collections.singletonList(currentWorkingDir.resolve(file.getParent()).toString()),
fileDirectories);
}
@Test
public void getFileDirectoriesWithAbsoluteDbParent() {
Path file = Paths.get("/absolute/subdir").resolve("biblio.bib");
BibDatabaseContext dbContext = new BibDatabaseContext();
dbContext.setDatabaseFile(file.toFile());
List<String> fileDirectories = dbContext.getFileDirectories("file", fileDirPrefs);
assertEquals(Collections.singletonList(currentWorkingDir.resolve(file.getParent()).toString()),
fileDirectories);
}
}