/**
* =============================================================================
*
* 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.impl;
import static org.mockito.Matchers.argThat;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.orcid.core.manager.SalesForceManager;
import org.orcid.core.manager.SourceManager;
import org.orcid.core.salesforce.dao.SalesForceDao;
import org.orcid.core.salesforce.model.Contact;
import org.orcid.core.salesforce.model.ContactRole;
import org.orcid.core.salesforce.model.ContactRoleType;
import org.orcid.persistence.dao.SalesForceConnectionDao;
import org.orcid.persistence.jpa.entities.SalesForceConnectionEntity;
import org.orcid.test.TargetProxyHelper;
import net.sf.ehcache.constructs.blocking.SelfPopulatingCache;
/**
*
* @author Will Simpson
*
*/
public class SalesForceManagerImplTest {
private static final String TEST_ORCID = "4444-4444-4444-4441";
private SalesForceManager salesForceManager = new SalesForceManagerImpl();
@Mock
private SalesForceDao salesForceDao;
@Mock
private SourceManager sourceManager;
@Mock
private SalesForceConnectionDao salesForceConnectionDao;
@Mock
private SelfPopulatingCache salesForceMembersListCache;
@Mock
private SelfPopulatingCache salesForceMemberDetailsCache;
@Mock
private SelfPopulatingCache salesForceConsortiaListCache;
@Mock
private SelfPopulatingCache salesForceConsortiumCache;
@Mock
private SelfPopulatingCache salesForceContactsCache;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
TargetProxyHelper.injectIntoProxy(salesForceManager, "salesForceDao", salesForceDao);
TargetProxyHelper.injectIntoProxy(salesForceManager, "sourceManager", sourceManager);
TargetProxyHelper.injectIntoProxy(salesForceManager, "salesForceConnectionDao", salesForceConnectionDao);
TargetProxyHelper.injectIntoProxy(salesForceManager, "salesForceMembersListCache", salesForceMembersListCache);
TargetProxyHelper.injectIntoProxy(salesForceManager, "salesForceMemberDetailsCache", salesForceMemberDetailsCache);
TargetProxyHelper.injectIntoProxy(salesForceManager, "salesForceConsortiaListCache", salesForceConsortiaListCache);
TargetProxyHelper.injectIntoProxy(salesForceManager, "salesForceConsortiumCache", salesForceConsortiumCache);
TargetProxyHelper.injectIntoProxy(salesForceManager, "salesForceContactsCache", salesForceContactsCache);
setUpUser();
setUpContact1();
setUpContact2();
}
private void setUpUser() {
when(sourceManager.retrieveRealUserOrcid()).thenReturn(TEST_ORCID);
SalesForceConnectionEntity connection = new SalesForceConnectionEntity();
connection.setSalesForceAccountId("account1Id");
when(salesForceConnectionDao.findByOrcid(TEST_ORCID)).thenReturn(connection);
}
private void setUpContact1() {
List<ContactRole> contact1Roles = new ArrayList<>();
when(salesForceDao.retrieveContactRolesByContactIdAndAccountId("contact1Id", "account1Id")).thenReturn(contact1Roles);
}
private void setUpContact2() {
List<ContactRole> contact1Roles = new ArrayList<>();
contact1Roles.add(createContactRole("contact2Idrole1Id", ContactRoleType.MAIN_CONTACT));
when(salesForceDao.retrieveContactRolesByContactIdAndAccountId("contact2Id", "account1Id")).thenReturn(contact1Roles);
}
private ContactRole createContactRole(String roleId, ContactRoleType roleType) {
ContactRole contactRole = new ContactRole();
contactRole.setId(roleId);
contactRole.setRoleType(roleType);
return contactRole;
}
@Test
public void testUpdateContact2() {
// Switch from main to technical contact
Contact contact = new Contact();
contact.setId("contact2Id");
contact.setAccountId("account1");
ContactRole role = new ContactRole(ContactRoleType.TECHNICAL_CONTACT);
role.setId("contact2Idrole1Id");
contact.setRole(role);
salesForceManager.updateContact(contact);
verify(salesForceDao, times(1)).createContactRole(argThat(r -> {
return "contact2Id".equals(r.getContactId()) && "account1Id".equals(r.getAccountId()) && ContactRoleType.TECHNICAL_CONTACT.equals(r.getRoleType());
}));
verify(salesForceDao, times(1)).removeContactRole(eq("contact2Idrole1Id"));
}
}