/**
* =============================================================================
*
* 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.internal.server;
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 java.util.Arrays;
import java.util.List;
import javax.annotation.Resource;
import javax.ws.rs.core.Response;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.orcid.core.manager.OrcidProfileManager;
import org.orcid.core.utils.SecurityContextTestUtils;
import org.orcid.internal.server.delegator.InternalApiServiceDelegator;
import org.orcid.internal.util.LastModifiedResponse;
import org.orcid.internal.util.MemberInfo;
import org.orcid.jaxb.model.error_v2.OrcidError;
import org.orcid.jaxb.model.message.ScopePathType;
import org.orcid.test.DBUnitTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:orcid-internal-api-context.xml", "classpath:orcid-internal-api-security-context.xml" })
public class InternalApiServiceDelegatorTest extends DBUnitTest {
private static final List<String> DATA_FILES = Arrays.asList("/data/EmptyEntityData.xml", "/data/SecurityQuestionEntityData.xml",
"/data/SourceClientDetailsEntityData.xml");
private static final String USER_ORCID = "5555-5555-5555-5558";
@Resource
private InternalApiServiceDelegator internalApiServiceDelegator;
@Resource
OrcidProfileManager orcidProfileManager;
@Before
public void before() throws Exception {
initDBUnitData(DATA_FILES);
SecurityContextTestUtils.setUpSecurityContextForClientOnly("APP-5555555555555555", ScopePathType.INTERNAL_PERSON_LAST_MODIFIED);
}
@Test
public void viewStatusText() {
Response response = internalApiServiceDelegator.viewStatusText();
assertNotNull(response);
assertNotNull(response.getEntity());
assertEquals("OK I am here", String.valueOf(response.getEntity()));
}
@Test
public void viewLastModified() {
Response response = internalApiServiceDelegator.viewPersonLastModified(USER_ORCID);
assertNotNull(response);
assertNotNull(response.getEntity());
assertTrue(response.getEntity().getClass().isAssignableFrom(LastModifiedResponse.class));
LastModifiedResponse obj = (LastModifiedResponse) response.getEntity();
assertNotNull(obj);
assertEquals(USER_ORCID, obj.getOrcid());
assertEquals(orcidProfileManager.retrieveLastModifiedDate(USER_ORCID).toString(), obj.getLastModified());
}
@Test
public void viewMemberInfo() {
String memberId = "5555-5555-5555-5558";
Response response = internalApiServiceDelegator.viewMemberInfo(memberId);
assertNotNull(response);
MemberInfo info = (MemberInfo) response.getEntity();
assertNotNull(info);
assertEquals(memberId, info.getId());
assertNotNull(info.getName());
assertNotNull(info.getClients());
assertFalse(info.getClients().isEmpty());
response = internalApiServiceDelegator.viewMemberInfo(info.getName());
assertNotNull(response);
MemberInfo infoByName = (MemberInfo) response.getEntity();
assertNotNull(infoByName);
assertEquals(memberId, infoByName.getId());
assertEquals(info, infoByName);
response = internalApiServiceDelegator.viewMemberInfo("invalid name");
assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
OrcidError error = (OrcidError)response.getEntity();
assertNotNull(error);
assertEquals(new Integer(0), error.getErrorCode());
assertEquals("Member id or name not found for: invalid name", error.getDeveloperMessage());
}
}