From 6b5fab7e95c082d2aac6b620837745374fb07e84 Mon Sep 17 00:00:00 2001 From: Eric T Date: Tue, 29 Jul 2025 19:07:54 +0100 Subject: [PATCH] Refactor FiltersDecoder and add mixed type test --- .../event/json/codec/FiltersDecoder.java | 18 +++++++++++++----- .../nostr/event/unit/FiltersDecoderTest.java | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/nostr-java-event/src/main/java/nostr/event/json/codec/FiltersDecoder.java b/nostr-java-event/src/main/java/nostr/event/json/codec/FiltersDecoder.java index bffc41cb2..51b9ee9ec 100644 --- a/nostr-java-event/src/main/java/nostr/event/json/codec/FiltersDecoder.java +++ b/nostr-java-event/src/main/java/nostr/event/json/codec/FiltersDecoder.java @@ -1,5 +1,7 @@ package nostr.event.json.codec; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; import lombok.NonNull; import lombok.SneakyThrows; @@ -8,6 +10,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; import static nostr.base.IEvent.MAPPER_AFTERBURNER; @@ -21,11 +24,16 @@ public class FiltersDecoder implements FDecoder { public Filters decode(@NonNull String jsonFiltersList) { final List filterables = new ArrayList<>(); - MAPPER_AFTERBURNER.readTree(jsonFiltersList).fields().forEachRemaining(node -> - filterables.addAll( - FilterableProvider.getFilterFunction( - node.getValue(), - node.getKey()))); + Map filtersMap = MAPPER_AFTERBURNER.readValue( + jsonFiltersList, + new TypeReference>() {}); + + for (Map.Entry entry : filtersMap.entrySet()) { + filterables.addAll( + FilterableProvider.getFilterFunction( + entry.getValue(), + entry.getKey())); + } return new Filters(filterables); } diff --git a/nostr-java-event/src/test/java/nostr/event/unit/FiltersDecoderTest.java b/nostr-java-event/src/test/java/nostr/event/unit/FiltersDecoderTest.java index e8762c17b..72055128d 100644 --- a/nostr-java-event/src/test/java/nostr/event/unit/FiltersDecoderTest.java +++ b/nostr-java-event/src/test/java/nostr/event/unit/FiltersDecoderTest.java @@ -375,6 +375,25 @@ public void testUntilFiltersDecoder() { assertEquals(new Filters(new UntilFilter(until)), decodedFilters); } + @Test + public void testDecoderMultipleFilterTypes() { + log.info("testDecoderMultipleFilterTypes"); + + String eventId = "f1b419a95cb0233a11d431423b41a42734e7165fcab16081cd08ef1c90e0be75"; + Kind kind = Kind.valueOf(1); + Long since = Date.from(Instant.now()).getTime(); + + String expected = "{\"ids\":[\"" + eventId + "\"],\"kinds\":[" + kind.toString() + "],\"since\":" + since + "}"; + Filters decodedFilters = new FiltersDecoder().decode(expected); + + assertEquals( + new Filters( + new EventFilter<>(new GenericEvent(eventId)), + new KindFilter<>(kind), + new SinceFilter(since)), + decodedFilters); + } + @Test public void testFailedAddressableTagMalformedSeparator() { log.info("testFailedAddressableTagMalformedSeparator");