diff --git a/model/src/main/java/de/cotto/lndmanagej/model/ClosedChannel.java b/model/src/main/java/de/cotto/lndmanagej/model/ClosedChannel.java index 34f1d2c3..8b2e64e2 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/ClosedChannel.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/ClosedChannel.java @@ -31,6 +31,11 @@ public abstract class ClosedChannel extends ClosedOrClosingChannel { return closeInitiator; } + @Override + public boolean isClosed() { + return true; + } + @Override @SuppressWarnings("CPD-START") public boolean equals(Object other) { diff --git a/model/src/main/java/de/cotto/lndmanagej/model/ForceClosingChannel.java b/model/src/main/java/de/cotto/lndmanagej/model/ForceClosingChannel.java index c9407e4e..c66faad6 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/ForceClosingChannel.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/ForceClosingChannel.java @@ -24,6 +24,11 @@ public final class ForceClosingChannel extends ClosedOrClosingChannel { return htlcOutpoints; } + @Override + public boolean isClosed() { + return true; + } + @Override @SuppressWarnings("CPD-START") public boolean equals(Object other) { diff --git a/model/src/main/java/de/cotto/lndmanagej/model/LocalChannel.java b/model/src/main/java/de/cotto/lndmanagej/model/LocalChannel.java index 9c8cd48e..149ddcda 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/LocalChannel.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/LocalChannel.java @@ -38,6 +38,10 @@ public class LocalChannel extends Channel { return false; } + public boolean isClosed() { + return false; + } + @Override @SuppressWarnings("CPD-START") public boolean equals(Object other) { diff --git a/model/src/test/java/de/cotto/lndmanagej/model/BreachForceClosedChannelTest.java b/model/src/test/java/de/cotto/lndmanagej/model/BreachForceClosedChannelTest.java index f30bd65f..c1fa0908 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/BreachForceClosedChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/BreachForceClosedChannelTest.java @@ -67,6 +67,11 @@ class BreachForceClosedChannelTest { assertThat(FORCE_CLOSED_CHANNEL_BREACH.getCloseInitiator()).isEqualTo(CloseInitiator.REMOTE); } + @Test + void isClosed() { + assertThat(FORCE_CLOSED_CHANNEL_BREACH.isClosed()).isTrue(); + } + @Test void testEquals() { EqualsVerifier.forClass(BreachForceClosedChannel.class).usingGetClass().verify(); diff --git a/model/src/test/java/de/cotto/lndmanagej/model/CoopClosedChannelTest.java b/model/src/test/java/de/cotto/lndmanagej/model/CoopClosedChannelTest.java index 96a8cb6e..68a69229 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/CoopClosedChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/CoopClosedChannelTest.java @@ -70,6 +70,11 @@ class CoopClosedChannelTest { assertThat(CLOSED_CHANNEL.getCloseInitiator()).isEqualTo(CloseInitiator.REMOTE); } + @Test + void isClosed() { + assertThat(CLOSED_CHANNEL.isClosed()).isTrue(); + } + @Test void testEquals() { EqualsVerifier.forClass(CoopClosedChannel.class).usingGetClass().verify(); diff --git a/model/src/test/java/de/cotto/lndmanagej/model/ForceClosedChannelTest.java b/model/src/test/java/de/cotto/lndmanagej/model/ForceClosedChannelTest.java index 07a3aded..1c7744af 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/ForceClosedChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/ForceClosedChannelTest.java @@ -69,6 +69,11 @@ class ForceClosedChannelTest { assertThat(FORCE_CLOSED_CHANNEL_REMOTE.getCloseInitiator()).isEqualTo(CloseInitiator.REMOTE); } + @Test + void isClosed() { + assertThat(FORCE_CLOSED_CHANNEL_REMOTE.isClosed()).isTrue(); + } + @Test void testEquals() { EqualsVerifier.forClass(ForceClosedChannel.class).usingGetClass().verify(); diff --git a/model/src/test/java/de/cotto/lndmanagej/model/ForceClosingChannelTest.java b/model/src/test/java/de/cotto/lndmanagej/model/ForceClosingChannelTest.java index 1b0acf25..fe33a63c 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/ForceClosingChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/ForceClosingChannelTest.java @@ -59,6 +59,11 @@ class ForceClosingChannelTest { assertThat(FORCE_CLOSING_CHANNEL.getHtlcOutpoints()).isEqualTo(HTLC_OUTPOINTS); } + @Test + void isClosed() { + assertThat(FORCE_CLOSING_CHANNEL.isClosed()).isTrue(); + } + @Test void testEquals() { EqualsVerifier.forClass(ForceClosingChannel.class).usingGetClass().verify(); diff --git a/model/src/test/java/de/cotto/lndmanagej/model/LocalOpenChannelTest.java b/model/src/test/java/de/cotto/lndmanagej/model/LocalOpenChannelTest.java index eb08472e..36b1291d 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/LocalOpenChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/LocalOpenChannelTest.java @@ -71,6 +71,11 @@ class LocalOpenChannelTest { assertThat(LOCAL_OPEN_CHANNEL.isPrivateChannel()).isFalse(); } + @Test + void isClosed() { + assertThat(LOCAL_OPEN_CHANNEL.isClosed()).isFalse(); + } + @Test void isPrivateChannel_true() { assertThat(LOCAL_OPEN_CHANNEL_PRIVATE.isPrivateChannel()).isTrue(); diff --git a/model/src/test/java/de/cotto/lndmanagej/model/WaitingCloseChannelTest.java b/model/src/test/java/de/cotto/lndmanagej/model/WaitingCloseChannelTest.java index ba016f51..eb700182 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/WaitingCloseChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/WaitingCloseChannelTest.java @@ -48,6 +48,11 @@ class WaitingCloseChannelTest { assertThat(WAITING_CLOSE_CHANNEL.isActive()).isFalse(); } + @Test + void isClosed() { + assertThat(WAITING_CLOSE_CHANNEL.isClosed()).isFalse(); + } + @Test void testEquals() { EqualsVerifier.forClass(WaitingCloseChannel.class).usingGetClass().verify(); diff --git a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelDetailsControllerIT.java b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelDetailsControllerIT.java index ba62a6e2..177ad90b 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelDetailsControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelDetailsControllerIT.java @@ -74,6 +74,7 @@ class ChannelDetailsControllerIT { .andExpect(jsonPath("$.openHeight", is(CHANNEL_ID.getBlockHeight()))) .andExpect(jsonPath("$.private", is(true))) .andExpect(jsonPath("$.active", is(true))) + .andExpect(jsonPath("$.closed", is(false))) .andExpect(jsonPath("$.onChainCosts.openCosts", is("1000"))) .andExpect(jsonPath("$.onChainCosts.closeCosts", is("2000"))) .andExpect(jsonPath("$.balance.localBalance", is("2000"))) diff --git a/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDto.java b/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDto.java index cac296c5..485108a3 100644 --- a/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDto.java +++ b/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDto.java @@ -17,6 +17,7 @@ public record ChannelDetailsDto( String capacity, @JsonProperty("private") boolean privateChannel, boolean active, + boolean closed, BalanceInformationDto balance, OnChainCostsDto onChainCosts ) { @@ -37,6 +38,7 @@ public record ChannelDetailsDto( String.valueOf(localChannel.getCapacity().satoshis()), localChannel.isPrivateChannel(), localChannel.isActive(), + localChannel.isClosed(), BalanceInformationDto.createFrom(balanceInformation), onChainCosts ); diff --git a/web/src/test/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDtoTest.java b/web/src/test/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDtoTest.java index aefb8cdf..37d92409 100644 --- a/web/src/test/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDtoTest.java +++ b/web/src/test/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDtoTest.java @@ -84,6 +84,18 @@ class ChannelDetailsDtoTest { assertThat(CHANNEL_DETAILS_DTO.active()).isFalse(); } + @Test + void closed_true() { + assertThat(CHANNEL_DETAILS_DTO.closed()).isTrue(); + } + + @Test + void closed_false() { + ChannelDetailsDto dto = + new ChannelDetailsDto(LOCAL_OPEN_CHANNEL, ALIAS, BALANCE_INFORMATION, ON_CHAIN_COSTS); + assertThat(dto.closed()).isFalse(); + } + @Test void balance() { assertThat(CHANNEL_DETAILS_DTO.balance()).isEqualTo(BalanceInformationDto.createFrom(BALANCE_INFORMATION));