/** * ============================================================================= * * 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.integration.blackbox.api.v2.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.annotation.Resource; import javax.ws.rs.core.Response; import org.codehaus.jettison.json.JSONException; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.orcid.core.utils.JsonUtils; import org.orcid.integration.blackbox.api.v2.release.BlackBoxBaseV2Release; import org.orcid.integration.blackbox.api.v2.release.MemberV2ApiClientImpl; import org.orcid.jaxb.model.message.ScopePathType; import org.orcid.pojo.ajaxForm.PojoUtil; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.sun.jersey.api.client.ClientResponse; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:test-context.xml" }) public class GroupIdRecordTest extends BlackBoxBaseV2Release { private static final List<String> VALID_GROUP_IDS = Arrays.asList( "orcid-generated:bb_test:this.is.a.test.", "orcid-generated:bb_test:this'is'a'test'", "orcid-generated:bb_test:this_is_a_test_", "orcid-generated:bb_test:this-is-a-test-", "orcid-generated:bb_test:(this)(is)(a)(test)", "orcid-generated:bb_test:this^is^a^test^", "orcid-generated:bb_test:this~is~a~test~", "orcid-generated:bb_test:this:is:a:test:", "orcid-generated:bb_test:this/is/a/test/", "orcid-generated:bb_test:this?is?a?test?", "orcid-generated:bb_test:this#is#a#test#", "orcid-generated:bb_test:this[is]a[test]", "orcid-generated:bb_test:this@is@a@test@", "orcid-generated:bb_test:this!is!a!test!", "orcid-generated:bb_test:this$is$a$test$", "orcid-generated:bb_test:this&is&a&test&", "orcid-generated:bb_test:this*is*a*test*", "orcid-generated:bb_test:this+is+a+test+", "orcid-generated:bb_test:this,is,a,test,"); public static final List<String> INVALID_GROUP_IDS = Arrays.asList( "orcid-generated:this{is}a{test}", "orcid-generated:this\\is\\a\\test\\", "orcid-generated:this\"is\"a\"test\"", "orcid-generated:this<is>a<test>", "orcid-generated:this¢is¢a¢test¢"); ArrayList<Long> putsToDelete = new ArrayList<Long>(); @Resource(name = "memberV2ApiClient_rc2") private org.orcid.integration.blackbox.api.v2.rc2.MemberV2ApiClientImpl memberV2ApiClient_rc2; @Resource(name = "memberV2ApiClient_rc3") private org.orcid.integration.blackbox.api.v2.rc3.MemberV2ApiClientImpl memberV2ApiClient_rc3; @Resource(name = "memberV2ApiClient_rc4") private org.orcid.integration.blackbox.api.v2.rc4.MemberV2ApiClientImpl memberV2ApiClient_rc4; @Resource(name = "memberV2ApiClient") private MemberV2ApiClientImpl memberV2ApiClient_release; @Before public void cleanUpOldTest() throws JSONException { String token = oauthHelper.getClientCredentialsAccessToken(this.getClient1ClientId(), this.getClient1ClientSecret(), ScopePathType.GROUP_ID_RECORD_UPDATE); // clean up group IDs before test int page = 1; org.orcid.jaxb.model.groupid_v2.GroupIdRecords groupsContainer = memberV2ApiClient_release.getGroupIdRecords(100, page, token).getEntity(org.orcid.jaxb.model.groupid_v2.GroupIdRecords.class); while (groupsContainer.getTotal() > 0) { for (org.orcid.jaxb.model.groupid_v2.GroupIdRecord groupIdRecord : groupsContainer.getGroupIdRecord()) if (groupIdRecord.getGroupId().startsWith("orcid-generated:bb_test:")) putsToDelete.add(groupIdRecord.getPutCode()); page++; groupsContainer = memberV2ApiClient_release.getGroupIdRecords(100, page, token).getEntity(org.orcid.jaxb.model.groupid_v2.GroupIdRecords.class); } for (Long putCode : putsToDelete) { memberV2ApiClient_release.deleteGroupIdRecord(putCode, token); } putsToDelete.clear(); } @After public void cleanUpGroupIds() throws JSONException { String token = oauthHelper.getClientCredentialsAccessToken(this.getClient1ClientId(), this.getClient1ClientSecret(), ScopePathType.GROUP_ID_RECORD_UPDATE); for (Long putCode : putsToDelete) { memberV2ApiClient_release.deleteGroupIdRecord(putCode, token); } } /** * --------- -- -- -- RC2 -- -- -- --------- * */ @Test public void testGetGroupIdRecordsWithSeveralFormats_rc2() throws JSONException, InterruptedException, URISyntaxException, UnsupportedEncodingException { String token = oauthHelper.getClientCredentialsAccessToken(this.getClient1ClientId(), this.getClient1ClientSecret(), ScopePathType.GROUP_ID_RECORD_UPDATE); for(String groupId : VALID_GROUP_IDS) { org.orcid.jaxb.model.groupid_rc2.GroupIdRecord g1 = new org.orcid.jaxb.model.groupid_rc2.GroupIdRecord(); g1.setDescription("Description"); g1.setGroupId(groupId); g1.setName("Group # " + System.currentTimeMillis()); g1.setType("publisher"); ClientResponse r1 = memberV2ApiClient_rc2.createGroupIdRecord(g1, token); String r1LocationPutCode = r1.getLocation().getPath().replace("/orcid-api-web/v2.0_rc2/group-id-record/", ""); g1.setPutCode(Long.valueOf(r1LocationPutCode)); webDriver.get(getWebBaseUrl() + "/public/group/" + g1.getPutCode()); WebElement preElement = webDriver.findElement(By.tagName("pre")); String groupElementString = preElement.getText(); assertFalse(PojoUtil.isEmpty(groupElementString)); org.orcid.jaxb.model.groupid_rc2.GroupIdRecord groupFromWebPage = JsonUtils.readObjectFromJsonString(groupElementString, org.orcid.jaxb.model.groupid_rc2.GroupIdRecord.class); assertNotNull(groupFromWebPage); assertEquals("Missing " + groupId, groupId, groupFromWebPage.getGroupId()); putsToDelete.add(g1.getPutCode()); } for(String invdalidGroupId : INVALID_GROUP_IDS) { org.orcid.jaxb.model.groupid_rc2.GroupIdRecord g1 = new org.orcid.jaxb.model.groupid_rc2.GroupIdRecord(); g1.setDescription("Description"); g1.setGroupId(invdalidGroupId); g1.setName("Group # " + System.currentTimeMillis()); g1.setType("publisher"); ClientResponse r1 = memberV2ApiClient_rc2.createGroupIdRecord(g1, token); assertNotNull(r1); assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), r1.getStatus()); } } /** * --------- -- -- -- RC3 -- -- -- --------- * */ @Test public void testGetGroupIdRecordsWithSeveralFormats_rc3() throws JSONException, InterruptedException, URISyntaxException, UnsupportedEncodingException { String token = oauthHelper.getClientCredentialsAccessToken(this.getClient1ClientId(), this.getClient1ClientSecret(), ScopePathType.GROUP_ID_RECORD_UPDATE); for(String groupId : VALID_GROUP_IDS) { org.orcid.jaxb.model.groupid_rc3.GroupIdRecord g1 = new org.orcid.jaxb.model.groupid_rc3.GroupIdRecord(); g1.setDescription("Description"); g1.setGroupId(groupId); g1.setName("Group # " + System.currentTimeMillis()); g1.setType("publisher"); ClientResponse r1 = memberV2ApiClient_rc3.createGroupIdRecord(g1, token); String r1LocationPutCode = r1.getLocation().getPath().replace("/orcid-api-web/v2.0_rc3/group-id-record/", ""); g1.setPutCode(Long.valueOf(r1LocationPutCode)); webDriver.get(getWebBaseUrl() + "/public/group/" + g1.getPutCode()); WebElement preElement = webDriver.findElement(By.tagName("pre")); String groupElementString = preElement.getText(); assertFalse(PojoUtil.isEmpty(groupElementString)); org.orcid.jaxb.model.groupid_rc3.GroupIdRecord groupFromWebPage = JsonUtils.readObjectFromJsonString(groupElementString, org.orcid.jaxb.model.groupid_rc3.GroupIdRecord.class); assertNotNull(groupFromWebPage); assertEquals("Missing " + groupId, groupId, groupFromWebPage.getGroupId()); putsToDelete.add(g1.getPutCode()); } for(String invdalidGroupId : INVALID_GROUP_IDS) { org.orcid.jaxb.model.groupid_rc3.GroupIdRecord g1 = new org.orcid.jaxb.model.groupid_rc3.GroupIdRecord(); g1.setDescription("Description"); g1.setGroupId(invdalidGroupId); g1.setName("Group # " + System.currentTimeMillis()); g1.setType("publisher"); ClientResponse r1 = memberV2ApiClient_rc3.createGroupIdRecord(g1, token); assertNotNull(r1); assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), r1.getStatus()); } } /** * --------- -- -- -- RC4 -- -- -- --------- * */ @Test public void testGetGroupIdRecordsWithSeveralFormats_rc4() throws JSONException, InterruptedException, URISyntaxException, UnsupportedEncodingException { String token = oauthHelper.getClientCredentialsAccessToken(this.getClient1ClientId(), this.getClient1ClientSecret(), ScopePathType.GROUP_ID_RECORD_UPDATE); for(String groupId : VALID_GROUP_IDS) { org.orcid.jaxb.model.groupid_rc4.GroupIdRecord g1 = new org.orcid.jaxb.model.groupid_rc4.GroupIdRecord(); g1.setDescription("Description"); g1.setGroupId(groupId); g1.setName("Group # " + System.currentTimeMillis()); g1.setType("publisher"); ClientResponse r1 = memberV2ApiClient_rc4.createGroupIdRecord(g1, token); String r1LocationPutCode = r1.getLocation().getPath().replace("/orcid-api-web/v2.0_rc4/group-id-record/", ""); g1.setPutCode(Long.valueOf(r1LocationPutCode)); webDriver.get(getWebBaseUrl() + "/public/group/" + g1.getPutCode()); WebElement preElement = webDriver.findElement(By.tagName("pre")); String groupElementString = preElement.getText(); assertFalse(PojoUtil.isEmpty(groupElementString)); org.orcid.jaxb.model.groupid_rc4.GroupIdRecord groupFromWebPage = JsonUtils.readObjectFromJsonString(groupElementString, org.orcid.jaxb.model.groupid_rc4.GroupIdRecord.class); assertNotNull(groupFromWebPage); assertEquals("Missing " + groupId, groupId, groupFromWebPage.getGroupId()); putsToDelete.add(g1.getPutCode()); } for(String invdalidGroupId : INVALID_GROUP_IDS) { org.orcid.jaxb.model.groupid_rc4.GroupIdRecord g1 = new org.orcid.jaxb.model.groupid_rc4.GroupIdRecord(); g1.setDescription("Description"); g1.setGroupId(invdalidGroupId); g1.setName("Group # " + System.currentTimeMillis()); g1.setType("publisher"); ClientResponse r1 = memberV2ApiClient_rc4.createGroupIdRecord(g1, token); assertNotNull(r1); assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), r1.getStatus()); } } /** * --------- -- -- -- Release -- -- -- --------- * */ @Test public void testGetGroupIdRecordsWithSeveralFormats_v2() throws JSONException, InterruptedException, URISyntaxException, UnsupportedEncodingException { String token = oauthHelper.getClientCredentialsAccessToken(this.getClient1ClientId(), this.getClient1ClientSecret(), ScopePathType.GROUP_ID_RECORD_UPDATE); for(String groupId : VALID_GROUP_IDS) { org.orcid.jaxb.model.groupid_v2.GroupIdRecord g1 = new org.orcid.jaxb.model.groupid_v2.GroupIdRecord(); g1.setDescription("Description"); g1.setGroupId(groupId); g1.setName("Group # " + System.currentTimeMillis()); g1.setType("publisher"); ClientResponse r1 = memberV2ApiClient_release.createGroupIdRecord(g1, token); String r1LocationPutCode = r1.getLocation().getPath().replace("/orcid-api-web/v2.0/group-id-record/", ""); g1.setPutCode(Long.valueOf(r1LocationPutCode)); webDriver.get(getWebBaseUrl() + "/public/group/" + g1.getPutCode()); WebElement preElement = webDriver.findElement(By.tagName("pre")); String groupElementString = preElement.getText(); assertFalse(PojoUtil.isEmpty(groupElementString)); org.orcid.jaxb.model.groupid_v2.GroupIdRecord groupFromWebPage = JsonUtils.readObjectFromJsonString(groupElementString, org.orcid.jaxb.model.groupid_v2.GroupIdRecord.class); assertNotNull(groupFromWebPage); assertEquals("Missing " + groupId, groupId, groupFromWebPage.getGroupId()); putsToDelete.add(g1.getPutCode()); } for(String invdalidGroupId : INVALID_GROUP_IDS) { org.orcid.jaxb.model.groupid_v2.GroupIdRecord g1 = new org.orcid.jaxb.model.groupid_v2.GroupIdRecord(); g1.setDescription("Description"); g1.setGroupId(invdalidGroupId); g1.setName("Group # " + System.currentTimeMillis()); g1.setType("publisher"); ClientResponse r1 = memberV2ApiClient_release.createGroupIdRecord(g1, token); assertNotNull(r1); assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), r1.getStatus()); } } /** * --------- -- -- -- ALL -- -- -- --------- * */ @Test public void testCreateAndView() throws JSONException, InterruptedException, URISyntaxException, UnsupportedEncodingException { String token = oauthHelper.getClientCredentialsAccessToken(this.getClient1ClientId(), this.getClient1ClientSecret(), ScopePathType.GROUP_ID_RECORD_UPDATE); String groupId = "orcid-generated:test#" + System.currentTimeMillis(); org.orcid.jaxb.model.groupid_v2.GroupIdRecord g1 = new org.orcid.jaxb.model.groupid_v2.GroupIdRecord(); g1.setDescription("Description"); g1.setGroupId(groupId); g1.setName(groupId); g1.setType("publisher"); //Create one ClientResponse r1 = memberV2ApiClient_release.createGroupIdRecord(g1, token); assertEquals(ClientResponse.Status.CREATED.getStatusCode(), r1.getStatus()); String r1LocationPutCode = r1.getLocation().getPath().replace("/orcid-api-web/v2.0/group-id-record/", ""); Long putCode = Long.valueOf(r1LocationPutCode); //View it with RC2 ClientResponse rc2Result = memberV2ApiClient_rc2.getGroupIdRecord(putCode, token); assertEquals(Response.Status.OK.getStatusCode(), rc2Result.getStatus()); org.orcid.jaxb.model.groupid_rc2.GroupIdRecord rc2 = rc2Result.getEntity(org.orcid.jaxb.model.groupid_rc2.GroupIdRecord.class); assertEquals(putCode, rc2.getPutCode()); assertEquals("publisher", rc2.getType()); assertEquals("Description", rc2.getDescription()); assertEquals(groupId, rc2.getGroupId()); assertEquals(groupId, rc2.getName()); //View it with RC3 ClientResponse rc3Result = memberV2ApiClient_rc3.getGroupIdRecord(putCode, token); assertEquals(Response.Status.OK.getStatusCode(), rc3Result.getStatus()); org.orcid.jaxb.model.groupid_rc3.GroupIdRecord rc3 = rc3Result.getEntity(org.orcid.jaxb.model.groupid_rc3.GroupIdRecord.class); assertEquals(putCode, rc3.getPutCode()); assertEquals("publisher", rc3.getType()); assertEquals("Description", rc3.getDescription()); assertEquals(groupId, rc3.getGroupId()); assertEquals(groupId, rc3.getName()); //View it with RC4 ClientResponse rc4Result = memberV2ApiClient_rc4.getGroupIdRecord(putCode, token); assertEquals(Response.Status.OK.getStatusCode(), rc4Result.getStatus()); org.orcid.jaxb.model.groupid_rc4.GroupIdRecord rc4 = rc4Result.getEntity(org.orcid.jaxb.model.groupid_rc4.GroupIdRecord.class); assertEquals(putCode, rc4.getPutCode()); assertEquals("publisher", rc4.getType()); assertEquals("Description", rc4.getDescription()); assertEquals(groupId, rc4.getGroupId()); assertEquals(groupId, rc4.getName()); //View it with release ClientResponse v2Result = memberV2ApiClient_release.getGroupIdRecord(putCode, token); assertEquals(Response.Status.OK.getStatusCode(), v2Result.getStatus()); org.orcid.jaxb.model.groupid_v2.GroupIdRecord v2 = v2Result.getEntity(org.orcid.jaxb.model.groupid_v2.GroupIdRecord.class); assertEquals(putCode, v2.getPutCode()); assertEquals("publisher", v2.getType()); assertEquals("Description", v2.getDescription()); assertEquals(groupId, v2.getGroupId()); assertEquals(groupId, v2.getName()); } }