diff --git a/doc/release-notes/11242-fix-oricid-recognition.md b/doc/release-notes/11242-fix-oricid-recognition.md new file mode 100644 index 00000000000..268a63bb05e --- /dev/null +++ b/doc/release-notes/11242-fix-oricid-recognition.md @@ -0,0 +1,3 @@ +A bug that caused ORCIDs start with https://orcid.org/ entered as author identifier to be ignored when creating the DataCite metadata has been fixed. This primarily affected users of the ORCID external vocabulary script as the manual entry form recommends not using the URL form. + +The display of authorIdentifier, when not using any external vocabulary scripts, has been improved so that either the plain identifier (e.g. "0000-0002-1825-0097") or its URL form (e.g. "https://orcid.org/0000-0002-1825-0097") will result in valid links in the display (for identifier types that have a URL form). The URL form is now recommended when doing manual entry. diff --git a/doc/sphinx-guides/source/user/dataset-management.rst b/doc/sphinx-guides/source/user/dataset-management.rst index 1418aa627d5..33cd011101e 100755 --- a/doc/sphinx-guides/source/user/dataset-management.rst +++ b/doc/sphinx-guides/source/user/dataset-management.rst @@ -54,7 +54,7 @@ Adding a New Dataset #. Click on the "Add Data" button and select "New Dataset" in the dropdown menu. **Note:** If you are on the root Dataverse collection, your My Data page or click the "Add Data" link in the navbar, the dataset you create will be hosted in the root Dataverse collection. You can change this by selecting another Dataverse collection you have proper permissions to create datasets in, from the Host Dataverse collection dropdown in the create dataset form. This option to choose will not be available after you create the dataset. #. To quickly get started, enter at minimum all the required fields with an asterisk (e.g., the Dataset Title, Author Name, Description Text, Point of Contact Email, and Subject) to get a Data Citation with a DOI. - #. When entering author identifiers, select the type from the dropdown (e.g. "ORCID") and under "Identifier" enter just the unique identifier (e.g. "0000-0002-1825-0097") rather than the full URL (e.g. "https://orcid.org/0000-0002-1825-0097"). + #. When entering author identifiers, select the type from the dropdown (e.g. "ORCID") and under "Identifier" enter the full URL (e.g. "https://orcid.org/0000-0002-1825-0097") for identifiers that have a URL form. The shorter form of the unique identifier (e.g. "0000-0002-1825-0097") can also be entered, but URL form is preferred when available. #. Scroll down to the "Files" section and click on "Select Files to Add" to add all the relevant files to your Dataset. You can also upload your files directly from your Dropbox. **Tip:** You can drag and drop or select multiple files at a time from your desktop diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetAuthor.java b/src/main/java/edu/harvard/iq/dataverse/DatasetAuthor.java index d33d709107f..67078bf399e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetAuthor.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetAuthor.java @@ -97,8 +97,13 @@ public static String getIdentifierAsUrl(String idType, String idValue) { if (idType != null && !idType.isEmpty() && idValue != null && !idValue.isEmpty()) { try { ExternalIdentifier externalIdentifier = ExternalIdentifier.valueOf(idType); - if (externalIdentifier.isValidIdentifier(idValue)) - return externalIdentifier.format(idValue); + if (externalIdentifier.isValidIdentifier(idValue)) { + String uri = externalIdentifier.format(idValue); + //The DAI identifier is a URI starting with "info" - we don't want to return it as a URL (we assume non-null URLs should be links in the display) + if(uri.startsWith("http")) { + return uri; + } + } } catch (Exception e) { // non registered identifier } diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldValueValidator.java b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldValueValidator.java index 610bb70ff49..74d3cbf73f0 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldValueValidator.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldValueValidator.java @@ -241,10 +241,6 @@ private boolean isValidDate(String dateString, String pattern) { return valid; } - public boolean isValidAuthorIdentifier(String userInput, Pattern pattern) { - return pattern.matcher(userInput).matches(); - } - // Validate child fields against each other and return failure message or Optional.empty() if success public Optional validateChildConstraints(DatasetField dsf) { final String fieldName = dsf.getDatasetFieldType().getName() != null ? dsf.getDatasetFieldType().getName() : ""; diff --git a/src/main/java/edu/harvard/iq/dataverse/ExternalIdentifier.java b/src/main/java/edu/harvard/iq/dataverse/ExternalIdentifier.java index cf1dcfb3c15..ef4bcb312c1 100644 --- a/src/main/java/edu/harvard/iq/dataverse/ExternalIdentifier.java +++ b/src/main/java/edu/harvard/iq/dataverse/ExternalIdentifier.java @@ -4,19 +4,18 @@ import java.util.regex.Pattern; public enum ExternalIdentifier { - ORCID("ORCID", "https://orcid.org/%s", "^\\d{4}-\\d{4}-\\d{4}-(\\d{4}|\\d{3}X)$"), - ISNI("ISNI", "http://www.isni.org/isni/%s", "^\\d*$"), - LCNA("LCNA", "http://id.loc.gov/authorities/names/%s", "^[a-z]+\\d+$"), - VIAF("VIAF", "https://viaf.org/viaf/%s", "^\\d*$"), + ORCID("ORCID", "https://orcid.org/%s", "^(https:\\/\\/orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-(\\d{4}|\\d{3}X)$"), + ISNI("ISNI", "http://www.isni.org/isni/%s", "^(http:\\/\\/www\\.isni\\.org\\/isni\\/)?(\\d{16}|\\d{15}X)$"), + LCNA("LCNA", "http://id.loc.gov/authorities/names/%s", "^(http:\\/\\/id\\.loc\\.gov\\/authorities\\/names\\/)?[a-z]+\\d+$"), + VIAF("VIAF", "https://viaf.org/viaf/%s", "^(https:\\/\\/viaf\\.org\\/viaf\\/)?\\d*$"), // GND regex from https://www.wikidata.org/wiki/Property:P227 - GND("GND", "https://d-nb.info/gnd/%s", "^1[01]?\\d{7}[0-9X]|[47]\\d{6}-\\d|[1-9]\\d{0,7}-[0-9X]|3\\d{7}[0-9X]$"), + GND("GND", "https://d-nb.info/gnd/%s", "^(https:\\/\\/d-nb\\.info\\/gnd\\/)?(1[01]?\\d{7}[0-9X]|[47]\\d{6}-\\d|[1-9]\\d{0,7}-[0-9X]|3\\d{7}[0-9X])$"), // note: DAI is missing from this list, because it doesn't have resolvable URL - ResearcherID("ResearcherID", "https://publons.com/researcher/%s/", "^[A-Z\\d][A-Z\\d-]+[A-Z\\d]$"), - ScopusID("ScopusID", "https://www.scopus.com/authid/detail.uri?authorId=%s", "^\\d*$"), + ResearcherID("ResearcherID", "https://publons.com/researcher/%s/", "^([A-Z\\d][A-Z\\d-]+[A-Z\\d]|(https:\\/\\/publons\\.com\\/researcher\\/)?[A-Z\\d][A-Z\\d-]+[A-Z\\d]\\/)$"), + ScopusID("ScopusID", "https://www.scopus.com/authid/detail.uri?authorId=%s", "^(https:\\/\\/www\\.scopus\\.com\\/authid\\/detail\\.uri\\?authorId=)?\\d*$"), // ROR regex from https://ror.readme.io/docs/identifier - ROR("ROR", "https://ror.org/%s", "^0[a-hj-km-np-tv-z|0-9]{6}[0-9]{2}$"), - // In some contexts, we check for the full ROR URL. - ROR_FULL_URL("ROR", "https://ror.org/%s", "^(https:\\/\\/ror.org\\/)0[a-hj-km-np-tv-z|0-9]{6}[0-9]{2}$"); + ROR("ROR", "https://ror.org/%s", "^(https:\\/\\/ror\\.org\\/)?0[a-hj-km-np-tv-z|0-9]{6}[0-9]{2}$"), + DAI("DAI", "info:eu-repo/dai/nl/%s", "^(info:eu-repo\\/dai\\/nl\\/)?[\\d]?\\d{8}[0-9X]$"); private String name; private String template; @@ -57,6 +56,9 @@ public Pattern getPattern() { } public String format(String idValue) { + if(idValue.startsWith(template.substring(0,template.indexOf("%s")))) { + return idValue; + } return String.format(template, idValue); } } diff --git a/src/main/java/edu/harvard/iq/dataverse/pidproviders/doi/XmlMetadataTemplate.java b/src/main/java/edu/harvard/iq/dataverse/pidproviders/doi/XmlMetadataTemplate.java index 201baa8172c..e9046a505c7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/pidproviders/doi/XmlMetadataTemplate.java +++ b/src/main/java/edu/harvard/iq/dataverse/pidproviders/doi/XmlMetadataTemplate.java @@ -617,7 +617,7 @@ private void writeEntityElements(XMLStreamWriter xmlw, String elementName, Strin attributeMap.clear(); boolean isROR=false; String orgName = affiliation; - ExternalIdentifier externalIdentifier = ExternalIdentifier.ROR_FULL_URL; + ExternalIdentifier externalIdentifier = ExternalIdentifier.ROR; if (externalIdentifier.isValidIdentifier(orgName)) { isROR = true; JsonObject jo = getExternalVocabularyValue(orgName); @@ -1540,7 +1540,7 @@ private void writeFundingReferences(XMLStreamWriter xmlw, DvObject dvObject) thr fundingReferenceWritten = XmlWriterUtil.writeOpenTagIfNeeded(xmlw, "fundingReferences", fundingReferenceWritten); boolean isROR=false; String funderIdentifier = null; - ExternalIdentifier externalIdentifier = ExternalIdentifier.ROR_FULL_URL; + ExternalIdentifier externalIdentifier = ExternalIdentifier.ROR; if (externalIdentifier.isValidIdentifier(funder)) { isROR = true; JsonObject jo = getExternalVocabularyValue(funder); diff --git a/src/test/java/edu/harvard/iq/dataverse/DatasetFieldValueValidatorTest.java b/src/test/java/edu/harvard/iq/dataverse/DatasetFieldValueValidatorTest.java index 7320cf7acfe..3221949384e 100644 --- a/src/test/java/edu/harvard/iq/dataverse/DatasetFieldValueValidatorTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/DatasetFieldValueValidatorTest.java @@ -111,68 +111,6 @@ public void testIsValid() { assertFalse(result); } - @Test - public void testIsValidAuthorIdentifierOrcid() { - DatasetFieldValueValidator validator = new DatasetFieldValueValidator(); - Pattern pattern = ExternalIdentifier.valueOf("ORCID").getPattern(); - assertTrue(validator.isValidAuthorIdentifier("0000-0002-1825-0097", pattern)); - // An "X" at the end of an ORCID is less common but still valid. - assertTrue(validator.isValidAuthorIdentifier("0000-0002-1694-233X", pattern)); - assertFalse(validator.isValidAuthorIdentifier("0000 0002 1825 0097", pattern)); - assertFalse(validator.isValidAuthorIdentifier(" 0000-0002-1825-0097", pattern)); - assertFalse(validator.isValidAuthorIdentifier("0000-0002-1825-0097 ", pattern)); - assertFalse(validator.isValidAuthorIdentifier("junk", pattern)); - } - - @Test - public void testIsValidAuthorIdentifierIsni() { - DatasetFieldValueValidator validator = new DatasetFieldValueValidator(); - Pattern pattern = ExternalIdentifier.valueOf("ISNI").getPattern(); - assertTrue(validator.isValidAuthorIdentifier("0000000121032683", pattern)); - assertFalse(validator.isValidAuthorIdentifier("junk", pattern)); - } - - @Test - public void testIsValidAuthorIdentifierLcna() { - DatasetFieldValueValidator validator = new DatasetFieldValueValidator(); - Pattern pattern = ExternalIdentifier.valueOf("LCNA").getPattern(); - assertTrue(validator.isValidAuthorIdentifier("n82058243", pattern)); - assertTrue(validator.isValidAuthorIdentifier("foobar123", pattern)); - assertFalse(validator.isValidAuthorIdentifier("junk", pattern)); - } - - @Test - public void testIsValidAuthorIdentifierViaf() { - DatasetFieldValueValidator validator = new DatasetFieldValueValidator(); - Pattern pattern = ExternalIdentifier.valueOf("VIAF").getPattern(); - assertTrue(validator.isValidAuthorIdentifier("172389567", pattern)); - assertFalse(validator.isValidAuthorIdentifier("junk", pattern)); - } - - @Test - public void testIsValidAuthorIdentifierGnd() { - DatasetFieldValueValidator validator = new DatasetFieldValueValidator(); - Pattern pattern = ExternalIdentifier.valueOf("GND").getPattern(); - assertTrue(validator.isValidAuthorIdentifier("4079154-3", pattern)); - assertFalse(validator.isValidAuthorIdentifier("junk", pattern)); - } - - @Test - public void testIsValidAuthorIdentifierRor() { - DatasetFieldValueValidator validator = new DatasetFieldValueValidator(); - Pattern pattern = ExternalIdentifier.valueOf("ROR").getPattern(); - assertTrue(validator.isValidAuthorIdentifier("03vek6s52", pattern)); - assertFalse(validator.isValidAuthorIdentifier("junk", pattern)); - } - - @Test - public void testIsValidAuthorIdentifierRorFull() { - DatasetFieldValueValidator validator = new DatasetFieldValueValidator(); - Pattern pattern = ExternalIdentifier.valueOf("ROR_FULL_URL").getPattern(); - assertTrue(validator.isValidAuthorIdentifier("https://ror.org/03vek6s52", pattern)); - assertFalse(validator.isValidAuthorIdentifier("junk", pattern)); - } - final Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); @ParameterizedTest diff --git a/src/test/java/edu/harvard/iq/dataverse/ExternalIdentifierTest.java b/src/test/java/edu/harvard/iq/dataverse/ExternalIdentifierTest.java index dbd732d2e55..2440d4ae240 100644 --- a/src/test/java/edu/harvard/iq/dataverse/ExternalIdentifierTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/ExternalIdentifierTest.java @@ -9,43 +9,152 @@ public class ExternalIdentifierTest { @Test public void testIsValidAuthorIdentifierOrcid() { - ExternalIdentifier identifier = ExternalIdentifier.valueOf("ORCID"); - assertTrue(identifier.isValidIdentifier("0000-0002-1825-0097")); - // An "X" at the end of an ORCID is less common but still valid. - assertTrue(identifier.isValidIdentifier("0000-0002-1694-233X")); - assertFalse(identifier.isValidIdentifier("0000 0002 1825 0097")); - assertFalse(identifier.isValidIdentifier(" 0000-0002-1825-0097")); - assertFalse(identifier.isValidIdentifier("0000-0002-1825-0097 ")); - assertFalse(identifier.isValidIdentifier("junk")); + ExternalIdentifier identifier = ExternalIdentifier.valueOf("ORCID"); + assertTrue(identifier.isValidIdentifier("0000-0002-1825-0097")); + // An "X" at the end of an ORCID is less common but still valid. + assertTrue(identifier.isValidIdentifier("0000-0002-1694-233X")); + assertFalse(identifier.isValidIdentifier("0000 0002 1825 0097")); + assertFalse(identifier.isValidIdentifier(" 0000-0002-1825-0097")); + assertFalse(identifier.isValidIdentifier("0000-0002-1825-0097 ")); + assertFalse(identifier.isValidIdentifier("junk")); + + // Test ORCID with https://orcid.org/ prefix + assertTrue(identifier.isValidIdentifier("https://orcid.org/0000-0002-1825-0097")); + assertTrue(identifier.isValidIdentifier("https://orcid.org/0000-0002-1694-233X")); + + // Test format command + assertEquals("https://orcid.org/0000-0002-1825-0097", identifier.format("0000-0002-1825-0097")); + assertEquals("https://orcid.org/0000-0002-1694-233X", identifier.format("0000-0002-1694-233X")); + assertEquals("https://orcid.org/0000-0002-1825-0097", identifier.format("https://orcid.org/0000-0002-1825-0097")); } + @Test + public void testIsValidAuthorIdentifierRor() { + ExternalIdentifier identifier = ExternalIdentifier.valueOf("ROR"); + assertTrue(identifier.isValidIdentifier("01h6qyw18")); + assertTrue(identifier.isValidIdentifier("02mhbdp49")); + assertFalse(identifier.isValidIdentifier("01h6qyw1")); // Too short + assertFalse(identifier.isValidIdentifier("01h6qyw18a")); // Too long + assertFalse(identifier.isValidIdentifier(" 01h6qyw18")); + assertFalse(identifier.isValidIdentifier("01h6qyw18 ")); + assertFalse(identifier.isValidIdentifier("junk")); + + // Test ROR with https://ror.org/ prefix + assertTrue(identifier.isValidIdentifier("https://ror.org/01h6qyw18")); + assertTrue(identifier.isValidIdentifier("https://ror.org/02mhbdp49")); + + // Test format command + assertEquals("https://ror.org/01h6qyw18", identifier.format("01h6qyw18")); + assertEquals("https://ror.org/02mhbdp49", identifier.format("02mhbdp49")); + assertEquals("https://ror.org/01h6qyw18", identifier.format("https://ror.org/01h6qyw18")); + } + @Test public void testIsValidAuthorIdentifierIsni() { - ExternalIdentifier identifier = ExternalIdentifier.valueOf("ISNI"); - assertTrue(identifier.isValidIdentifier("0000000121032683")); - assertFalse(identifier.isValidIdentifier("junk")); + ExternalIdentifier identifier = ExternalIdentifier.valueOf("ISNI"); + assertTrue(identifier.isValidIdentifier("0000000121032683")); + assertTrue(identifier.isValidIdentifier("000000012150090X")); + assertTrue(identifier.isValidIdentifier("http://www.isni.org/isni/0000000121032683")); + assertTrue(identifier.isValidIdentifier("http://www.isni.org/isni/000000012150090X")); + assertFalse(identifier.isValidIdentifier("junk")); + assertFalse(identifier.isValidIdentifier("000000012103268")); // Too short + assertFalse(identifier.isValidIdentifier("00000001210326831")); // Too long + + // Test format command + assertEquals("http://www.isni.org/isni/0000000121032683", identifier.format("0000000121032683")); + assertEquals("http://www.isni.org/isni/0000000121032683", identifier.format("http://www.isni.org/isni/0000000121032683")); } - + @Test public void testIsValidAuthorIdentifierLcna() { - ExternalIdentifier identifier = ExternalIdentifier.valueOf("LCNA"); - assertTrue(identifier.isValidIdentifier("n82058243")); - assertTrue(identifier.isValidIdentifier("foobar123")); - assertFalse(identifier.isValidIdentifier("junk")); + ExternalIdentifier identifier = ExternalIdentifier.valueOf("LCNA"); + assertTrue(identifier.isValidIdentifier("n82058243")); + assertTrue(identifier.isValidIdentifier("foobar123")); + assertTrue(identifier.isValidIdentifier("http://id.loc.gov/authorities/names/n82058243")); + assertFalse(identifier.isValidIdentifier("junk")); + assertFalse(identifier.isValidIdentifier("123")); // Too short (assuming minimum length) + + // Test format command + assertEquals("http://id.loc.gov/authorities/names/n82058243", identifier.format("n82058243")); + assertEquals("http://id.loc.gov/authorities/names/n82058243", identifier.format("http://id.loc.gov/authorities/names/n82058243")); } - + @Test public void testIsValidAuthorIdentifierViaf() { - ExternalIdentifier identifier = ExternalIdentifier.valueOf("VIAF"); - assertTrue(identifier.isValidIdentifier("172389567")); - assertFalse(identifier.isValidIdentifier("junk")); - } + ExternalIdentifier identifier = ExternalIdentifier.valueOf("VIAF"); + assertTrue(identifier.isValidIdentifier("172389567")); + assertTrue(identifier.isValidIdentifier("https://viaf.org/viaf/172389567")); + assertFalse(identifier.isValidIdentifier("junk")); + + assertEquals("https://viaf.org/viaf/172389567", identifier.format("172389567")); + assertEquals("https://viaf.org/viaf/172389567", identifier.format("https://viaf.org/viaf/172389567")); + } + @Test public void testIsValidAuthorIdentifierGnd() { - ExternalIdentifier identifier = ExternalIdentifier.valueOf("GND"); - assertTrue(identifier.isValidIdentifier("4079154-3")); - assertFalse(identifier.isValidIdentifier("junk")); + ExternalIdentifier identifier = ExternalIdentifier.valueOf("GND"); + assertTrue(identifier.isValidIdentifier("4079154-3")); + assertTrue(identifier.isValidIdentifier("118540238")); + assertTrue(identifier.isValidIdentifier("https://d-nb.info/gnd/4079154-3")); + assertTrue(identifier.isValidIdentifier("https://d-nb.info/gnd/118540238")); + assertFalse(identifier.isValidIdentifier("junk")); + assertFalse(identifier.isValidIdentifier("123")); // Too short + + assertEquals("https://d-nb.info/gnd/4079154-3", identifier.format("4079154-3")); + assertEquals("https://d-nb.info/gnd/4079154-3", identifier.format("https://d-nb.info/gnd/4079154-3")); + + } + + @Test + public void testIsValidAuthorIdentifierResearcherId() { + ExternalIdentifier identifier = ExternalIdentifier.valueOf("ResearcherID"); + assertTrue(identifier.isValidIdentifier("A-1234-5678")); + assertTrue(identifier.isValidIdentifier("J-9876-2018")); + assertTrue(identifier.isValidIdentifier("AAA-1234-2020")); + assertTrue(identifier.isValidIdentifier("Z9999-2021")); + assertTrue(identifier.isValidIdentifier("https://publons.com/researcher/A-1234-5678/")); + assertTrue(identifier.isValidIdentifier("https://publons.com/researcher/J-9876-2018/")); + assertFalse(identifier.isValidIdentifier("a-1234-5678")); // Lowercase start + assertFalse(identifier.isValidIdentifier("A-1234-5678-")); // Ends with hyphen + assertFalse(identifier.isValidIdentifier("-A-1234-5678")); // Starts with hyphen + assertFalse(identifier.isValidIdentifier("junk")); + + assertEquals("https://publons.com/researcher/A-1234-5678/", identifier.format("A-1234-5678")); + assertEquals("https://publons.com/researcher/A-1234-5678/", identifier.format("https://publons.com/researcher/A-1234-5678/")); + + } + + @Test + public void testIsValidAuthorIdentifierScopusId() { + ExternalIdentifier identifier = ExternalIdentifier.valueOf("ScopusID"); + assertTrue(identifier.isValidIdentifier("12345678")); + assertTrue(identifier.isValidIdentifier("87654321")); + assertTrue(identifier.isValidIdentifier("00000000")); + assertTrue(identifier.isValidIdentifier("https://www.scopus.com/authid/detail.uri?authorId=12345678")); + assertTrue(identifier.isValidIdentifier("https://www.scopus.com/authid/detail.uri?authorId=87654321")); + assertFalse(identifier.isValidIdentifier("A12345678")); // Contains a letter + assertFalse(identifier.isValidIdentifier("junk")); + + assertEquals("https://www.scopus.com/authid/detail.uri?authorId=12345678", identifier.format("12345678")); + assertEquals("https://www.scopus.com/authid/detail.uri?authorId=12345678", identifier.format("https://www.scopus.com/authid/detail.uri?authorId=12345678")); + + } + + @Test + public void testIsValidAuthorIdentifierDai() { + ExternalIdentifier identifier = ExternalIdentifier.valueOf("DAI"); + assertTrue(identifier.isValidIdentifier("123456789")); + assertTrue(identifier.isValidIdentifier("987654321X")); + assertTrue(identifier.isValidIdentifier("info:eu-repo/dai/nl/123456789")); + assertTrue(identifier.isValidIdentifier("info:eu-repo/dai/nl/987654321X")); + assertFalse(identifier.isValidIdentifier("12345678")); // Too short + assertFalse(identifier.isValidIdentifier("12345678901")); // Too long + assertFalse(identifier.isValidIdentifier("A23456789")); // Contains a letter + assertFalse(identifier.isValidIdentifier("junk")); + + assertEquals("info:eu-repo/dai/nl/123456789", identifier.format("123456789")); + assertEquals("info:eu-repo/dai/nl/123456789", identifier.format("info:eu-repo/dai/nl/123456789")); } } diff --git a/src/test/java/edu/harvard/iq/dataverse/pidproviders/doi/datacite/XmlMetadataTemplateTest.java b/src/test/java/edu/harvard/iq/dataverse/pidproviders/doi/datacite/XmlMetadataTemplateTest.java index ac4b86e516d..14d8dfb13a8 100644 --- a/src/test/java/edu/harvard/iq/dataverse/pidproviders/doi/datacite/XmlMetadataTemplateTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/pidproviders/doi/datacite/XmlMetadataTemplateTest.java @@ -195,10 +195,10 @@ public void testDataCiteXMLCreation() throws IOException { assertEquals("ROR", XmlPath.from(xml).getString("resource.creators.creator[2].nameIdentifier.@nameIdentifierScheme")); assertEquals("https://ror.org", XmlPath.from(xml).getString("resource.creators.creator[2].nameIdentifier.@schemeURI")); assertEquals("Qualitative Data Repository", XmlPath.from(xml).getString("resource.creators.creator[3].creatorName")); - // The nameIdentifier fields below are not populated because the full ROR URL was entered. - assertEquals("", XmlPath.from(xml).getString("resource.creators.creator[3].nameIdentifier")); - assertEquals(null, XmlPath.from(xml).getString("resource.creators.creator[3].nameIdentifier.@nameIdentifierScheme")); - assertEquals(null, XmlPath.from(xml).getString("resource.creators.creator[3].nameIdentifier.@schemeURI")); + //Test when URL form was used + assertEquals("https://ror.org/014trz974", XmlPath.from(xml).getString("resource.creators.creator[3].nameIdentifier")); + assertEquals("ROR", XmlPath.from(xml).getString("resource.creators.creator[3].nameIdentifier.@nameIdentifierScheme")); + assertEquals("https://ror.org", XmlPath.from(xml).getString("resource.creators.creator[3].nameIdentifier.@schemeURI")); assertEquals("Dataverse", XmlPath.from(xml).getString("resource.publisher")); dv.setVersionNumber(1L);