/** * ============================================================================= * * 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.manager; 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 java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.orcid.core.BaseTest; import org.orcid.jaxb.model.record_v2.Email; import org.orcid.jaxb.model.record_v2.Emails; import org.orcid.persistence.dao.ProfileDao; import org.orcid.persistence.jpa.entities.ProfileEntity; public class EmailManagerTest extends BaseTest { private static final List<String> DATA_FILES = Arrays.asList("/data/SecurityQuestionEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml", "/data/RecordNameEntityData.xml"); @Resource private EmailManager emailManager; @Resource private ProfileDao profileDao; @BeforeClass public static void initDBUnitData() throws Exception { initDBUnitData(DATA_FILES); } @AfterClass public static void removeDBUnitData() throws Exception { List<String> reversedDataFiles = new ArrayList<String>(DATA_FILES); Collections.reverse(reversedDataFiles); removeDBUnitData(reversedDataFiles); } @Test public void emailExistsTest() { assertTrue(emailManager.emailExists("spike@milligan.com")); assertTrue(emailManager.emailExists("1@deprecate.com")); assertTrue(emailManager.emailExists("4444-4444-4444-4498@milligan.com")); assertTrue(emailManager.emailExists("MiXeD@cASe.com")); assertTrue(emailManager.emailExists("public_0000-0000-0000-0001@test.orcid.org")); assertTrue(emailManager.emailExists("test@test.com")); assertFalse(emailManager.emailExists("0000-0000-0000-0001@test.orcid.org")); assertFalse(emailManager.emailExists("public_0000-0000-0000-0001@test.orcid")); } @Test public void isPrimaryEmailVerifiedTest() { assertFalse(emailManager.isPrimaryEmailVerified("4444-4444-4444-4445")); assertFalse(emailManager.isPrimaryEmailVerified("0000-0000-0000-0001")); assertTrue(emailManager.isPrimaryEmailVerified("0000-0000-0000-0003")); assertTrue(emailManager.isPrimaryEmailVerified("4444-4444-4444-4499")); } @Test public void haveAnyEmailVerifiedTest() { assertTrue(emailManager.haveAnyEmailVerified("0000-0000-0000-0003")); assertTrue(emailManager.haveAnyEmailVerified("4444-4444-4444-4442")); assertFalse(emailManager.haveAnyEmailVerified("0000-0000-0000-0001")); assertFalse(emailManager.haveAnyEmailVerified("4444-4444-4444-4445")); } @Test public void getEmailsTest() { Emails emails = emailManager.getEmails("0000-0000-0000-0003", System.currentTimeMillis()); assertNotNull(emails); assertNotNull(emails.getEmails()); assertEquals(5, emails.getEmails().size()); boolean found1 = false, found2 = false, found3 = false, found4=false, found5 = false; for(Email email : emails.getEmails()) { if(email.getEmail().equals("public_0000-0000-0000-0003@test.orcid.org")) { found1 = true; } else if(email.getEmail().equals("limited_0000-0000-0000-0003@test.orcid.org")) { found2 = true; } else if(email.getEmail().equals("private_0000-0000-0000-0003@test.orcid.org")) { found3 = true; } else if(email.getEmail().equals("self_limited_0000-0000-0000-0003@test.orcid.org")) { found4 = true; } else if(email.getEmail().equals("self_private_0000-0000-0000-0003@test.orcid.org")) { found5 = true; } else { fail("Invalid email found: " + email.getEmail()); } } assertTrue(found1); assertTrue(found2); assertTrue(found3); assertTrue(found4); assertTrue(found5); } @Test public void getPublicEmailsTest() { Emails emails = emailManager.getPublicEmails("0000-0000-0000-0003", System.currentTimeMillis()); assertNotNull(emails); assertNotNull(emails.getEmails()); assertEquals(1, emails.getEmails().size()); assertEquals("public_0000-0000-0000-0003@test.orcid.org", emails.getEmails().get(0).getEmail()); } @Test public void removeEmailTest() { assertTrue(emailManager.emailExists("teddybass3public@semantico.com")); emailManager.removeEmail("4444-4444-4444-4443", "teddybass3public@semantico.com"); assertFalse(emailManager.emailExists("teddybass3public@semantico.com")); } @Test public void removeEmailIfPrimaryTest() { assertTrue(emailManager.emailExists("billie@holiday.com")); emailManager.removeEmail("4444-4444-4444-4446", "billie@holiday.com", false); //Should not be removed yet assertTrue(emailManager.emailExists("billie@holiday.com")); emailManager.removeEmail("4444-4444-4444-4446", "billie@holiday.com", true); //Now it should be gone assertFalse(emailManager.emailExists("billie@holiday.com")); } @Test public void moveEmailToOtherAccountTest() { String email = "public@email.com"; String from = "4444-4444-4444-4441"; String to = "4444-4444-4444-4499"; ProfileEntity destinationBefore = profileDao.find(to); Date beforeLastModified = destinationBefore.getLastModified(); Map<String, String> map = emailManager.findOricdIdsByCommaSeparatedEmails(email); assertNotNull(map); assertEquals(from, map.get(email)); emailManager.moveEmailToOtherAccount(email, from, to); ProfileEntity destinationAfter = profileDao.find(to); Date afterLastModified = destinationAfter.getLastModified(); assertFalse(beforeLastModified.equals(afterLastModified)); assertTrue(afterLastModified.getTime() > beforeLastModified.getTime()); //Assert the email was moved map = emailManager.findOricdIdsByCommaSeparatedEmails(email); assertNotNull(map); assertEquals(to, map.get(email)); //Assert the email is not anymore in the from record Emails emails = emailManager.getEmails(from, System.currentTimeMillis()); for(Email e : emails.getEmails()) { assertFalse(email.equals(e.getEmail())); } //Assert the email belongs to the to record emails = emailManager.getEmails(to, System.currentTimeMillis()); boolean found = false; for(Email e : emails.getEmails()) { if(email.equals(e.getEmail())) { found = true; } } assertTrue(found); } @Test public void verifySetCurrentAndPrimaryTest() { String email = "public_0000-0000-0000-0004@test.orcid.org"; String orcid = "0000-0000-0000-0004"; Emails emails = emailManager.getEmails(orcid, System.currentTimeMillis()); Email element = null; for(Email e : emails.getEmails()) { if(email.equals(e.getEmail())) { element = e; break; } } assertNotNull(element); assertFalse(element.isCurrent()); assertFalse(element.isPrimary()); assertFalse(element.isVerified()); emailManager.verifySetCurrentAndPrimary(orcid, email); emails = emailManager.getEmails(orcid, System.currentTimeMillis()); element = null; for(Email e : emails.getEmails()) { if(email.equals(e.getEmail())) { element = e; break; } } assertNotNull(element); assertTrue(element.isCurrent()); assertTrue(element.isPrimary()); assertTrue(element.isVerified()); } @Test public void verifyPrimaryEmailTest() { assertFalse(emailManager.isPrimaryEmailVerified("0000-0000-0000-0004")); emailManager.verifyPrimaryEmail("0000-0000-0000-0004"); assertTrue(emailManager.isPrimaryEmailVerified("0000-0000-0000-0004")); } }