From aefcb3c200b773ab45feb5858dc98c7ac552b2de Mon Sep 17 00:00:00 2001 From: Carsten Otto Date: Wed, 24 Nov 2021 09:21:54 +0100 Subject: [PATCH] add open/closed/pending/... state, group channel status --- .../cotto/lndmanagej/model/ChannelStatus.java | 9 +++++ .../cotto/lndmanagej/model/ClosedChannel.java | 6 ++- .../model/ClosedOrClosingChannel.java | 2 +- .../lndmanagej/model/ForceClosingChannel.java | 7 ++++ .../cotto/lndmanagej/model/LocalChannel.java | 12 ++---- .../lndmanagej/model/LocalOpenChannel.java | 4 +- .../lndmanagej/model/OpenCloseStatus.java | 5 +++ .../lndmanagej/model/WaitingCloseChannel.java | 7 ++++ .../model/BreachForceClosedChannelTest.java | 6 ++- .../lndmanagej/model/ChannelStatusTest.java | 30 +++++++++++++++ .../model/CoopClosedChannelTest.java | 6 ++- .../model/ForceClosedChannelTest.java | 6 ++- .../model/ForceClosingChannelTest.java | 7 ++-- .../model/LocalOpenChannelTest.java | 21 +++++----- .../lndmanagej/model/OpenCloseStatusTest.java | 20 ++++++++++ .../model/WaitingCloseChannelTest.java | 11 ++---- .../ChannelDetailsControllerIT.java | 7 ++-- .../controller/dto/ChannelDetailsDto.java | 9 +---- .../controller/dto/ChannelStatusDto.java | 20 ++++++++++ .../controller/dto/ChannelDetailsDtoTest.java | 38 +++---------------- .../controller/dto/ChannelStatusDtoTest.java | 18 +++++++++ 21 files changed, 168 insertions(+), 83 deletions(-) create mode 100644 model/src/main/java/de/cotto/lndmanagej/model/ChannelStatus.java create mode 100644 model/src/main/java/de/cotto/lndmanagej/model/OpenCloseStatus.java create mode 100644 model/src/test/java/de/cotto/lndmanagej/model/ChannelStatusTest.java create mode 100644 model/src/test/java/de/cotto/lndmanagej/model/OpenCloseStatusTest.java create mode 100644 web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelStatusDto.java create mode 100644 web/src/test/java/de/cotto/lndmanagej/controller/dto/ChannelStatusDtoTest.java diff --git a/model/src/main/java/de/cotto/lndmanagej/model/ChannelStatus.java b/model/src/main/java/de/cotto/lndmanagej/model/ChannelStatus.java new file mode 100644 index 00000000..7051359b --- /dev/null +++ b/model/src/main/java/de/cotto/lndmanagej/model/ChannelStatus.java @@ -0,0 +1,9 @@ +package de.cotto.lndmanagej.model; + +public record ChannelStatus( + boolean privateChannel, + boolean active, + boolean closed, + OpenCloseStatus openCloseStatus +) { +} 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 8b2e64e2..f61a97c8 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/ClosedChannel.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/ClosedChannel.java @@ -2,6 +2,8 @@ package de.cotto.lndmanagej.model; import java.util.Objects; +import static de.cotto.lndmanagej.model.OpenCloseStatus.CLOSED; + public abstract class ClosedChannel extends ClosedOrClosingChannel { private final CloseInitiator closeInitiator; @@ -32,8 +34,8 @@ public abstract class ClosedChannel extends ClosedOrClosingChannel { } @Override - public boolean isClosed() { - return true; + public ChannelStatus getStatus() { + return new ChannelStatus(isPrivateChannel(), false, true, CLOSED); } @Override diff --git a/model/src/main/java/de/cotto/lndmanagej/model/ClosedOrClosingChannel.java b/model/src/main/java/de/cotto/lndmanagej/model/ClosedOrClosingChannel.java index 6f9e82df..b73541c6 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/ClosedOrClosingChannel.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/ClosedOrClosingChannel.java @@ -2,7 +2,7 @@ package de.cotto.lndmanagej.model; import java.util.Objects; -public class ClosedOrClosingChannel extends LocalChannel { +public abstract class ClosedOrClosingChannel extends LocalChannel { private final String closeTransactionHash; protected ClosedOrClosingChannel( 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..43c9a30b 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/ForceClosingChannel.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/ForceClosingChannel.java @@ -3,6 +3,8 @@ package de.cotto.lndmanagej.model; import java.util.Objects; import java.util.Set; +import static de.cotto.lndmanagej.model.OpenCloseStatus.FORCE_CLOSING; + public final class ForceClosingChannel extends ClosedOrClosingChannel { private final Set htlcOutpoints; @@ -24,6 +26,11 @@ public final class ForceClosingChannel extends ClosedOrClosingChannel { return htlcOutpoints; } + @Override + public ChannelStatus getStatus() { + return new ChannelStatus(false, false, false, FORCE_CLOSING); + } + @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 149ddcda..1e4276e7 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/LocalChannel.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/LocalChannel.java @@ -2,7 +2,7 @@ package de.cotto.lndmanagej.model; import java.util.Objects; -public class LocalChannel extends Channel { +public abstract class LocalChannel extends Channel { private final Pubkey remotePubkey; private final OpenInitiator openInitiator; private final boolean privateChannel; @@ -30,17 +30,11 @@ public class LocalChannel extends Channel { return openInitiator; } - public boolean isPrivateChannel() { + protected boolean isPrivateChannel() { return privateChannel; } - public boolean isActive() { - return false; - } - - public boolean isClosed() { - return false; - } + public abstract ChannelStatus getStatus(); @Override @SuppressWarnings("CPD-START") diff --git a/model/src/main/java/de/cotto/lndmanagej/model/LocalOpenChannel.java b/model/src/main/java/de/cotto/lndmanagej/model/LocalOpenChannel.java index c929b654..4121b49f 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/LocalOpenChannel.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/LocalOpenChannel.java @@ -27,8 +27,8 @@ public class LocalOpenChannel extends LocalChannel { } @Override - public boolean isActive() { - return active; + public ChannelStatus getStatus() { + return new ChannelStatus(isPrivateChannel(), active, false, OpenCloseStatus.OPEN); } @Override diff --git a/model/src/main/java/de/cotto/lndmanagej/model/OpenCloseStatus.java b/model/src/main/java/de/cotto/lndmanagej/model/OpenCloseStatus.java new file mode 100644 index 00000000..94f4954e --- /dev/null +++ b/model/src/main/java/de/cotto/lndmanagej/model/OpenCloseStatus.java @@ -0,0 +1,5 @@ +package de.cotto.lndmanagej.model; + +public enum OpenCloseStatus { + OPEN, FORCE_CLOSING, WAITING_CLOSE, CLOSED +} diff --git a/model/src/main/java/de/cotto/lndmanagej/model/WaitingCloseChannel.java b/model/src/main/java/de/cotto/lndmanagej/model/WaitingCloseChannel.java index 77d2ef19..30416b67 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/WaitingCloseChannel.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/WaitingCloseChannel.java @@ -1,5 +1,7 @@ package de.cotto.lndmanagej.model; +import static de.cotto.lndmanagej.model.OpenCloseStatus.WAITING_CLOSE; + public class WaitingCloseChannel extends LocalChannel { public WaitingCloseChannel( ChannelId channelId, @@ -11,4 +13,9 @@ public class WaitingCloseChannel extends LocalChannel { ) { super(channelId, channelPoint, capacity, ownPubkey, remotePubkey, openInitiator, false); } + + @Override + public ChannelStatus getStatus() { + return new ChannelStatus(isPrivateChannel(), false, false, WAITING_CLOSE); + } } 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 c1fa0908..b00d2ee2 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/BreachForceClosedChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/BreachForceClosedChannelTest.java @@ -8,6 +8,7 @@ import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.ChannelPointFixtures.CHANNEL_POINT; import static de.cotto.lndmanagej.model.ChannelPointFixtures.TRANSACTION_HASH_2; import static de.cotto.lndmanagej.model.ForceClosedChannelFixtures.FORCE_CLOSED_CHANNEL_BREACH; +import static de.cotto.lndmanagej.model.OpenCloseStatus.CLOSED; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; import static org.assertj.core.api.Assertions.assertThat; @@ -68,8 +69,9 @@ class BreachForceClosedChannelTest { } @Test - void isClosed() { - assertThat(FORCE_CLOSED_CHANNEL_BREACH.isClosed()).isTrue(); + void getStatus() { + assertThat(FORCE_CLOSED_CHANNEL_BREACH.getStatus()) + .isEqualTo(new ChannelStatus(false, false, true, CLOSED)); } @Test diff --git a/model/src/test/java/de/cotto/lndmanagej/model/ChannelStatusTest.java b/model/src/test/java/de/cotto/lndmanagej/model/ChannelStatusTest.java new file mode 100644 index 00000000..1b51705c --- /dev/null +++ b/model/src/test/java/de/cotto/lndmanagej/model/ChannelStatusTest.java @@ -0,0 +1,30 @@ +package de.cotto.lndmanagej.model; + +import org.junit.jupiter.api.Test; + +import static de.cotto.lndmanagej.model.OpenCloseStatus.OPEN; +import static org.assertj.core.api.Assertions.assertThat; + +class ChannelStatusTest { + private final ChannelStatus channelStatus = new ChannelStatus(false, true, false, OPEN); + + @Test + void privateChannel() { + assertThat(channelStatus.privateChannel()).isFalse(); + } + + @Test + void active() { + assertThat(channelStatus.active()).isTrue(); + } + + @Test + void closed() { + assertThat(channelStatus.closed()).isFalse(); + } + + @Test + void openCloseStatus() { + assertThat(channelStatus.openCloseStatus()).isEqualTo(OPEN); + } +} \ No newline at end of file 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 68a69229..1a165613 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/CoopClosedChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/CoopClosedChannelTest.java @@ -8,6 +8,7 @@ import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.ChannelPointFixtures.CHANNEL_POINT; import static de.cotto.lndmanagej.model.ChannelPointFixtures.TRANSACTION_HASH_2; import static de.cotto.lndmanagej.model.CoopClosedChannelFixtures.CLOSED_CHANNEL; +import static de.cotto.lndmanagej.model.OpenCloseStatus.CLOSED; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; import static org.assertj.core.api.Assertions.assertThat; @@ -71,8 +72,9 @@ class CoopClosedChannelTest { } @Test - void isClosed() { - assertThat(CLOSED_CHANNEL.isClosed()).isTrue(); + void getStatus() { + assertThat(CLOSED_CHANNEL.getStatus()) + .isEqualTo(new ChannelStatus(false, false, true, CLOSED)); } @Test 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 1c7744af..e8398538 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/ForceClosedChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/ForceClosedChannelTest.java @@ -9,6 +9,7 @@ import static de.cotto.lndmanagej.model.ChannelPointFixtures.CHANNEL_POINT; import static de.cotto.lndmanagej.model.ChannelPointFixtures.TRANSACTION_HASH_2; import static de.cotto.lndmanagej.model.ForceClosedChannelFixtures.FORCE_CLOSED_CHANNEL; import static de.cotto.lndmanagej.model.ForceClosedChannelFixtures.FORCE_CLOSED_CHANNEL_REMOTE; +import static de.cotto.lndmanagej.model.OpenCloseStatus.CLOSED; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; import static org.assertj.core.api.Assertions.assertThat; @@ -70,8 +71,9 @@ class ForceClosedChannelTest { } @Test - void isClosed() { - assertThat(FORCE_CLOSED_CHANNEL_REMOTE.isClosed()).isTrue(); + void getStatus() { + assertThat(FORCE_CLOSED_CHANNEL_REMOTE.getStatus()) + .isEqualTo(new ChannelStatus(false, false, true, CLOSED)); } @Test 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 66998f4e..38d27158 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/ForceClosingChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/ForceClosingChannelTest.java @@ -9,6 +9,7 @@ import static de.cotto.lndmanagej.model.ChannelPointFixtures.CHANNEL_POINT; import static de.cotto.lndmanagej.model.ChannelPointFixtures.TRANSACTION_HASH_3; import static de.cotto.lndmanagej.model.ForceClosingChannelFixtures.FORCE_CLOSING_CHANNEL; import static de.cotto.lndmanagej.model.ForceClosingChannelFixtures.HTLC_OUTPOINTS; +import static de.cotto.lndmanagej.model.OpenCloseStatus.FORCE_CLOSING; import static de.cotto.lndmanagej.model.OpenInitiator.LOCAL; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; @@ -60,9 +61,9 @@ class ForceClosingChannelTest { } @Test - void isClosed() { - // only consider a channel closed once it is fully closed - assertThat(FORCE_CLOSING_CHANNEL.isClosed()).isFalse(); + void getStatus() { + assertThat(FORCE_CLOSING_CHANNEL.getStatus()) + .isEqualTo(new ChannelStatus(false, false, false, FORCE_CLOSING)); } @Test 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 36b1291d..51aaa658 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/LocalOpenChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/LocalOpenChannelTest.java @@ -14,6 +14,7 @@ import static de.cotto.lndmanagej.model.ChannelPointFixtures.CHANNEL_POINT; import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL; import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL_2; import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL_PRIVATE; +import static de.cotto.lndmanagej.model.OpenCloseStatus.OPEN; import static de.cotto.lndmanagej.model.OpenInitiator.LOCAL; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; @@ -72,23 +73,21 @@ class LocalOpenChannelTest { } @Test - void isClosed() { - assertThat(LOCAL_OPEN_CHANNEL.isClosed()).isFalse(); + void getStatus() { + assertThat(LOCAL_OPEN_CHANNEL.getStatus()) + .isEqualTo(new ChannelStatus(false, true, false, OPEN)); } @Test - void isPrivateChannel_true() { - assertThat(LOCAL_OPEN_CHANNEL_PRIVATE.isPrivateChannel()).isTrue(); + void getStatus_private() { + assertThat(LOCAL_OPEN_CHANNEL_PRIVATE.getStatus()) + .isEqualTo(new ChannelStatus(true, true, false, OPEN)); } @Test - void isActive_true() { - assertThat(LOCAL_OPEN_CHANNEL.isActive()).isTrue(); - } - - @Test - void isActive_false() { - assertThat(LOCAL_OPEN_CHANNEL_2.isActive()).isFalse(); + void getStatus_inactive() { + assertThat(LOCAL_OPEN_CHANNEL_2.getStatus()) + .isEqualTo(new ChannelStatus(false, false, false, OPEN)); } @Test diff --git a/model/src/test/java/de/cotto/lndmanagej/model/OpenCloseStatusTest.java b/model/src/test/java/de/cotto/lndmanagej/model/OpenCloseStatusTest.java new file mode 100644 index 00000000..70a79e1a --- /dev/null +++ b/model/src/test/java/de/cotto/lndmanagej/model/OpenCloseStatusTest.java @@ -0,0 +1,20 @@ +package de.cotto.lndmanagej.model; + +import org.junit.jupiter.api.Test; + +import static de.cotto.lndmanagej.model.OpenCloseStatus.CLOSED; +import static de.cotto.lndmanagej.model.OpenCloseStatus.FORCE_CLOSING; +import static de.cotto.lndmanagej.model.OpenCloseStatus.OPEN; +import static de.cotto.lndmanagej.model.OpenCloseStatus.WAITING_CLOSE; +import static org.assertj.core.api.Assertions.assertThat; + +class OpenCloseStatusTest { + @Test + @SuppressWarnings("PMD.JUnitTestContainsTooManyAsserts") + void testToString() { + assertThat(OPEN).hasToString("OPEN"); + assertThat(WAITING_CLOSE).hasToString("WAITING_CLOSE"); + assertThat(FORCE_CLOSING).hasToString("FORCE_CLOSING"); + assertThat(CLOSED).hasToString("CLOSED"); + } +} \ No newline at end of file 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 eb700182..14706a2d 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/WaitingCloseChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/WaitingCloseChannelTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.Test; import static de.cotto.lndmanagej.model.ChannelFixtures.CAPACITY; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.ChannelPointFixtures.CHANNEL_POINT; +import static de.cotto.lndmanagej.model.OpenCloseStatus.WAITING_CLOSE; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; import static de.cotto.lndmanagej.model.WaitingCloseChannelFixtures.WAITING_CLOSE_CHANNEL; @@ -44,13 +45,9 @@ class WaitingCloseChannelTest { } @Test - void isActive() { - assertThat(WAITING_CLOSE_CHANNEL.isActive()).isFalse(); - } - - @Test - void isClosed() { - assertThat(WAITING_CLOSE_CHANNEL.isClosed()).isFalse(); + void getStatus() { + assertThat(WAITING_CLOSE_CHANNEL.getStatus()) + .isEqualTo(new ChannelStatus(false, false, false, WAITING_CLOSE)); } @Test 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 177ad90b..37b11e01 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelDetailsControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelDetailsControllerIT.java @@ -72,9 +72,10 @@ class ChannelDetailsControllerIT { .andExpect(jsonPath("$.remoteAlias", is(ALIAS_2))) .andExpect(jsonPath("$.capacity", is(String.valueOf(CAPACITY.satoshis())))) .andExpect(jsonPath("$.openHeight", is(CHANNEL_ID.getBlockHeight()))) - .andExpect(jsonPath("$.private", is(true))) - .andExpect(jsonPath("$.active", is(true))) - .andExpect(jsonPath("$.closed", is(false))) + .andExpect(jsonPath("$.status.private", is(true))) + .andExpect(jsonPath("$.status.active", is(true))) + .andExpect(jsonPath("$.status.closed", is(false))) + .andExpect(jsonPath("$.status.openClosed", is("OPEN"))) .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 485108a3..28d575a9 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 @@ -1,6 +1,5 @@ package de.cotto.lndmanagej.controller.dto; -import com.fasterxml.jackson.annotation.JsonProperty; import de.cotto.lndmanagej.model.BalanceInformation; import de.cotto.lndmanagej.model.ChannelPoint; import de.cotto.lndmanagej.model.LocalChannel; @@ -15,9 +14,7 @@ public record ChannelDetailsDto( Pubkey remotePubkey, String remoteAlias, String capacity, - @JsonProperty("private") boolean privateChannel, - boolean active, - boolean closed, + ChannelStatusDto status, BalanceInformationDto balance, OnChainCostsDto onChainCosts ) { @@ -36,9 +33,7 @@ public record ChannelDetailsDto( localChannel.getRemotePubkey(), remoteAlias, String.valueOf(localChannel.getCapacity().satoshis()), - localChannel.isPrivateChannel(), - localChannel.isActive(), - localChannel.isClosed(), + ChannelStatusDto.createFrom(localChannel.getStatus()), BalanceInformationDto.createFrom(balanceInformation), onChainCosts ); diff --git a/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelStatusDto.java b/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelStatusDto.java new file mode 100644 index 00000000..0372c70f --- /dev/null +++ b/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelStatusDto.java @@ -0,0 +1,20 @@ +package de.cotto.lndmanagej.controller.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import de.cotto.lndmanagej.model.ChannelStatus; + +public record ChannelStatusDto( + @JsonProperty("private") boolean privateChannel, + boolean active, + boolean closed, + String openClosed +) { + public static ChannelStatusDto createFrom(ChannelStatus status) { + return new ChannelStatusDto( + status.privateChannel(), + status.active(), + status.closed(), + status.openCloseStatus().toString() + ); + } +} 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 37d92409..a5e4f1fc 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 @@ -1,5 +1,6 @@ package de.cotto.lndmanagej.controller.dto; +import de.cotto.lndmanagej.model.ChannelStatus; import de.cotto.lndmanagej.model.Coins; import org.junit.jupiter.api.Test; @@ -9,8 +10,8 @@ import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.ChannelPointFixtures.CHANNEL_POINT; import static de.cotto.lndmanagej.model.CoopClosedChannelFixtures.CLOSED_CHANNEL; import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL; -import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL_PRIVATE; import static de.cotto.lndmanagej.model.NodeFixtures.ALIAS; +import static de.cotto.lndmanagej.model.OpenCloseStatus.OPEN; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; import static org.assertj.core.api.Assertions.assertThat; @@ -61,39 +62,12 @@ class ChannelDetailsDtoTest { } @Test - void privateChannel_false() { - assertThat(CHANNEL_DETAILS_DTO.privateChannel()).isFalse(); - } - - @Test - void privateChannel_true() { - ChannelDetailsDto dto = - new ChannelDetailsDto(LOCAL_OPEN_CHANNEL_PRIVATE, ALIAS, BALANCE_INFORMATION, ON_CHAIN_COSTS); - assertThat(dto.privateChannel()).isTrue(); - } - - @Test - void active_true() { + void status() { ChannelDetailsDto dto = new ChannelDetailsDto(LOCAL_OPEN_CHANNEL, ALIAS, BALANCE_INFORMATION, ON_CHAIN_COSTS); - assertThat(dto.active()).isTrue(); - } - - @Test - void active_false() { - 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(); + ChannelStatusDto channelStatusDto = + ChannelStatusDto.createFrom(new ChannelStatus(false, true, false, OPEN)); + assertThat(dto.status()).isEqualTo(channelStatusDto); } @Test diff --git a/web/src/test/java/de/cotto/lndmanagej/controller/dto/ChannelStatusDtoTest.java b/web/src/test/java/de/cotto/lndmanagej/controller/dto/ChannelStatusDtoTest.java new file mode 100644 index 00000000..613802ba --- /dev/null +++ b/web/src/test/java/de/cotto/lndmanagej/controller/dto/ChannelStatusDtoTest.java @@ -0,0 +1,18 @@ +package de.cotto.lndmanagej.controller.dto; + +import de.cotto.lndmanagej.model.ChannelStatus; +import org.junit.jupiter.api.Test; + +import static de.cotto.lndmanagej.model.OpenCloseStatus.OPEN; +import static org.assertj.core.api.Assertions.assertThat; + +class ChannelStatusDtoTest { + private final ChannelStatusDto dtoOpen = + new ChannelStatusDto(false, true, false, "OPEN"); + private final ChannelStatus channelStatusOpen = new ChannelStatus(false, true, false, OPEN); + + @Test + void createFrom() { + assertThat(ChannelStatusDto.createFrom(channelStatusOpen)).isEqualTo(dtoOpen); + } +} \ No newline at end of file