From d257906f6af29877646186235dab529a0fbd1098 Mon Sep 17 00:00:00 2001 From: helkv Date: Tue, 2 Jul 2024 15:55:12 +0200 Subject: [PATCH] #61 Fix location of prettyprint.xsl + Add some Unit Tests - Fix after v6.2 Merge: Move prettyprint.xsl to the correct folder (otherwise prettyPrintXML method doesn't work and FundingReferences are not send to Datacite) - Add some Unit Tests for DataCiteMetadataUtil --- .../{ => pidproviders/doi}/prettyprint.xsl | 0 .../doi/DataCiteMetadataUtilTest.java | 78 +++++++++++++++++++ 2 files changed, 78 insertions(+) rename src/main/resources/edu/harvard/iq/dataverse/{ => pidproviders/doi}/prettyprint.xsl (100%) create mode 100644 src/test/java/edu/harvard/iq/dataverse/pidproviders/doi/DataCiteMetadataUtilTest.java diff --git a/src/main/resources/edu/harvard/iq/dataverse/prettyprint.xsl b/src/main/resources/edu/harvard/iq/dataverse/pidproviders/doi/prettyprint.xsl similarity index 100% rename from src/main/resources/edu/harvard/iq/dataverse/prettyprint.xsl rename to src/main/resources/edu/harvard/iq/dataverse/pidproviders/doi/prettyprint.xsl diff --git a/src/test/java/edu/harvard/iq/dataverse/pidproviders/doi/DataCiteMetadataUtilTest.java b/src/test/java/edu/harvard/iq/dataverse/pidproviders/doi/DataCiteMetadataUtilTest.java new file mode 100644 index 00000000000..2561c35140c --- /dev/null +++ b/src/test/java/edu/harvard/iq/dataverse/pidproviders/doi/DataCiteMetadataUtilTest.java @@ -0,0 +1,78 @@ +package edu.harvard.iq.dataverse.pidproviders.doi; + +import org.junit.jupiter.api.Test; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class DataCiteMetadataUtilTest { + + @Test + void testParseXml() throws ParserConfigurationException, IOException, SAXException { + String testXML = this.createTestXML(); + + org.w3c.dom.Document document = XmlMetadataTemplate.DataCiteMetadataUtil.parseXml(testXML); + + assertNotNull(document); + assertEquals("UTF-8", document.getXmlEncoding()); + assertEquals("root", document.getDocumentElement().getNodeName()); + assertEquals("firstElement", document.getDocumentElement().getChildNodes().item(1).getNodeName()); + } + + @Test + void testAppendElementToDocument() throws ParserConfigurationException{ + org.w3c.dom.Document document = this.createTestDocument(); + String parentTagName = "secondElement"; + String tageName = "firstChildOfSecondElement"; + String textContent = "text of firstChildOfSecondElement"; + + XmlMetadataTemplate.DataCiteMetadataUtil.appendElementToDocument(document, parentTagName, tageName, textContent); + + assertEquals(1, document.getElementsByTagName(parentTagName).getLength()); + Node addedChildNode = document.getElementsByTagName(parentTagName).item(0).getFirstChild(); + assertEquals(tageName, addedChildNode.getNodeName()); + assertEquals(textContent, addedChildNode.getTextContent()); + } + + @Test + void testPrettyPrintXML() throws Exception { + org.w3c.dom.Document document = this.createTestDocument(); + + String xmlMetadata = XmlMetadataTemplate.DataCiteMetadataUtil.prettyPrintXML(document, 4); + + String secondLine = xmlMetadata.split(System.lineSeparator())[1]; + assertEquals("", secondLine); + String thirdLine = xmlMetadata.split(System.lineSeparator())[2]; + assertEquals(" ", thirdLine.substring(0,4)); + } + + private String createTestXML(){ + return """ + + + Text of a TestNode. + + + """; + } + + private org.w3c.dom.Document createTestDocument() throws ParserConfigurationException { + org.w3c.dom.Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); + Element rootElement = document.createElement("root"); + document.appendChild(rootElement); + Element firstElement = document.createElement("firstElement"); + rootElement.appendChild(firstElement); + firstElement.appendChild(document.createTextNode("Text of a TestNode.")); + Element secondElement = document.createElement("secondElement"); + rootElement.appendChild(secondElement); + + return document; + } + +} \ No newline at end of file