package org.jabref.logic.util;
import java.util.Optional;
import org.jabref.model.FieldChange;
import org.jabref.model.entry.BibEntry;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class UpdateFieldTest {
private BibEntry entry;
@Before
public void setUp() throws Exception {
entry = new BibEntry();
entry.setChanged(false);
}
@Test
public void testUpdateFieldWorksEmptyField() {
assertFalse(entry.hasField("year"));
UpdateField.updateField(entry, "year", "2016");
assertEquals(Optional.of("2016"), entry.getField("year"));
}
@Test
public void testUpdateFieldWorksNonEmptyField() {
entry.setField("year", "2015");
UpdateField.updateField(entry, "year", "2016");
assertEquals(Optional.of("2016"), entry.getField("year"));
}
@Test
public void testUpdateFieldHasChanged() {
assertFalse(entry.hasChanged());
UpdateField.updateField(entry, "year", "2016");
assertTrue(entry.hasChanged());
}
@Test
public void testUpdateFieldValidFieldChange() {
Optional<FieldChange> change = UpdateField.updateField(entry, "year", "2016");
assertTrue(change.isPresent());
}
@Test
public void testUpdateFieldCorrectFieldChangeContentsEmptyField() {
Optional<FieldChange> change = UpdateField.updateField(entry, "year", "2016");
assertNull(change.get().getOldValue());
assertEquals("year", change.get().getField());
assertEquals("2016", change.get().getNewValue());
assertEquals(entry, change.get().getEntry());
}
@Test
public void testUpdateFieldCorrectFieldChangeContentsNonEmptyField() {
entry.setField("year", "2015");
Optional<FieldChange> change = UpdateField.updateField(entry, "year", "2016");
assertEquals("2015", change.get().getOldValue());
assertEquals("year", change.get().getField());
assertEquals("2016", change.get().getNewValue());
assertEquals(entry, change.get().getEntry());
}
@Test
public void testUpdateFieldSameValueNoChange() {
entry.setField("year", "2016");
Optional<FieldChange> change = UpdateField.updateField(entry, "year", "2016");
assertFalse(change.isPresent());
}
@Test
public void testUpdateFieldSameValueNotChange() {
entry.setField("year", "2016");
entry.setChanged(false);
UpdateField.updateField(entry, "year", "2016");
assertFalse(entry.hasChanged());
}
@Test
public void testUpdateFieldSetToNullClears() {
entry.setField("year", "2016");
UpdateField.updateField(entry, "year", null);
assertFalse(entry.hasField("year"));
}
@Test
public void testUpdateFieldSetEmptyToNullClears() {
UpdateField.updateField(entry, "year", null);
assertFalse(entry.hasField("year"));
}
@Test
public void testUpdateFieldSetToNullHasFieldChangeContents() {
entry.setField("year", "2016");
Optional<FieldChange> change = UpdateField.updateField(entry, "year", null);
assertTrue(change.isPresent());
}
@Test
public void testUpdateFieldSetRmptyToNullHasNoFieldChangeContents() {
Optional<FieldChange> change = UpdateField.updateField(entry, "year", null);
assertFalse(change.isPresent());
}
@Test
public void testUpdateFieldSetToNullCorrectFieldChangeContents() {
entry.setField("year", "2016");
Optional<FieldChange> change = UpdateField.updateField(entry, "year", null);
assertNull(change.get().getNewValue());
assertEquals("year", change.get().getField());
assertEquals("2016", change.get().getOldValue());
assertEquals(entry, change.get().getEntry());
}
@Test
public void testUpdateFieldSameContentClears() {
entry.setField("year", "2016");
UpdateField.updateField(entry, "year", "2016", true);
assertFalse(entry.hasField("year"));
}
@Test
public void testUpdateFieldSameContentHasChanged() {
entry.setField("year", "2016");
entry.setChanged(false);
UpdateField.updateField(entry, "year", "2016", true);
assertTrue(entry.hasChanged());
}
@Test
public void testUpdateFieldSameContentHasFieldChange() {
entry.setField("year", "2016");
Optional<FieldChange> change = UpdateField.updateField(entry, "year", "2016", true);
assertTrue(change.isPresent());
}
@Test
public void testUpdateFieldSameContentHasCorrectFieldChange() {
entry.setField("year", "2016");
Optional<FieldChange> change = UpdateField.updateField(entry, "year", "2016", true);
assertNull(change.get().getNewValue());
assertEquals("year", change.get().getField());
assertEquals("2016", change.get().getOldValue());
assertEquals(entry, change.get().getEntry());
}
@Test
public void testUpdateNonDisplayableFieldUpdates() {
assertFalse(entry.hasField("year"));
UpdateField.updateNonDisplayableField(entry, "year", "2016");
assertTrue(entry.hasField("year"));
assertEquals(Optional.of("2016"), entry.getField("year"));
}
@Test
public void testUpdateNonDisplayableFieldHasNotChanged() {
assertFalse(entry.hasChanged());
UpdateField.updateNonDisplayableField(entry, "year", "2016");
assertFalse(entry.hasChanged());
}
}