| 
1 | 1 | package org.jabref.logic.importer;  | 
2 | 2 | 
 
  | 
3 |  | -import java.util.Collections;  | 
4 |  | -import java.util.Collection;  | 
 | 3 | +import static org.junit.jupiter.api.Assertions.assertEquals;  | 
 | 4 | +import static org.junit.jupiter.api.Assertions.assertFalse;  | 
 | 5 | +import static org.junit.jupiter.api.Assertions.assertNotNull;  | 
 | 6 | +import static org.junit.jupiter.api.Assertions.assertTrue;  | 
 | 7 | +import static org.mockito.Mockito.mock;  | 
 | 8 | +import static org.mockito.Mockito.when;  | 
 | 9 | + | 
 | 10 | +import java.nio.file.Files;  | 
 | 11 | +import java.nio.file.Path;  | 
5 | 12 | import java.util.ArrayList;  | 
6 |  | -import java.util.Optional;  | 
7 | 13 | import java.util.Arrays;  | 
 | 14 | +import java.util.Collection;  | 
 | 15 | +import java.util.Collections;  | 
8 | 16 | import java.util.List;  | 
9 |  | - | 
 | 17 | +import java.util.Optional;  | 
10 | 18 | import javafx.collections.FXCollections;  | 
11 | 19 | import javafx.collections.ObservableList;  | 
12 | 20 | import org.jabref.logic.importer.fileformat.BibtexImporter;  | 
 | 
21 | 29 | import org.junit.jupiter.api.Test;  | 
22 | 30 | import org.mockito.Answers;  | 
23 | 31 | 
 
  | 
24 |  | -import static org.junit.jupiter.api.Assertions.assertEquals;  | 
25 |  | -import static org.junit.jupiter.api.Assertions.assertNotNull;  | 
26 |  | -import static org.junit.jupiter.api.Assertions.assertTrue;  | 
27 |  | -import static org.junit.jupiter.api.Assertions.assertFalse;  | 
28 |  | -import static org.mockito.Mockito.mock;  | 
29 |  | -import static org.mockito.Mockito.when;  | 
30 |  | -import java.nio.file.Files;  | 
31 |  | -import java.nio.file.Path;  | 
32 |  | - | 
33 | 32 | class DatabaseFileLookupTest {  | 
34 | 33 | 
 
  | 
35 |  | -    private BibDatabase database;  | 
36 |  | -    private Collection<BibEntry> entries;  | 
37 |  | - | 
38 |  | -    private BibEntry entry1;  | 
39 |  | -    private BibEntry entry2;  | 
40 |  | -    private Path tempDir;  | 
41 |  | -    private Path txtFileDir;  | 
42 |  | -    private FilePreferences filePreferences;  | 
43 |  | -    private DatabaseFileLookup fileLookup;  | 
44 |  | - | 
45 |  | -    /**  | 
46 |  | -     * Sets up the test environment before each test case.  | 
47 |  | -     *  | 
48 |  | -     * @throws Exception if an error occurs during setup  | 
49 |  | -     */  | 
50 |  | -    @BeforeEach  | 
51 |  | -    void setUp() throws Exception {  | 
52 |  | -        ParserResult result = new BibtexImporter(mock(ImportFormatPreferences.class, Answers.RETURNS_DEEP_STUBS),  | 
53 |  | -                new DummyFileUpdateMonitor())  | 
54 |  | -                .importDatabase(ImportDataTest.UNLINKED_FILES_TEST_BIB);  | 
55 |  | -        database = result.getDatabase();  | 
56 |  | -        entries = database.getEntries();  | 
57 |  | - | 
58 |  | -        tempDir = Files.createTempDirectory("testDir");  | 
59 |  | -        txtFileDir = tempDir.resolve("x.txt");  | 
60 |  | - | 
61 |  | -        entry1 = database.getEntryByCitationKey("entry1").get();  | 
62 |  | -        entry2 = database.getEntryByCitationKey("entry2").get();  | 
63 |  | - | 
64 |  | -        BibEntry entry3 = new BibEntry().withField(StandardField.FILE, txtFileDir.toAbsolutePath().toString());  | 
65 |  | -        BibEntry entry4 = new BibEntry().withField(StandardField.FILE, "");  | 
66 |  | - | 
67 |  | -        List<BibEntry> entries = new ArrayList<>(Arrays.asList(entry1, entry2, entry3, entry4));  | 
68 |  | -        ObservableList<BibEntry> observableEntryList = FXCollections  | 
69 |  | -                .synchronizedObservableList(FXCollections.observableArrayList(entries));  | 
70 |  | -        BibDatabase databaseMock = mock(BibDatabase.class);  | 
71 |  | -        when(databaseMock.getEntries()).thenReturn(observableEntryList);  | 
72 |  | - | 
73 |  | -        Files.write(txtFileDir, Collections.singleton("x.txt file contents for test"));  | 
74 |  | - | 
75 |  | -        filePreferences = mock(FilePreferences.class);  | 
76 |  | -        when(filePreferences.getMainFileDirectory()).thenReturn(Optional.of(txtFileDir.toAbsolutePath()));  | 
77 |  | - | 
78 |  | -        BibDatabaseContext databaseContext = mock(BibDatabaseContext.class);  | 
79 |  | -        when(databaseContext.getFileDirectories(filePreferences))  | 
80 |  | -                .thenReturn(Collections.singletonList(txtFileDir));  | 
81 |  | -        when(databaseContext.getDatabase()).thenReturn(databaseMock);  | 
82 |  | -        when(databaseContext.getDatabase().getEntries()).thenReturn(observableEntryList);  | 
83 |  | -        when(databaseContext.getDatabasePath()).thenReturn(Optional.of(txtFileDir.toAbsolutePath()));  | 
84 |  | -        fileLookup = new DatabaseFileLookup(databaseContext, filePreferences);  | 
85 |  | -    }  | 
86 |  | - | 
87 |  | -    /**  | 
88 |  | -     * Tests the prerequisites of this test-class itself.  | 
89 |  | -     */  | 
90 |  | -    @Test  | 
91 |  | -    void prerequisitesFulfilled() {  | 
92 |  | -        assertEquals(2, database.getEntryCount());  | 
93 |  | -        assertEquals(2, entries.size());  | 
94 |  | -        assertNotNull(entry1);  | 
95 |  | -        assertNotNull(entry2);  | 
96 |  | -    }  | 
97 |  | - | 
98 |  | -    /**  | 
99 |  | -     * x.txt should be found in the given directory.  | 
100 |  | -     */  | 
101 |  | -    @Test  | 
102 |  | -    void fileShouldBeFound() {  | 
103 |  | -        assertTrue(fileLookup.lookupDatabase(txtFileDir));  | 
104 |  | -        assertEquals(filePreferences.getMainFileDirectory().orElse(Path.of("")).toString(),  | 
105 |  | -                txtFileDir.toAbsolutePath().toString());  | 
106 |  | -        assertNotNull(fileLookup.getPathOfDatabase());  | 
107 |  | -    }  | 
108 |  | - | 
109 |  | -    /**  | 
110 |  | -     *  | 
111 |  | -     * y.txt should not be found in the any directory.  | 
112 |  | -     */  | 
113 |  | -    @Test  | 
114 |  | -    void fileShouldNotBeFound() {  | 
115 |  | -        assertFalse(fileLookup.lookupDatabase(tempDir.resolve("y.txt")));  | 
116 |  | -    }  | 
 | 34 | +  private BibDatabase database;  | 
 | 35 | +  private Collection<BibEntry> entries;  | 
 | 36 | + | 
 | 37 | +  private BibEntry entry1;  | 
 | 38 | +  private BibEntry entry2;  | 
 | 39 | +  private Path tempDir;  | 
 | 40 | +  private Path txtFileDir;  | 
 | 41 | +  private FilePreferences filePreferences;  | 
 | 42 | +  private DatabaseFileLookup fileLookup;  | 
 | 43 | + | 
 | 44 | +  /**  | 
 | 45 | +   * Sets up the test environment before each test case.  | 
 | 46 | +   *  | 
 | 47 | +   * @throws Exception if an error occurs during setup  | 
 | 48 | +   */  | 
 | 49 | +  @BeforeEach  | 
 | 50 | +  void setUp() throws Exception {  | 
 | 51 | +    ParserResult result = new BibtexImporter(  | 
 | 52 | +      mock(ImportFormatPreferences.class, Answers.RETURNS_DEEP_STUBS),  | 
 | 53 | +      new DummyFileUpdateMonitor()  | 
 | 54 | +    ).importDatabase(ImportDataTest.UNLINKED_FILES_TEST_BIB);  | 
 | 55 | +    database = result.getDatabase();  | 
 | 56 | +    entries = database.getEntries();  | 
 | 57 | + | 
 | 58 | +    tempDir = Files.createTempDirectory("testDir");  | 
 | 59 | +    txtFileDir = tempDir.resolve("x.txt");  | 
 | 60 | + | 
 | 61 | +    entry1 = database.getEntryByCitationKey("entry1").get();  | 
 | 62 | +    entry2 = database.getEntryByCitationKey("entry2").get();  | 
 | 63 | + | 
 | 64 | +    BibEntry entry3 = new BibEntry()  | 
 | 65 | +      .withField(StandardField.FILE, txtFileDir.toAbsolutePath().toString());  | 
 | 66 | +    BibEntry entry4 = new BibEntry().withField(StandardField.FILE, "");  | 
 | 67 | + | 
 | 68 | +    List<BibEntry> entries = new ArrayList<>(  | 
 | 69 | +      Arrays.asList(entry1, entry2, entry3, entry4)  | 
 | 70 | +    );  | 
 | 71 | +    ObservableList<BibEntry> observableEntryList =  | 
 | 72 | +      FXCollections.synchronizedObservableList(  | 
 | 73 | +        FXCollections.observableArrayList(entries)  | 
 | 74 | +      );  | 
 | 75 | +    BibDatabase databaseMock = mock(BibDatabase.class);  | 
 | 76 | +    when(databaseMock.getEntries()).thenReturn(observableEntryList);  | 
 | 77 | + | 
 | 78 | +    Files.write(  | 
 | 79 | +      txtFileDir,  | 
 | 80 | +      Collections.singleton("x.txt file contents for test")  | 
 | 81 | +    );  | 
 | 82 | + | 
 | 83 | +    filePreferences = mock(FilePreferences.class);  | 
 | 84 | +    when(filePreferences.getMainFileDirectory()).thenReturn(  | 
 | 85 | +      Optional.of(txtFileDir.toAbsolutePath())  | 
 | 86 | +    );  | 
 | 87 | + | 
 | 88 | +    BibDatabaseContext databaseContext = mock(BibDatabaseContext.class);  | 
 | 89 | +    when(databaseContext.getFileDirectories(filePreferences)).thenReturn(  | 
 | 90 | +      Collections.singletonList(txtFileDir)  | 
 | 91 | +    );  | 
 | 92 | +    when(databaseContext.getDatabase()).thenReturn(databaseMock);  | 
 | 93 | +    when(databaseContext.getDatabase().getEntries()).thenReturn(  | 
 | 94 | +      observableEntryList  | 
 | 95 | +    );  | 
 | 96 | +    when(databaseContext.getDatabasePath()).thenReturn(  | 
 | 97 | +      Optional.of(txtFileDir.toAbsolutePath())  | 
 | 98 | +    );  | 
 | 99 | +    fileLookup = new DatabaseFileLookup(databaseContext, filePreferences);  | 
 | 100 | +  }  | 
 | 101 | + | 
 | 102 | +  /**  | 
 | 103 | +   * Tests the prerequisites of this test-class itself.  | 
 | 104 | +   */  | 
 | 105 | +  @Test  | 
 | 106 | +  void prerequisitesFulfilled() {  | 
 | 107 | +    assertEquals(2, database.getEntryCount());  | 
 | 108 | +    assertEquals(2, entries.size());  | 
 | 109 | +    assertNotNull(entry1);  | 
 | 110 | +    assertNotNull(entry2);  | 
 | 111 | +  }  | 
 | 112 | + | 
 | 113 | +  /**  | 
 | 114 | +   * x.txt should be found in the given directory.  | 
 | 115 | +   */  | 
 | 116 | +  @Test  | 
 | 117 | +  void fileShouldBeFound() {  | 
 | 118 | +    assertTrue(fileLookup.lookupDatabase(txtFileDir));  | 
 | 119 | +    assertEquals(  | 
 | 120 | +      filePreferences.getMainFileDirectory().orElse(Path.of("")).toString(),  | 
 | 121 | +      txtFileDir.toAbsolutePath().toString()  | 
 | 122 | +    );  | 
 | 123 | +    assertNotNull(fileLookup.getPathOfDatabase());  | 
 | 124 | +  }  | 
 | 125 | + | 
 | 126 | +  /**  | 
 | 127 | +   *  | 
 | 128 | +   * y.txt should not be found in the any directory.  | 
 | 129 | +   */  | 
 | 130 | +  @Test  | 
 | 131 | +  void fileShouldNotBeFound() {  | 
 | 132 | +    assertFalse(fileLookup.lookupDatabase(tempDir.resolve("y.txt")));  | 
 | 133 | +  }  | 
117 | 134 | }  | 
0 commit comments