package org.jabref.logic.importer.fetcher;
import java.io.IOException;
import java.net.URL;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import org.jabref.logic.bibtex.FieldContentParserPreferences;
import org.jabref.logic.importer.FetcherException;
import org.jabref.logic.importer.ImportFormatPreferences;
import org.jabref.model.entry.BibEntry;
import org.jabref.model.entry.BibtexEntryTypes;
import org.jabref.model.entry.FieldName;
import org.jabref.support.DevEnvironment;
import org.jabref.testutils.category.FetcherTests;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@Category(FetcherTests.class)
public class GoogleScholarTest {
private GoogleScholar finder;
private BibEntry entry;
@Before
public void setUp() {
ImportFormatPreferences importFormatPreferences = mock(ImportFormatPreferences.class);
when(importFormatPreferences.getFieldContentParserPreferences()).thenReturn(
mock(FieldContentParserPreferences.class));
finder = new GoogleScholar(importFormatPreferences);
entry = new BibEntry();
}
@Test(expected = NullPointerException.class)
public void rejectNullParameter() throws IOException, FetcherException {
finder.findFullText(null);
Assert.fail();
}
@Test
public void requiresEntryTitle() throws IOException, FetcherException {
Assert.assertEquals(Optional.empty(), finder.findFullText(entry));
}
@Test
public void linkFound() throws IOException, FetcherException {
// CI server is blocked by Google
Assume.assumeFalse(DevEnvironment.isCIServer());
entry.setField("title", "Towards Application Portability in Platform as a Service");
Assert.assertEquals(
Optional.of(new URL("https://www.uni-bamberg.de/fileadmin/uni/fakultaeten/wiai_lehrstuehle/praktische_informatik/Dateien/Publikationen/sose14-towards-application-portability-in-paas.pdf")),
finder.findFullText(entry)
);
}
@Test
public void noLinkFound() throws IOException, FetcherException {
// CI server is blocked by Google
Assume.assumeFalse(DevEnvironment.isCIServer());
entry.setField("title", "Pro WF: Windows Workflow in NET 3.5");
Assert.assertEquals(Optional.empty(), finder.findFullText(entry));
}
@Test
public void findSingleEntry() throws FetcherException {
// CI server is blocked by Google
Assume.assumeFalse(DevEnvironment.isCIServer());
entry.setType(BibtexEntryTypes.INPROCEEDINGS.getName());
entry.setCiteKey("geiger2013detecting");
entry.setField(FieldName.TITLE, "Detecting Interoperability and Correctness Issues in BPMN 2.0 Process Models.");
entry.setField(FieldName.AUTHOR, "Geiger, Matthias and Wirtz, Guido");
entry.setField(FieldName.BOOKTITLE, "ZEUS");
entry.setField(FieldName.YEAR, "2013");
entry.setField(FieldName.PAGES, "41--44");
List<BibEntry> foundEntries = finder.performSearch("info:RExzBa3OlkQJ:scholar.google.com");
Assert.assertEquals(Collections.singletonList(entry), foundEntries);
}
@Test
public void find20Entries() throws FetcherException {
// CI server is blocked by Google
Assume.assumeFalse(DevEnvironment.isCIServer());
List<BibEntry> foundEntries = finder.performSearch("random test string");
Assert.assertEquals(20, foundEntries.size());
}
}