/** * ============================================================================= * * 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.persistence.dao; import static org.hamcrest.core.AnyOf.anyOf; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.Arrays; import java.util.Date; import java.util.List; import javax.annotation.Resource; import javax.persistence.NoResultException; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.orcid.jaxb.model.common_v2.Visibility; import org.orcid.persistence.jpa.entities.ExternalIdentifierEntity; import org.orcid.test.DBUnitTest; import org.orcid.test.OrcidJUnit4ClassRunner; import org.springframework.test.context.ContextConfiguration; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:orcid-persistence-context.xml" }) public class ExternalIdentifierDaoTest extends DBUnitTest { @Resource private ExternalIdentifierDao externalIdentifierDao; @Resource private ProfileDao profileDao; @BeforeClass public static void initDBUnitData() throws Exception { initDBUnitData(Arrays.asList("/data/SecurityQuestionEntityData.xml", "/data/SubjectEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml")); } @AfterClass public static void removeDBUnitData() throws Exception { removeDBUnitData(Arrays.asList("/data/ProfileEntityData.xml", "/data/SubjectEntityData.xml", "/data/SecurityQuestionEntityData.xml")); } @Before public void beforeRunning() { assertNotNull(externalIdentifierDao); } @Test public void testRemoveExternalIdentifier() { Date now = new Date(); Date justBeforeStart = new Date(now.getTime() - 1000); assertFalse(externalIdentifierDao.removeExternalIdentifier("4444-4444-4444-4441", "d3clan")); assertFalse(externalIdentifierDao.removeExternalIdentifier("4444-4444-4444-4443", "d3clan1")); assertTrue("Profile last modified should be updated", justBeforeStart.before(profileDao.retrieveLastModifiedDate("4444-4444-4444-4443"))); assertTrue(externalIdentifierDao.removeExternalIdentifier("4444-4444-4444-4443", "d3clan")); } @SuppressWarnings("unchecked") @Test public void testGetExternalIdentifiers() { List<ExternalIdentifierEntity> extIds = externalIdentifierDao.getExternalIdentifiers("4444-4444-4444-4442", 0L); assertNotNull(extIds); assertEquals(4, extIds.size()); for(ExternalIdentifierEntity extId : extIds) { assertThat(extId.getId(), anyOf(is(2L), is(3L), is(4L), is(5L))); assertEquals("Facebook", extId.getExternalIdCommonName()); assertNotNull(extId.getElementSourceId()); if(extId.getId() == 2L) { assertEquals("http://www.facebook.com/abc123", extId.getExternalIdUrl()); assertEquals("abc123", extId.getExternalIdReference()); assertEquals("APP-5555555555555555", extId.getElementSourceId()); } else if(extId.getId() == 3L) { assertEquals("http://www.facebook.com/abc456", extId.getExternalIdUrl()); assertEquals("abc456", extId.getExternalIdReference()); assertEquals("4444-4444-4444-4442", extId.getElementSourceId()); } else if(extId.getId() == 4L) { assertEquals("http://www.facebook.com/abc789", extId.getExternalIdUrl()); assertEquals("abc789", extId.getExternalIdReference()); assertEquals("4444-4444-4444-4441", extId.getElementSourceId()); } else { assertEquals(Long.valueOf(5), extId.getId()); assertEquals("http://www.facebook.com/abc012", extId.getExternalIdUrl()); assertEquals("abc012", extId.getExternalIdReference()); assertEquals("APP-5555555555555555", extId.getElementSourceId()); } } } @Test public void testGetExternalIdentifiersUsingVisibility() { List<ExternalIdentifierEntity> extIds = externalIdentifierDao.getExternalIdentifiers("4444-4444-4444-4442", Visibility.LIMITED); assertNotNull(extIds); assertEquals(1, extIds.size()); assertEquals(Long.valueOf(3), extIds.get(0).getId()); extIds = externalIdentifierDao.getExternalIdentifiers("4444-4444-4444-4442", Visibility.PUBLIC); assertNotNull(extIds); assertEquals(1, extIds.size()); assertEquals(Long.valueOf(2), extIds.get(0).getId()); } @Test public void testGetExternalIdentifier() { ExternalIdentifierEntity extId = externalIdentifierDao.getExternalIdentifierEntity("4444-4444-4444-4442", 3L); assertNotNull(extId); assertNotNull(extId.getDateCreated()); assertNotNull(extId.getLastModified()); assertEquals("Facebook", extId.getExternalIdCommonName()); assertEquals("abc456", extId.getExternalIdReference()); assertEquals("http://www.facebook.com/abc456", extId.getExternalIdUrl()); assertEquals(Long.valueOf(3), extId.getId()); assertEquals(Visibility.LIMITED, extId.getVisibility()); assertNotNull(extId.getElementSourceId()); assertEquals("4444-4444-4444-4442", extId.getElementSourceId()); } @Test public void testGetExternalIdentifierThatDontBelongToThatUser() { try { externalIdentifierDao.getExternalIdentifierEntity("4444-4444-4444-4441", 3L); fail(); } catch(NoResultException nre) { } try { externalIdentifierDao.getExternalIdentifierEntity("4444-4444-4444-4400", 3L); fail(); } catch(NoResultException nre) { } } }