From 0c69d9f9b2006b5d83a4b61abf6d5191858d0fa5 Mon Sep 17 00:00:00 2001 From: Carsten Otto Date: Tue, 10 May 2022 19:58:17 +0200 Subject: [PATCH] allow queries for channel ID in all supported formats --- .../lndmanagej/ui/SearchControllerIT.java | 8 +++++++ .../ui/controller/SearchController.java | 23 ++++++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/web/src/integrationTest/java/de/cotto/lndmanagej/ui/SearchControllerIT.java b/web/src/integrationTest/java/de/cotto/lndmanagej/ui/SearchControllerIT.java index 18a103dc..ce169f61 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/ui/SearchControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/ui/SearchControllerIT.java @@ -19,8 +19,10 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import java.util.Arrays; import java.util.List; +import java.util.Optional; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; +import static de.cotto.lndmanagej.model.ChannelPointFixtures.CHANNEL_POINT; import static de.cotto.lndmanagej.ui.model.ChannelDetailsDtoFixture.CHANNEL_DETAILS_DTO; import static de.cotto.lndmanagej.ui.model.NodeDetailsDtoFixture.NODE_DETAILS_DTO; import static de.cotto.lndmanagej.ui.model.OpenChannelDtoFixture.OPEN_CHANNEL_DTO; @@ -68,6 +70,12 @@ class SearchControllerIT { searchForChannelId(CHANNEL_ID); } + @Test + void searchForChannelId_viaChannelPoint_found() throws Exception { + when(channelIdResolver.resolveFromChannelPoint(CHANNEL_POINT)).thenReturn(Optional.of(CHANNEL_ID)); + searchForChannelId(CHANNEL_POINT.toString()); + } + private void searchForChannelId(Object query) throws Exception { when(dataService.getOpenChannels()).thenReturn( List.of(openChannelDto(CHANNEL_DETAILS_DTO)) diff --git a/web/src/main/java/de/cotto/lndmanagej/ui/controller/SearchController.java b/web/src/main/java/de/cotto/lndmanagej/ui/controller/SearchController.java index 777e5a3c..7b877d8b 100644 --- a/web/src/main/java/de/cotto/lndmanagej/ui/controller/SearchController.java +++ b/web/src/main/java/de/cotto/lndmanagej/ui/controller/SearchController.java @@ -40,16 +40,12 @@ public class SearchController { public String search(@RequestParam("q") String query, Model model) { List openChannels = dataService.getOpenChannels(); - Optional openChannel = openChannels.stream() - .filter(channel -> String.valueOf(channel.channelId().getShortChannelId()).equals(query) - || channel.channelId().toString().equals(query)) - .findFirst(); - - if (openChannel.isPresent()) { - return detailsPage(channelIdConverter.convert(query), model); + ChannelId channelId = getForChannelId(query, openChannels).orElse(null); + if (channelId != null) { + return detailsPage(channelId, model); } - openChannel = openChannels.stream() + Optional openChannel = openChannels.stream() .filter(c -> c.remotePubkey().toString().equals(query)) .findFirst(); @@ -73,6 +69,17 @@ public class SearchController { return page.nodes(matchingChannels).create(model); } + private Optional getForChannelId(String query, List openChannels) { + ChannelId channelId = channelIdConverter.tryToConvert(query).orElse(null); + if (channelId == null) { + return Optional.empty(); + } + return openChannels.stream() + .map(OpenChannelDto::channelId) + .filter(channelId::equals) + .findFirst(); + } + private String detailsPage(ChannelId channelId, Model model) { try { return page.channelDetails(channelId).create(model);