package org.jabref.model.database;
import java.util.Optional;
import org.jabref.model.entry.BibEntry;
import org.jabref.model.entry.FieldName;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class KeyChangeListenerTest {
private BibDatabase db;
private BibEntry entry1;
private BibEntry entry2;
private BibEntry entry3;
private BibEntry entry4;
@Before
public void setUp() {
db = new BibDatabase();
entry1 = new BibEntry();
entry1.setCiteKey("Entry1");
entry1.setField(FieldName.CROSSREF, "Entry4");
db.insertEntry(entry1);
entry2 = new BibEntry();
entry2.setCiteKey("Entry2");
entry2.setField(FieldName.RELATED, "Entry1,Entry3");
db.insertEntry(entry2);
entry3 = new BibEntry();
entry3.setCiteKey("Entry3");
entry3.setField(FieldName.RELATED, "Entry1,Entry2,Entry3");
db.insertEntry(entry3);
entry4 = new BibEntry();
entry4.setCiteKey("Entry4");
db.insertEntry(entry4);
}
@Test
public void testCrossrefChanged() {
assertEquals(Optional.of("Entry4"), entry1.getField("crossref"));
entry4.setCiteKey("Banana");
assertEquals(Optional.of("Banana"), entry1.getField("crossref"));
}
@Test
public void testRelatedChanged() {
assertEquals(Optional.of("Entry1,Entry3"), entry2.getField("related"));
entry1.setCiteKey("Banana");
assertEquals(Optional.of("Banana,Entry3"), entry2.getField("related"));
}
@Test
public void testRelatedChangedInSameEntry() {
assertEquals(Optional.of("Entry1,Entry2,Entry3"), entry3.getField("related"));
entry3.setCiteKey("Banana");
assertEquals(Optional.of("Entry1,Entry2,Banana"), entry3.getField("related"));
}
@Test
public void testCrossrefRemoved() {
entry4.clearField(BibEntry.KEY_FIELD);
assertEquals(Optional.empty(), entry1.getField("crossref"));
}
@Test
public void testCrossrefEntryRemoved() {
db.removeEntry(entry4);
assertEquals(Optional.empty(), entry1.getField("crossref"));
}
@Test
public void testRelatedEntryRemoved() {
db.removeEntry(entry1);
assertEquals(Optional.of("Entry3"), entry2.getField("related"));
}
@Test
public void testRelatedAllEntriesRemoved() {
db.removeEntry(entry1);
db.removeEntry(entry3);
assertEquals(Optional.empty(), entry2.getField("related"));
}
}