use of org.orcid.jaxb.model.message.ExternalIdReference in project ORCID-Source by ORCID.
the class Api12MembersTest method addExternalIdentifiersTest.
@Test
public void addExternalIdentifiersTest() throws InterruptedException, JSONException {
String clientId = getClient1ClientId();
String clientRedirectUri = getClient1RedirectUri();
String clientSecret = getClient1ClientSecret();
String userId = getUser1OrcidId();
String password = getUser1Password();
String accessToken = getAccessToken(userId, password, Arrays.asList("/person/update", "/orcid-bio/read-limited"), clientId, clientSecret, clientRedirectUri, true);
// Check the current record and get the num of existing ext ids
ClientResponse response = t2OAuthClient_1_2.viewBioDetailsXml(userId, accessToken);
assertNotNull(response);
assertEquals(200, response.getStatus());
OrcidMessage orcidMessageWithExtIds = response.getEntity(OrcidMessage.class);
assertNotNull(orcidMessageWithExtIds);
assertNotNull(orcidMessageWithExtIds.getOrcidProfile());
assertNotNull(orcidMessageWithExtIds.getOrcidProfile().getOrcidBio());
int initialNumberOfExtIds = 0;
if (orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers() != null && orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier() != null) {
initialNumberOfExtIds = orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier().size();
}
OrcidMessage orcidMessage = new OrcidMessage();
orcidMessage.setMessageVersion(OrcidMessage.DEFAULT_VERSION);
OrcidProfile orcidProfile = new OrcidProfile();
OrcidBio orcidBio = new OrcidBio();
ExternalIdentifier extId = new ExternalIdentifier();
Long time = System.currentTimeMillis();
String commonName = "ext-id-common-name-" + time;
String idReference = "ext-id-reference-" + time;
extId.setExternalIdCommonName(new ExternalIdCommonName(commonName));
extId.setExternalIdReference(new ExternalIdReference(idReference));
ExternalIdentifiers extIds = new ExternalIdentifiers();
extIds.getExternalIdentifier().add(extId);
orcidBio.setExternalIdentifiers(extIds);
orcidProfile.setOrcidBio(orcidBio);
orcidMessage.setOrcidProfile(orcidProfile);
ClientResponse clientResponse = t2OAuthClient_1_2.addExternalIdentifiersXml(userId, orcidMessage, accessToken);
assertEquals(200, clientResponse.getStatus());
response = t2OAuthClient_1_2.viewBioDetailsXml(userId, accessToken);
assertNotNull(response);
assertEquals(200, response.getStatus());
orcidMessageWithExtIds = response.getEntity(OrcidMessage.class);
assertNotNull(orcidMessageWithExtIds);
assertNotNull(orcidMessageWithExtIds.getOrcidProfile());
assertNotNull(orcidMessageWithExtIds.getOrcidProfile().getOrcidBio());
assertNotNull(orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers());
boolean found = false;
for (ExternalIdentifier newExtId : orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier()) {
if (commonName.equals(newExtId.getExternalIdCommonName().getContent())) {
assertEquals(idReference, newExtId.getExternalIdReference().getContent());
found = true;
}
}
assertTrue(found);
// Try to add a duplicate
long initialSize = orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier().size();
ExternalIdentifier dupExtId = new ExternalIdentifier();
dupExtId.setExternalIdCommonName(new ExternalIdCommonName(commonName));
dupExtId.setExternalIdReference(new ExternalIdReference(idReference));
orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier().add(dupExtId);
assertEquals(initialSize + 1, orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier().size());
clientResponse = t2OAuthClient_1_2.addExternalIdentifiersXml(userId, orcidMessageWithExtIds, accessToken);
assertEquals(200, clientResponse.getStatus());
response = t2OAuthClient_1_2.viewBioDetailsXml(userId, accessToken);
assertNotNull(response);
assertEquals(200, response.getStatus());
orcidMessageWithExtIds = response.getEntity(OrcidMessage.class);
assertNotNull(orcidMessageWithExtIds);
assertNotNull(orcidMessageWithExtIds.getOrcidProfile());
assertNotNull(orcidMessageWithExtIds.getOrcidProfile().getOrcidBio());
assertNotNull(orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers());
assertEquals(initialSize, orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier().size());
found = false;
for (ExternalIdentifier newExtId : orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier()) {
if (commonName.equals(newExtId.getExternalIdCommonName().getContent())) {
assertEquals(idReference, newExtId.getExternalIdReference().getContent());
found = true;
}
}
assertTrue(found);
// Add a new one and the duplicate again, verify only the new one was added
String newExtIdValue = "new-ext-id-" + System.currentTimeMillis();
ExternalIdentifier newExtId = new ExternalIdentifier();
newExtId.setExternalIdCommonName(new ExternalIdCommonName(newExtIdValue));
newExtId.setExternalIdReference(new ExternalIdReference(newExtIdValue));
orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier().add(dupExtId);
orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier().add(newExtId);
assertEquals(initialSize + 2, orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier().size());
clientResponse = t2OAuthClient_1_2.addExternalIdentifiersXml(userId, orcidMessageWithExtIds, accessToken);
assertEquals(200, clientResponse.getStatus());
response = t2OAuthClient_1_2.viewBioDetailsXml(userId, accessToken);
assertNotNull(response);
assertEquals(200, response.getStatus());
orcidMessageWithExtIds = response.getEntity(OrcidMessage.class);
assertNotNull(orcidMessageWithExtIds);
assertNotNull(orcidMessageWithExtIds.getOrcidProfile());
assertNotNull(orcidMessageWithExtIds.getOrcidProfile().getOrcidBio());
assertNotNull(orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers());
assertEquals(initialSize + 1, orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier().size());
boolean foundOld = false;
boolean foundNew = false;
for (ExternalIdentifier element : orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier()) {
if (commonName.equals(element.getExternalIdCommonName().getContent())) {
assertEquals(idReference, element.getExternalIdReference().getContent());
foundOld = true;
} else if (newExtIdValue.equals(element.getExternalIdCommonName().getContent())) {
assertEquals(newExtIdValue, element.getExternalIdReference().getContent());
foundNew = true;
}
}
assertTrue(foundOld);
assertTrue(foundNew);
// Delete both ext ids
response = t2OAuthClient_1_2.viewBioDetailsXml(userId, accessToken);
assertNotNull(response);
assertEquals(200, response.getStatus());
orcidMessageWithExtIds = response.getEntity(OrcidMessage.class);
Iterator<ExternalIdentifier> it = orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier().iterator();
while (it.hasNext()) {
ExternalIdentifier element = it.next();
if (commonName.equals(element.getExternalIdCommonName().getContent()) || newExtIdValue.equals(element.getExternalIdCommonName().getContent())) {
it.remove();
}
}
clientResponse = t2OAuthClient_1_2.addExternalIdentifiersXml(userId, orcidMessageWithExtIds, accessToken);
assertEquals(200, clientResponse.getStatus());
response = t2OAuthClient_1_2.viewBioDetailsXml(userId, accessToken);
assertNotNull(response);
assertEquals(200, response.getStatus());
// It should have the same number of ext ids as before the test
assertEquals(initialNumberOfExtIds, orcidMessageWithExtIds.getOrcidProfile().getOrcidBio().getExternalIdentifiers().getExternalIdentifier().size());
}
Aggregations