From da9518d71187ec731e02c709b6111e2659e995ca Mon Sep 17 00:00:00 2001 From: Carsten Otto Date: Wed, 24 Nov 2021 12:59:04 +0100 Subject: [PATCH] add /balance endpoint for channels --- .../controller/ChannelControllerIT.java | 12 ++++++++++++ .../controller/ChannelController.java | 9 +++++++++ .../controller/ChannelControllerTest.java | 18 ++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelControllerIT.java b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelControllerIT.java index 28a3d633..804a51b6 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelControllerIT.java @@ -104,6 +104,18 @@ class ChannelControllerIT { .andExpect(status().isNotFound()); } + @Test + void getBalance() throws Exception { + when(balanceService.getBalanceInformation(CHANNEL_ID)).thenReturn(Optional.of(BALANCE_INFORMATION_2)); + mockMvc.perform(get(CHANNEL_PREFIX + "/balance")) + .andExpect(jsonPath("$.localBalance", is("2000"))) + .andExpect(jsonPath("$.localReserve", is("200"))) + .andExpect(jsonPath("$.localAvailable", is("1800"))) + .andExpect(jsonPath("$.remoteBalance", is("223"))) + .andExpect(jsonPath("$.remoteReserve", is("20"))) + .andExpect(jsonPath("$.remoteAvailable", is("203"))); + } + @Test void getFeeConfiguration() throws Exception { when(channelService.getLocalChannel(CHANNEL_ID)).thenReturn(Optional.of(LOCAL_OPEN_CHANNEL)); diff --git a/web/src/main/java/de/cotto/lndmanagej/controller/ChannelController.java b/web/src/main/java/de/cotto/lndmanagej/controller/ChannelController.java index 343bd189..800549d8 100644 --- a/web/src/main/java/de/cotto/lndmanagej/controller/ChannelController.java +++ b/web/src/main/java/de/cotto/lndmanagej/controller/ChannelController.java @@ -1,6 +1,7 @@ package de.cotto.lndmanagej.controller; import com.codahale.metrics.MetricRegistry; +import de.cotto.lndmanagej.controller.dto.BalanceInformationDto; import de.cotto.lndmanagej.controller.dto.ChannelDetailsDto; import de.cotto.lndmanagej.controller.dto.FeeConfigurationDto; import de.cotto.lndmanagej.controller.dto.ObjectMapperConfiguration; @@ -71,6 +72,14 @@ public class ChannelController { ); } + @GetMapping("/balance") + public BalanceInformationDto getBalance(@PathVariable ChannelId channelId) { + metrics.mark(MetricRegistry.name(getClass(), "getBalance")); + BalanceInformation balanceInformation = balanceService.getBalanceInformation(channelId) + .orElse(BalanceInformation.EMPTY); + return BalanceInformationDto.createFrom(balanceInformation); + } + @GetMapping("/fee-configuration") public FeeConfigurationDto getFeeConfiguration(@PathVariable ChannelId channelId) { metrics.mark(MetricRegistry.name(getClass(), "getFeeConfiguration")); diff --git a/web/src/test/java/de/cotto/lndmanagej/controller/ChannelControllerTest.java b/web/src/test/java/de/cotto/lndmanagej/controller/ChannelControllerTest.java index 2eb8e62e..5921f6f8 100644 --- a/web/src/test/java/de/cotto/lndmanagej/controller/ChannelControllerTest.java +++ b/web/src/test/java/de/cotto/lndmanagej/controller/ChannelControllerTest.java @@ -1,5 +1,6 @@ package de.cotto.lndmanagej.controller; +import de.cotto.lndmanagej.controller.dto.BalanceInformationDto; import de.cotto.lndmanagej.controller.dto.ChannelDetailsDto; import de.cotto.lndmanagej.controller.dto.FeeConfigurationDto; import de.cotto.lndmanagej.controller.dto.OnChainCostsDto; @@ -21,6 +22,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import java.util.Optional; +import static de.cotto.lndmanagej.model.BalanceInformationFixtures.BALANCE_INFORMATION; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.CoopClosedChannelFixtures.CLOSED_CHANNEL; import static de.cotto.lndmanagej.model.FeeConfigurationFixtures.FEE_CONFIGURATION; @@ -124,6 +126,22 @@ class ChannelControllerTest { assertThat(channelController.getDetails(CHANNEL_ID)).isEqualTo(expectedDetails); } + @Test + void getBalance() { + when(balanceService.getBalanceInformation(CHANNEL_ID)).thenReturn(Optional.of(BALANCE_INFORMATION)); + assertThat(channelController.getBalance(CHANNEL_ID)) + .isEqualTo(BalanceInformationDto.createFrom(BALANCE_INFORMATION)); + verify(metrics).mark(argThat(name -> name.endsWith(".getBalance"))); + } + + @Test + void getBalance_not_found() { + when(balanceService.getBalanceInformation(CHANNEL_ID)).thenReturn(Optional.empty()); + assertThat(channelController.getBalance(CHANNEL_ID)) + .isEqualTo(BalanceInformationDto.createFrom(BalanceInformation.EMPTY)); + verify(metrics).mark(argThat(name -> name.endsWith(".getBalance"))); + } + @Test void getFeeConfiguration() { when(channelService.getLocalChannel(CHANNEL_ID)).thenReturn(Optional.of(LOCAL_OPEN_CHANNEL));