/** * ============================================================================= * * 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.frontend.web.controllers; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.annotation.Resource; import javax.persistence.NoResultException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.orcid.core.manager.OrcidProfileManager; import org.orcid.core.oauth.OrcidProfileUserDetails; import org.orcid.core.security.OrcidWebRole; import org.orcid.frontend.web.util.BaseControllerTest; import org.orcid.jaxb.model.common_v2.Visibility; import org.orcid.jaxb.model.record_v2.Relationship; import org.orcid.pojo.ajaxForm.Date; import org.orcid.pojo.ajaxForm.PeerReviewForm; import org.orcid.pojo.ajaxForm.PojoUtil; import org.orcid.pojo.ajaxForm.Text; import org.orcid.pojo.ajaxForm.TranslatedTitleForm; import org.orcid.pojo.ajaxForm.WorkExternalIdentifier; import org.orcid.test.OrcidJUnit4ClassRunner; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.web.WebAppConfiguration; import com.google.common.collect.Lists; @RunWith(OrcidJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = { "classpath:orcid-core-context.xml", "classpath:orcid-frontend-web-servlet.xml", "classpath:statistics-core-context.xml" }) public class PeerReviewsControllerTest extends BaseControllerTest { private static final List<String> DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SecurityQuestionEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/OrgsEntityData.xml", "/data/OrgAffiliationEntityData.xml", "/data/PeerReviewEntityData.xml", "/data/GroupIdRecordEntityData.xml", "/data/RecordNameEntityData.xml"); @Resource protected OrcidProfileManager orcidProfileManager; @Resource protected PeerReviewsController peerReviewsController; @Mock private HttpServletRequest servletRequest; @Override protected Authentication getAuthentication() { orcidProfile = orcidProfileManager.retrieveOrcidProfile("4444-4444-4444-4446"); OrcidProfileUserDetails details = null; if (orcidProfile.getType() != null) { details = new OrcidProfileUserDetails(orcidProfile.getOrcidIdentifier().getPath(), orcidProfile.getOrcidBio().getContactDetails().getEmail().get(0) .getValue(), orcidProfile.getOrcidInternal().getSecurityDetails().getEncryptedPassword().getContent(), orcidProfile.getType(), orcidProfile.getGroupType()); } else { details = new OrcidProfileUserDetails(orcidProfile.getOrcidIdentifier().getPath(), orcidProfile.getOrcidBio().getContactDetails().getEmail().get(0) .getValue(), orcidProfile.getOrcidInternal().getSecurityDetails().getEncryptedPassword().getContent()); } UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(details, "4444-4444-4444-4446", Arrays.asList(OrcidWebRole.ROLE_USER)); return auth; } @Before public void init() { orcidProfileManager.updateLastModifiedDate("4444-4444-4444-4446"); } @BeforeClass public static void beforeClass() throws Exception { initDBUnitData(DATA_FILES); } @AfterClass public static void afterClass() throws Exception { removeDBUnitData(Lists.reverse(DATA_FILES)); } @Test public void testGetPeerReview() { HttpSession session = mock(HttpSession.class); when(servletRequest.getSession()).thenReturn(session); List<String> ids = peerReviewsController.getPeerReviewIdsJson(servletRequest); List<String> existingIds = new ArrayList<String>(); existingIds.add("1"); existingIds.add("3"); existingIds.add("4"); existingIds.add("5"); assertNotNull(ids); assertTrue(ids.containsAll(existingIds)); } @Test public void testAddPeerReview() { PeerReviewForm form = getForm(); try { PeerReviewForm newForm = peerReviewsController.postPeerReview(form); assertNotNull(newForm); assertFalse(PojoUtil.isEmpty(newForm.getPutCode())); String putCode = newForm.getPutCode().getValue(); newForm = peerReviewsController.getPeerReviewJson(Long.valueOf(putCode)); assertEquals(form.getCity(), newForm.getCity()); assertEquals(form.getRegion(), newForm.getRegion()); assertEquals(form.getCountry(), newForm.getCountry()); assertEquals(form.getOrgName(), newForm.getOrgName()); assertEquals(form.getCompletionDate(), newForm.getCompletionDate()); assertEquals(form.getExternalIdentifiers(), newForm.getExternalIdentifiers()); assertEquals(form.getRole(), newForm.getRole()); assertEquals(form.getType(), newForm.getType()); assertEquals(form.getUrl(), newForm.getUrl()); assertEquals(form.getVisibility(), newForm.getVisibility()); assertEquals(form.getGroupId(), newForm.getGroupId()); assertEquals(form.getSubjectContainerName(), newForm.getSubjectContainerName()); assertEquals(form.getSubjectExternalIdentifier(), newForm.getSubjectExternalIdentifier()); assertEquals(form.getSubjectName(), newForm.getSubjectName()); assertEquals(form.getSubjectType(), newForm.getSubjectType()); assertEquals(form.getSubjectUrl(), newForm.getSubjectUrl()); } catch (NullPointerException npe) { fail(); } } @Test public void testValidatePeerReviewFields() { PeerReviewForm form = peerReviewsController.getEmptyPeerReview(); form.getGroupId().setValue("bad-group-id"); form = peerReviewsController.postPeerReview(form); assertNotNull(form); assertNotNull(form.getErrors()); assertEquals(6, form.getErrors().size()); assertTrue(form.getErrors().contains(peerReviewsController.getMessage("org.name.not_blank"))); assertTrue(form.getErrors().contains(peerReviewsController.getMessage("org.city.not_blank"))); assertTrue(form.getErrors().contains(peerReviewsController.getMessage("common.country.not_blank"))); assertTrue(form.getErrors().contains(peerReviewsController.getMessage("peer_review.subject.work_type.not_blank"))); assertTrue(form.getErrors().contains(peerReviewsController.getMessage("common.title.not_blank"))); assertTrue(form.getErrors().contains(peerReviewsController.getMessage("peer_review.group_id.not_valid"))); } @Test public void testAddWithInvalidGroupId() { PeerReviewForm form = getForm(); form.getGroupId().setValue("bad-group-id"); PeerReviewForm newForm = peerReviewsController.postPeerReview(form); assertNotNull(newForm); assertTrue(PojoUtil.isEmpty(newForm.getPutCode())); assertTrue(form.getErrors().contains(peerReviewsController.getMessage("peer_review.group_id.not_valid"))); } @Test public void testDeletePeerReview() { HttpSession session = mock(HttpSession.class); when(servletRequest.getSession()).thenReturn(session); PeerReviewForm form = getForm(); PeerReviewForm newForm = peerReviewsController.postPeerReview(form); assertNotNull(newForm); assertFalse(PojoUtil.isEmpty(newForm.getPutCode())); String putCode = newForm.getPutCode().getValue(); peerReviewsController.deletePeerReviewJson(newForm); try { peerReviewsController.getPeerReviewJson(Long.valueOf(putCode)); fail(); } catch(NoResultException nre) { } } private PeerReviewForm getForm() { PeerReviewForm form = new PeerReviewForm(); form.setCity(Text.valueOf("The City")); form.setCountry(Text.valueOf("CR")); form.setOrgName(Text.valueOf("OrgName")); form.setRegion(Text.valueOf("The Region")); form.setRole(Text.valueOf("reviewer")); form.setType(Text.valueOf("evaluation")); form.setUrl(Text.valueOf("http://orcid.org")); form.setVisibility(Visibility.LIMITED); Date completionDate = new Date(); completionDate.setDay("01"); completionDate.setMonth("01"); completionDate.setYear("2015"); form.setCompletionDate(completionDate); WorkExternalIdentifier wei = new WorkExternalIdentifier(); wei.setWorkExternalIdentifierId(Text.valueOf("extId1")); wei.setWorkExternalIdentifierType(Text.valueOf("bibcode")); wei.setRelationship(Text.valueOf(Relationship.SELF.value())); wei.setUrl(Text.valueOf("http://myurl.com")); List<WorkExternalIdentifier> extIds = new ArrayList<WorkExternalIdentifier>(); extIds.add(wei); form.setExternalIdentifiers(extIds); form.setSubjectContainerName(Text.valueOf("Journal Title")); form.setSubjectName(Text.valueOf("Title")); TranslatedTitleForm translated = new TranslatedTitleForm(); translated.setContent("Translated title"); translated.setLanguageCode("es"); form.setTranslatedSubjectName(translated); form.setSubjectUrl(Text.valueOf("http://subject.com")); form.setSubjectExternalIdentifier(wei); form.setSubjectType(Text.valueOf("book-review")); form.setGroupId(Text.valueOf("issn:0000001")); return form; } }