package org.nextprot.api.core.service;
import com.nextprot.api.annotation.builder.statement.dao.StatementDao;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.nextprot.api.commons.dao.MasterIdentifierDao;
import org.nextprot.api.core.dao.AuthorDao;
import org.nextprot.api.core.dao.DbXrefDao;
import org.nextprot.api.core.dao.PublicationDao;
import org.nextprot.api.core.domain.Publication;
import org.nextprot.api.core.domain.PublicationAuthor;
import org.nextprot.api.core.service.impl.PublicationServiceImpl;
import java.util.Arrays;
import java.util.List;
import java.util.SortedSet;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.mockito.Mockito.*;
//@DatabaseSetup(value = "PublicationServiceTest.xml", type = DatabaseOperation.INSERT)
public class PublicationServiceTest {
@InjectMocks
private PublicationService publicationService = new PublicationServiceImpl();
@Mock
private MasterIdentifierDao masterIdentifierDao;
@Mock
private PublicationDao publicationDao;
@Mock
private AuthorDao authorDao;
@Mock
private DbXrefDao dbXrefDao;
@Mock
private StatementDao statementDao;
@Mock
private DbXrefService dbXrefService;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void verifyFindPublicationById() {
Publication publication = mock(Publication.class);
when(publication.getPublicationId()).thenReturn(1L);
when(publicationDao.findPublicationById(100L)).thenReturn(publication);
publicationService.findPublicationById(100L);
verify(publicationDao).findPublicationById(100L);
verify(authorDao).findAuthorsByPublicationId(1L);
verify(dbXrefDao).findDbXRefsByPublicationId(1L);
}
@Ignore
@Test
public void testFindPublicationById() {
Publication publication = this.publicationService.findPublicationById(100L);
assertEquals(100L, publication.getPublicationId());
assertEquals("an interesting paper", publication.getTitle());
}
@Test
public void verifyFindPublicationsByMasterId() {
Publication publication = mock(Publication.class);
when(publication.getPublicationId()).thenReturn(1L);
Publication publication2 = mock(Publication.class);
when(publication.getPublicationId()).thenReturn(2L);
when(publicationDao.findSortedPublicationsByMasterId(100L)).thenReturn(Arrays.asList(publication, publication2));
publicationService.findPublicationsByMasterId(100L);
verify(publicationDao).findSortedPublicationsByMasterId(100L);
verify(authorDao, times(2)).findAuthorsByPublicationId(anyLong());
verify(dbXrefDao, times(2)).findDbXRefsByPublicationId(anyLong());
}
@Ignore
@Test
public void testFindPublicationByMasterId() {
List<Publication> publications = this.publicationService.findPublicationsByMasterId(100L);
assertEquals(2, publications.size());
publications = this.publicationService.findPublicationsByMasterId(99L);
assertEquals(0, publications.size());
}
@Test
public void verifyFindPublicationsByMasterUniqueName() {
Publication publication = mock(Publication.class);
when(publication.getPublicationId()).thenReturn(1L);
when(masterIdentifierDao.findIdByUniqueName("NX_P12345")).thenReturn(100L);
when(publicationDao.findSortedPublicationsByMasterId(100L)).thenReturn(Arrays.asList(publication));
publicationService.findPublicationsByMasterUniqueName("NX_P12345");
verify(masterIdentifierDao).findIdByUniqueName("NX_P12345");
verify(publicationDao).findSortedPublicationsByMasterId(100L);
verify(dbXrefService).findDbXRefByPublicationIds(Arrays.asList(1L));
verify(authorDao).findAuthorsByPublicationIds(Arrays.asList(1L));
}
@Ignore
@Test
public void testFindPublicationsByMasterUniqueName() {
List<Publication> publications = this.publicationService.findPublicationsByMasterUniqueName("NX_P12345");
assertEquals(2, publications.size());
// Authors
assertEquals("an interesting paper", publications.get(0).getTitle());
SortedSet<PublicationAuthor> authors = publications.get(0).getAuthors();
assertEquals("Luke", authors.first().getLastName());
assertEquals("Kent", authors.last().getLastName());
assertNotEquals("Lightyear", authors.first().getLastName());
assertEquals("an AWESOME paper", publications.get(1).getTitle());
assertEquals(1, publications.get(1).getAuthors().size());
assertEquals("Lightyear", publications.get(1).getAuthors().first().getLastName());
// Xrefs
assertEquals(1, publications.get(0).getDbXrefs().size());
assertEquals(2, publications.get(1).getDbXrefs().size());
// Journals
assertEquals("Pretty Revue of Science", publications.get(0).getJournalResourceLocator().getName());
assertEquals("Revue of Science", publications.get(1).getJournalResourceLocator().getName());
}
}