This is an automated email from the ASF dual-hosted git repository.
hansva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git
The following commit(s) were added to refs/heads/main by this push:
new cc7869d0d8 move jdbcMetadata package and add tests, fixes #7175 (#7178)
cc7869d0d8 is described below
commit cc7869d0d8326b5c8659ea468740f26f84b18961
Author: Hans Van Akelyen <[email protected]>
AuthorDate: Tue May 26 13:17:22 2026 +0200
move jdbcMetadata package and add tests, fixes #7175 (#7178)
---
.../transforms}/jdbcmetadata/JdbcMetadata.java | 2 +-
.../transforms}/jdbcmetadata/JdbcMetadataData.java | 2 +-
.../jdbcmetadata/JdbcMetadataDialog.java | 2 +-
.../transforms}/jdbcmetadata/JdbcMetadataMeta.java | 2 +-
.../transforms}/jdbcmetadata/OutputField.java | 2 +-
.../messages/messages_de_DE.properties | 0
.../messages/messages_en_US.properties | 0
.../messages/messages_es_AR.properties | 0
.../messages/messages_es_ES.properties | 0
.../messages/messages_fr_FR.properties | 0
.../messages/messages_it_IT.properties | 0
.../messages/messages_ja_JP.properties | 0
.../messages/messages_ko_KR.properties | 0
.../messages/messages_nl_NL.properties | 0
.../messages/messages_no_NO.properties | 0
.../messages/messages_pl_PL.properties | 0
.../messages/messages_pt_BR.properties | 0
.../messages/messages_pt_PT.properties | 0
.../messages/messages_zh_CN.properties | 0
.../jdbcmetadata/JdbcMetadataMetaTest.java | 140 +++++++++++++++++++++
.../transforms/jdbcmetadata/OutputFieldTest.java | 48 +++++++
21 files changed, 193 insertions(+), 5 deletions(-)
diff --git
a/plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/JdbcMetadata.java
b/plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadata.java
similarity index 99%
rename from
plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/JdbcMetadata.java
rename to
plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadata.java
index 1381e9838c..440947656c 100644
---
a/plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/JdbcMetadata.java
+++
b/plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadata.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.pipeline.transform.jdbcmetadata;
+package org.apache.hop.pipeline.transforms.jdbcmetadata;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
diff --git
a/plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/JdbcMetadataData.java
b/plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadataData.java
similarity index 97%
rename from
plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/JdbcMetadataData.java
rename to
plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadataData.java
index 69e23e3a92..812bac4032 100644
---
a/plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/JdbcMetadataData.java
+++
b/plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadataData.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.pipeline.transform.jdbcmetadata;
+package org.apache.hop.pipeline.transforms.jdbcmetadata;
import java.lang.reflect.Method;
import java.sql.Connection;
diff --git
a/plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/JdbcMetadataDialog.java
b/plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadataDialog.java
similarity index 99%
rename from
plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/JdbcMetadataDialog.java
rename to
plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadataDialog.java
index eed3b30414..ecbe066839 100644
---
a/plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/JdbcMetadataDialog.java
+++
b/plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadataDialog.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.pipeline.transform.jdbcmetadata;
+package org.apache.hop.pipeline.transforms.jdbcmetadata;
import java.util.ArrayList;
import java.util.List;
diff --git
a/plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/JdbcMetadataMeta.java
b/plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadataMeta.java
similarity index 99%
rename from
plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/JdbcMetadataMeta.java
rename to
plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadataMeta.java
index 517dfc0e5b..4922536504 100644
---
a/plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/JdbcMetadataMeta.java
+++
b/plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadataMeta.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.pipeline.transform.jdbcmetadata;
+package org.apache.hop.pipeline.transforms.jdbcmetadata;
import java.lang.reflect.Method;
import java.sql.DatabaseMetaData;
diff --git
a/plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/OutputField.java
b/plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/OutputField.java
similarity index 95%
rename from
plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/OutputField.java
rename to
plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/OutputField.java
index 8ad02c0490..2a4a82527d 100644
---
a/plugins/transforms/jdbc-metadata/src/main/java/org/apache/pipeline/transform/jdbcmetadata/OutputField.java
+++
b/plugins/transforms/jdbc-metadata/src/main/java/org/apache/hop/pipeline/transforms/jdbcmetadata/OutputField.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.pipeline.transform.jdbcmetadata;
+package org.apache.hop.pipeline.transforms.jdbcmetadata;
import org.apache.hop.metadata.api.HopMetadataProperty;
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_de_DE.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_de_DE.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_de_DE.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_de_DE.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_en_US.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_en_US.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_en_US.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_en_US.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_es_AR.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_es_AR.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_es_AR.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_es_AR.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_es_ES.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_es_ES.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_es_ES.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_es_ES.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_fr_FR.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_fr_FR.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_fr_FR.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_fr_FR.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_it_IT.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_it_IT.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_it_IT.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_it_IT.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_ja_JP.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_ja_JP.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_ja_JP.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_ja_JP.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_ko_KR.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_ko_KR.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_ko_KR.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_ko_KR.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_nl_NL.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_nl_NL.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_nl_NL.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_nl_NL.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_no_NO.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_no_NO.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_no_NO.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_no_NO.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_pl_PL.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_pl_PL.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_pl_PL.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_pl_PL.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_pt_BR.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_pt_BR.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_pt_BR.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_pt_BR.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_pt_PT.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_pt_PT.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_pt_PT.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_pt_PT.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_zh_CN.properties
b/plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_zh_CN.properties
similarity index 100%
rename from
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/pipeline/transform/jdbcmetadata/messages/messages_zh_CN.properties
rename to
plugins/transforms/jdbc-metadata/src/main/resources/org/apache/hop/pipeline/transforms/jdbcmetadata/messages/messages_zh_CN.properties
diff --git
a/plugins/transforms/jdbc-metadata/src/test/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadataMetaTest.java
b/plugins/transforms/jdbc-metadata/src/test/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadataMetaTest.java
new file mode 100644
index 0000000000..3b855a0c24
--- /dev/null
+++
b/plugins/transforms/jdbc-metadata/src/test/java/org/apache/hop/pipeline/transforms/jdbcmetadata/JdbcMetadataMetaTest.java
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hop.pipeline.transforms.jdbcmetadata;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.apache.hop.core.HopClientEnvironment;
+import org.apache.hop.core.xml.XmlHandler;
+import org.apache.hop.metadata.serializer.memory.MemoryMetadataProvider;
+import org.apache.hop.metadata.serializer.xml.XmlMetadataUtil;
+import org.apache.hop.pipeline.transform.TransformMeta;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Behaviour tests for {@link JdbcMetadataMeta}. The XML round-trip in
particular catches the common
+ * class of regression where a {@code @HopMetadataProperty} field is removed,
renamed, or its
+ * key/groupKey changed - any of which would silently drop data from existing
pipelines.
+ */
+class JdbcMetadataMetaTest {
+
+ @BeforeAll
+ static void setUp() throws Exception {
+ HopClientEnvironment.init();
+ }
+
+ @Test
+ void setDefaultPopulatesGetCatalogsAndOneOutputField() {
+ JdbcMetadataMeta meta = new JdbcMetadataMeta();
+ meta.setDefault();
+
+ assertEquals("getCatalogs", meta.getMethodName());
+ assertFalse(meta.isArgumentSourceFields());
+ assertNotNull(meta.getOutputFields());
+ assertEquals(1, meta.getOutputFields().size());
+ OutputField field = meta.getOutputFields().get(0);
+ assertEquals("TABLE_CAT", field.getName());
+ assertEquals("TABLE_CAT", field.getRename());
+ }
+
+ /**
+ * Configure every {@code @HopMetadataProperty} field, serialize to XML,
deserialize into a fresh
+ * instance and assert every value survived. If a property loses its
annotation or its
+ * key/groupKey is renamed, this test fails.
+ */
+ @Test
+ void xmlRoundTripPreservesAllProperties() throws Exception {
+ JdbcMetadataMeta original = new JdbcMetadataMeta();
+ original.setConnection("my-jdbc-connection");
+ original.setAlwaysPassInputRow(true);
+ original.setMethodName("getTables");
+ original.setArgumentSourceFields(true);
+ original.setRemoveArgumentFields(true);
+ original.setArguments(new ArrayList<>(Arrays.asList("catalogArg",
"schemaArg", "tableArg")));
+
+ List<OutputField> outputFields = new ArrayList<>();
+ outputFields.add(new OutputField("TABLE_NAME", "tableName"));
+ outputFields.add(new OutputField("REMARKS", "comment"));
+ original.setOutputFields(outputFields);
+
+ JdbcMetadataMeta copy = serializeAndDeserialize(original);
+
+ assertEquals(original.getConnection(), copy.getConnection());
+ assertEquals(original.isAlwaysPassInputRow(), copy.isAlwaysPassInputRow());
+ assertEquals(original.getMethodName(), copy.getMethodName());
+ assertEquals(original.isArgumentSourceFields(),
copy.isArgumentSourceFields());
+ assertEquals(original.isRemoveArgumentFields(),
copy.isRemoveArgumentFields());
+ assertEquals(original.getArguments(), copy.getArguments());
+
+ assertNotNull(copy.getOutputFields());
+ assertEquals(2, copy.getOutputFields().size());
+ assertEquals("TABLE_NAME", copy.getOutputFields().get(0).getName());
+ assertEquals("tableName", copy.getOutputFields().get(0).getRename());
+ assertEquals("REMARKS", copy.getOutputFields().get(1).getName());
+ assertEquals("comment", copy.getOutputFields().get(1).getRename());
+ }
+
+ /** A default-only Meta must round-trip without losing or fabricating data.
*/
+ @Test
+ void xmlRoundTripWithDefaultsIsIdempotent() throws Exception {
+ JdbcMetadataMeta original = new JdbcMetadataMeta();
+ original.setDefault();
+
+ JdbcMetadataMeta copy = serializeAndDeserialize(original);
+
+ assertEquals(original.getMethodName(), copy.getMethodName());
+ assertEquals(original.isArgumentSourceFields(),
copy.isArgumentSourceFields());
+ assertNotNull(copy.getOutputFields());
+ assertEquals(original.getOutputFields().size(),
copy.getOutputFields().size());
+ assertEquals(
+ original.getOutputFields().get(0).getName(),
copy.getOutputFields().get(0).getName());
+ }
+
+ @Test
+ void argumentsListRoundTripsEmpty() throws Exception {
+ JdbcMetadataMeta original = new JdbcMetadataMeta();
+ original.setMethodName("getCatalogs");
+ original.setArguments(new ArrayList<>());
+
+ JdbcMetadataMeta copy = serializeAndDeserialize(original);
+
+ assertNotNull(copy.getArguments());
+ assertTrue(copy.getArguments().isEmpty());
+ }
+
+ private static JdbcMetadataMeta serializeAndDeserialize(JdbcMetadataMeta
source)
+ throws Exception {
+ String xml =
+ XmlHandler.openTag(TransformMeta.XML_TAG)
+ + XmlMetadataUtil.serializeObjectToXml(source)
+ + XmlHandler.closeTag(TransformMeta.XML_TAG);
+ JdbcMetadataMeta copy = new JdbcMetadataMeta();
+ XmlMetadataUtil.deSerializeFromXml(
+ XmlHandler.loadXmlString(xml, TransformMeta.XML_TAG),
+ JdbcMetadataMeta.class,
+ copy,
+ new MemoryMetadataProvider());
+ return copy;
+ }
+}
diff --git
a/plugins/transforms/jdbc-metadata/src/test/java/org/apache/hop/pipeline/transforms/jdbcmetadata/OutputFieldTest.java
b/plugins/transforms/jdbc-metadata/src/test/java/org/apache/hop/pipeline/transforms/jdbcmetadata/OutputFieldTest.java
new file mode 100644
index 0000000000..b6072018a6
--- /dev/null
+++
b/plugins/transforms/jdbc-metadata/src/test/java/org/apache/hop/pipeline/transforms/jdbcmetadata/OutputFieldTest.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hop.pipeline.transforms.jdbcmetadata;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+import org.junit.jupiter.api.Test;
+
+class OutputFieldTest {
+
+ @Test
+ void noArgConstructorLeavesFieldsNull() {
+ OutputField field = new OutputField();
+ assertNull(field.getName());
+ assertNull(field.getRename());
+ }
+
+ @Test
+ void valueConstructorAssignsBothFields() {
+ OutputField field = new OutputField("TABLE_NAME", "table");
+ assertEquals("TABLE_NAME", field.getName());
+ assertEquals("table", field.getRename());
+ }
+
+ @Test
+ void settersUpdateFields() {
+ OutputField field = new OutputField();
+ field.setName("COLUMN_NAME");
+ field.setRename("col");
+ assertEquals("COLUMN_NAME", field.getName());
+ assertEquals("col", field.getRename());
+ }
+}