From 5f9a0971b2586a824683cbdd246bd7832ccb23d5 Mon Sep 17 00:00:00 2001 From: TobiasNx Date: Fri, 25 Apr 2025 12:26:41 +0200 Subject: [PATCH 1/4] Enforce unique result #686 --- .../main/java/org/metafacture/metafix/FindFixPaths.java | 9 ++++++++- .../java/org/metafacture/metafix/FindFixPathsTest.java | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/metafix/src/main/java/org/metafacture/metafix/FindFixPaths.java b/metafix/src/main/java/org/metafacture/metafix/FindFixPaths.java index d0e5d222f..7f5708798 100644 --- a/metafix/src/main/java/org/metafacture/metafix/FindFixPaths.java +++ b/metafix/src/main/java/org/metafacture/metafix/FindFixPaths.java @@ -25,9 +25,12 @@ import org.metafacture.framework.annotations.In; import org.metafacture.framework.annotations.Out; import org.metafacture.framework.helpers.DefaultStreamPipe; +import org.metafacture.mangling.DuplicateObjectFilter; import org.metafacture.mangling.StreamFlattener; +import org.metafacture.triples.AbstractTripleSort.Compare; import org.metafacture.triples.StreamToTriples; import org.metafacture.triples.TripleFilter; +import org.metafacture.triples.TripleSort; import java.io.IOException; @@ -37,7 +40,7 @@ * * @author Tobias Bülte */ -@Description("Finds all paths that have values that match the given pattern. Allows for regex. These paths can be used in a Fix to address fields.") +@Description("Finds all paths that have values that match the given pattern. Allows for regex. These paths can be used in a Fix to address fields.") // checkstyle-disable-line ClassDataAbstractionCoupling @In(StreamReceiver.class) @Out(String.class) @FluxCommand("find-fix-paths") @@ -67,11 +70,15 @@ public FindFixPaths(final String objectPattern) { protected void onSetReceiver() { final TripleFilter tripleFilter = new TripleFilter(); tripleFilter.setObjectPattern(objectPattern); + final TripleSort tripleSort = new TripleSort(); + tripleSort.setBy(Compare.PREDICATE); fix .setReceiver(new StreamFlattener()) .setReceiver(new StreamToTriples()) .setReceiver(tripleFilter) + .setReceiver(tripleSort) .setReceiver(new ObjectTemplate<>("${p}\t|\t${o}")) + .setReceiver(new DuplicateObjectFilter<>()) .setReceiver(getReceiver()); } diff --git a/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java b/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java index 2a871cae2..6e6eab7dd 100644 --- a/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java +++ b/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java @@ -46,7 +46,7 @@ public FindFixPathsTest() { @Test public void testShouldFindPaths() { verify( - "a\t|\tAn ETL test", + "a.1\t|\tAn ETL test", "c.2\t|\tETL what?"); } @@ -59,6 +59,7 @@ private void processRecord() { finder.literal("b", "Dog"); finder.literal("c", ""); finder.literal("c", "ETL what?"); + finder.literal("a", "An ETL test"); finder.endRecord(); finder.closeStream(); } @@ -72,7 +73,6 @@ private void verify(final String... result) throws MockitoAssertionError { } ordered.verify(receiver, Mockito.times(2)).closeStream(); ordered.verifyNoMoreInteractions(); - Mockito.verifyNoMoreInteractions(receiver); } catch (final MockitoAssertionError e) { System.out.println(Mockito.mockingDetails(receiver).printInvocations()); From 6a4f54887a834528d066412f5fe303a1d7d5e6ab Mon Sep 17 00:00:00 2001 From: TobiasNx Date: Fri, 20 Jun 2025 16:30:33 +0200 Subject: [PATCH 2/4] Adjust tests to check duplicate elements/values in multiple records #686 --- .../org/metafacture/metafix/FindFixPathsTest.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java b/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java index 6e6eab7dd..fdad33ec1 100644 --- a/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java +++ b/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java @@ -46,20 +46,27 @@ public FindFixPathsTest() { @Test public void testShouldFindPaths() { verify( - "a.1\t|\tAn ETL test", + "a\t|\tAn ETL test", "c.2\t|\tETL what?"); } private void processRecord() { finder.setReceiver(receiver); - finder.startRecord(""); + finder.startRecord("1"); finder.literal("a", "An ETL test"); finder.literal("b", ""); finder.literal("b", "Dummi"); finder.literal("b", "Dog"); finder.literal("c", ""); finder.literal("c", "ETL what?"); - finder.literal("a", "An ETL test"); + finder.endRecord(); + finder.startRecord("2"); + finder.literal("a", "An another test"); + finder.literal("b", ""); + finder.literal("b", "Dummi"); + finder.literal("b", "Dog"); + finder.literal("c", ""); + finder.literal("c", "ETL what?"); finder.endRecord(); finder.closeStream(); } From 67a7e6eac79f06177a13645f290387995cc84104 Mon Sep 17 00:00:00 2001 From: Fabian Steeg Date: Mon, 14 Jul 2025 12:29:30 +0200 Subject: [PATCH 3/4] Restore `Mockito.verifyNoMoreInteractions(receiver)` test (#687) --- .../src/test/java/org/metafacture/metafix/FindFixPathsTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java b/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java index fdad33ec1..d81a6f4de 100644 --- a/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java +++ b/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java @@ -80,6 +80,7 @@ private void verify(final String... result) throws MockitoAssertionError { } ordered.verify(receiver, Mockito.times(2)).closeStream(); ordered.verifyNoMoreInteractions(); + Mockito.verifyNoMoreInteractions(receiver); } catch (final MockitoAssertionError e) { System.out.println(Mockito.mockingDetails(receiver).printInvocations()); From f5b49fb24e0b7881725626dcf1ef8206be920664 Mon Sep 17 00:00:00 2001 From: Fabian Steeg Date: Mon, 14 Jul 2025 13:46:28 +0200 Subject: [PATCH 4/4] Tweak test to actually require added `TripleSort` to pass (#686) Duplicate field was consecutive by coincidence, since all fields in between were filtered. With added result field we need to sort. --- .../test/java/org/metafacture/metafix/FindFixPathsTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java b/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java index d81a6f4de..b3c2335cd 100644 --- a/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java +++ b/metafix/src/test/java/org/metafacture/metafix/FindFixPathsTest.java @@ -47,6 +47,7 @@ public FindFixPathsTest() { public void testShouldFindPaths() { verify( "a\t|\tAn ETL test", + "a\t|\tAnother ETL test", "c.2\t|\tETL what?"); } @@ -61,7 +62,7 @@ private void processRecord() { finder.literal("c", "ETL what?"); finder.endRecord(); finder.startRecord("2"); - finder.literal("a", "An another test"); + finder.literal("a", "Another ETL test"); finder.literal("b", ""); finder.literal("b", "Dummi"); finder.literal("b", "Dog");