/**
* =============================================================================
*
* ORCID (R) Open Source
* http://orcid.org
*
* Copyright (c) 2012-2014 ORCID, Inc.
* Licensed under an MIT-Style License (MIT)
* http://orcid.org/open-source-license
*
* This copyright and license information (including a link to the full license)
* shall be included in its entirety in all copies or substantial portion of
* the software.
*
* =============================================================================
*/
package org.orcid.core.adapter.v2.latest;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.InputStream;
import javax.annotation.Resource;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.orcid.core.adapter.JpaJaxbPeerReviewAdapter;
import org.orcid.core.adapter.MockSourceNameCache;
import org.orcid.jaxb.model.common_v2.Iso3166Country;
import org.orcid.jaxb.model.common_v2.Visibility;
import org.orcid.jaxb.model.record_v2.WorkType;
import org.orcid.jaxb.model.record.summary_v2.PeerReviewSummary;
import org.orcid.jaxb.model.record_v2.PeerReview;
import org.orcid.jaxb.model.record_v2.PeerReviewType;
import org.orcid.jaxb.model.record_v2.Role;
import org.orcid.persistence.jpa.entities.CompletionDateEntity;
import org.orcid.persistence.jpa.entities.OrgEntity;
import org.orcid.persistence.jpa.entities.PeerReviewEntity;
import org.orcid.persistence.jpa.entities.ProfileEntity;
import org.orcid.persistence.jpa.entities.SourceEntity;
import org.orcid.test.OrcidJUnit4ClassRunner;
import org.springframework.test.context.ContextConfiguration;
/**
*
* @author Angel Montenegro
*
*/
@RunWith(OrcidJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:orcid-core-context.xml" })
public class JpaJaxbPeerReviewAdapterTest extends MockSourceNameCache {
@Resource
private JpaJaxbPeerReviewAdapter jpaJaxbPeerReviewAdapter;
@Test
public void testToOrgAffiliationRelationEntity() throws JAXBException {
PeerReview e = getPeerReview(true);
assertNotNull(e);
PeerReviewEntity pe = jpaJaxbPeerReviewAdapter.toPeerReviewEntity(e);
assertNotNull(pe);
//General info
assertEquals(Long.valueOf(12345), pe.getId());
assertEquals(Visibility.PRIVATE.value(), pe.getVisibility().value());
assertEquals("{\"workExternalIdentifier\":[{\"relationship\":\"SELF\",\"url\":{\"value\":\"http://orcid.org\"},\"workExternalIdentifierType\":\"SOURCE_WORK_ID\",\"workExternalIdentifierId\":{\"content\":\"work:external-identifier-id\"}}]}", pe.getExternalIdentifiersJson());
assertEquals("reviewer", pe.getRole().value());
assertEquals("review", pe.getType().value());
assertEquals("peer-review:url", pe.getUrl());
//Dates
assertEquals(Integer.valueOf(2), pe.getCompletionDate().getDay());
assertEquals(Integer.valueOf(2), pe.getCompletionDate().getMonth());
assertEquals(Integer.valueOf(1848), pe.getCompletionDate().getYear());
//Source
assertEquals("8888-8888-8888-8880", pe.getElementSourceId());
//Check org values
assertEquals("common:name", pe.getOrg().getName());
assertEquals("common:city", pe.getOrg().getCity());
assertEquals("common:region", pe.getOrg().getRegion());
assertEquals(Iso3166Country.AF.value(), pe.getOrg().getCountry().value());
assertEquals("common:disambiguated-organization-identifier", pe.getOrg().getOrgDisambiguated().getSourceId());
assertEquals("common:disambiguation-source", pe.getOrg().getOrgDisambiguated().getSourceType());
//Check subject
assertEquals("{\"relationship\":\"SELF\",\"url\":{\"value\":\"http://orcid.org\"},\"workExternalIdentifierType\":\"DOI\",\"workExternalIdentifierId\":{\"content\":\"peer-review:subject-external-identifier-id\"}}", pe.getSubjectExternalIdentifiersJson());
assertEquals("peer-review:subject-container-name", pe.getSubjectContainerName());
assertEquals("peer-review:subject-name", pe.getSubjectName());
assertEquals("peer-review:subject-translated-name", pe.getSubjectTranslatedName());
assertEquals("en", pe.getSubjectTranslatedNameLanguageCode());
assertEquals("peer-review:subject-url", pe.getSubjectUrl());
assertEquals(WorkType.JOURNAL_ARTICLE, pe.getSubjectType());
//Check group id
assertEquals("orcid-generated:12345", pe.getGroupId());
}
@Test
public void fromOrgAffiliationRelationEntityToEducation() {
PeerReviewEntity entity = getPeerReviewEntity();
assertNotNull(entity);
PeerReview peerReview= jpaJaxbPeerReviewAdapter.toPeerReview(entity);
assertNotNull(peerReview);
assertEquals(Long.valueOf(12345), peerReview.getPutCode());
assertEquals("private", peerReview.getVisibility().value());
assertEquals("orcid-generated:12345", peerReview.getGroupId());
//Subject
assertNotNull(peerReview.getSubjectExternalIdentifier());
assertEquals("peer-review:subject-external-identifier-id", peerReview.getSubjectExternalIdentifier().getValue());
assertEquals("source-work-id", peerReview.getSubjectExternalIdentifier().getType());
assertEquals("peer-review:subject-container-name", peerReview.getSubjectContainerName().getContent());
assertEquals("peer-review:subject-name", peerReview.getSubjectName().getTitle().getContent());
assertEquals("peer-review:subject-translated-name", peerReview.getSubjectName().getTranslatedTitle().getContent());
assertEquals("en", peerReview.getSubjectName().getTranslatedTitle().getLanguageCode());
assertEquals(WorkType.BOOK_REVIEW.value(), peerReview.getSubjectType().value());
assertEquals("peer-review:subject-url", peerReview.getSubjectUrl().getValue());
//Fields
assertNotNull(peerReview.getExternalIdentifiers());
assertNotNull(peerReview.getExternalIdentifiers().getExternalIdentifier());
assertEquals(1, peerReview.getExternalIdentifiers().getExternalIdentifier().size());
assertEquals("peer-review:external-identifier-id", peerReview.getExternalIdentifiers().getExternalIdentifier().get(0).getValue());
assertEquals("source-work-id", peerReview.getExternalIdentifiers().getExternalIdentifier().get(0).getType());
assertEquals(Role.MEMBER.value(), peerReview.getRole().value());
assertEquals(PeerReviewType.EVALUATION.value(), peerReview.getType().value());
assertEquals("peer-review:url", peerReview.getUrl().getValue());
assertNotNull(peerReview.getCompletionDate());
assertEquals("2015", peerReview.getCompletionDate().getYear().getValue());
assertEquals("01", peerReview.getCompletionDate().getMonth().getValue());
assertEquals("01", peerReview.getCompletionDate().getDay().getValue());
assertNotNull(peerReview.getOrganization());
assertEquals("org:name", peerReview.getOrganization().getName());
assertNotNull(peerReview.getOrganization().getAddress());
assertEquals("org:city", peerReview.getOrganization().getAddress().getCity());
assertEquals("org:region", peerReview.getOrganization().getAddress().getRegion());
assertNotNull(peerReview.getSource());
assertEquals("APP-000000001", peerReview.getSource().retrieveSourcePath());
}
@Test
public void fromPeerReviewEntityToPeerReviewSummary() {
PeerReviewEntity entity = getPeerReviewEntity();
assertNotNull(entity);
PeerReviewSummary peerReviewSummary = jpaJaxbPeerReviewAdapter.toPeerReviewSummary(entity);
assertNotNull(peerReviewSummary);
assertEquals(Long.valueOf(12345), peerReviewSummary.getPutCode());
assertEquals("private", peerReviewSummary.getVisibility().value());
assertNotNull(peerReviewSummary.getCompletionDate());
assertEquals("2015", peerReviewSummary.getCompletionDate().getYear().getValue());
assertEquals("01", peerReviewSummary.getCompletionDate().getMonth().getValue());
assertEquals("01", peerReviewSummary.getCompletionDate().getDay().getValue());
assertNotNull(peerReviewSummary.getExternalIdentifiers());
assertNotNull(peerReviewSummary.getExternalIdentifiers().getExternalIdentifier());
assertEquals(1, peerReviewSummary.getExternalIdentifiers().getExternalIdentifier().size());
assertEquals("peer-review:external-identifier-id", peerReviewSummary.getExternalIdentifiers().getExternalIdentifier().get(0).getValue());
assertEquals("source-work-id", peerReviewSummary.getExternalIdentifiers().getExternalIdentifier().get(0).getType());
assertNotNull(peerReviewSummary.getSource());
assertEquals("APP-000000001", peerReviewSummary.getSource().retrieveSourcePath());
}
private PeerReview getPeerReview(boolean full) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(new Class[] { PeerReview.class });
Unmarshaller unmarshaller = context.createUnmarshaller();
String name = "/record_2.0/samples/read_samples/peer-review-2.0.xml";
if(full) {
name = "/record_2.0/samples/read_samples/peer-review-full-2.0.xml";
}
InputStream inputStream = getClass().getResourceAsStream(name);
return (PeerReview) unmarshaller.unmarshal(inputStream);
}
private PeerReviewEntity getPeerReviewEntity() {
OrgEntity orgEntity = new OrgEntity();
orgEntity.setCity("org:city");
orgEntity.setCountry(org.orcid.jaxb.model.message.Iso3166Country.US);
orgEntity.setName("org:name");
orgEntity.setRegion("org:region");
orgEntity.setUrl("org:url");
orgEntity.setSource(new SourceEntity("APP-000000001"));
PeerReviewEntity result = new PeerReviewEntity();
result.setOrg(orgEntity);
result.setCompletionDate(new CompletionDateEntity(2015, 1, 1));
result.setExternalIdentifiersJson("{\"workExternalIdentifier\":[{\"relationship\":\"SELF\",\"url\":{\"value\":\"http://orcid.org\"},\"workExternalIdentifierType\":\"SOURCE_WORK_ID\",\"workExternalIdentifierId\":{\"content\":\"peer-review:external-identifier-id\"}}]}");
result.setProfile(new ProfileEntity("0000-0001-0002-0003"));
result.setRole(Role.MEMBER);
result.setType(PeerReviewType.EVALUATION);
result.setUrl("peer-review:url");
result.setSubjectExternalIdentifiersJson("{\"relationship\":\"SELF\",\"url\":{\"value\":\"http://orcid.org\"},\"workExternalIdentifierType\":\"SOURCE_WORK_ID\",\"workExternalIdentifierId\":{\"content\":\"peer-review:subject-external-identifier-id\"}}");
result.setSubjectContainerName("peer-review:subject-container-name");
result.setSubjectName("peer-review:subject-name");
result.setSubjectTranslatedName("peer-review:subject-translated-name");
result.setSubjectTranslatedNameLanguageCode("en");
result.setSubjectUrl("peer-review:subject-url");
result.setSubjectType(WorkType.BOOK_REVIEW);
result.setVisibility(Visibility.PRIVATE);
result.setClientSourceId("APP-000000001");
result.setGroupId("orcid-generated:12345");
result.setId(12345L);
return result;
}
}