From 73f263b8516d579a76216fe5757bff473af5bdcf Mon Sep 17 00:00:00 2001 From: Carsten Otto Date: Tue, 10 May 2022 21:32:09 +0200 Subject: [PATCH] add tests --- .../lndmanagej/UiDataServiceImplTest.java | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 web/src/test/java/de/cotto/lndmanagej/UiDataServiceImplTest.java diff --git a/web/src/test/java/de/cotto/lndmanagej/UiDataServiceImplTest.java b/web/src/test/java/de/cotto/lndmanagej/UiDataServiceImplTest.java new file mode 100644 index 00000000..dd545467 --- /dev/null +++ b/web/src/test/java/de/cotto/lndmanagej/UiDataServiceImplTest.java @@ -0,0 +1,143 @@ +package de.cotto.lndmanagej; + +import de.cotto.lndmanagej.controller.ChannelController; +import de.cotto.lndmanagej.controller.NodeController; +import de.cotto.lndmanagej.controller.NotFoundException; +import de.cotto.lndmanagej.controller.StatusController; +import de.cotto.lndmanagej.controller.WarningsController; +import de.cotto.lndmanagej.controller.dto.BalanceInformationDto; +import de.cotto.lndmanagej.controller.dto.ChannelDetailsDto; +import de.cotto.lndmanagej.controller.dto.ChannelsDto; +import de.cotto.lndmanagej.controller.dto.FeeReportDto; +import de.cotto.lndmanagej.controller.dto.FlowReportDto; +import de.cotto.lndmanagej.controller.dto.NodesAndChannelsWithWarningsDto; +import de.cotto.lndmanagej.controller.dto.OnChainCostsDto; +import de.cotto.lndmanagej.controller.dto.PoliciesDto; +import de.cotto.lndmanagej.controller.dto.RebalanceReportDto; +import de.cotto.lndmanagej.service.ChannelService; +import de.cotto.lndmanagej.service.NodeService; +import de.cotto.lndmanagej.ui.dto.NodeDto; +import de.cotto.lndmanagej.ui.dto.OpenChannelDto; +import de.cotto.lndmanagej.ui.dto.StatusModel; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.List; +import java.util.Optional; +import java.util.Set; + +import static de.cotto.lndmanagej.model.BalanceInformationFixtures.BALANCE_INFORMATION; +import static de.cotto.lndmanagej.model.ChannelDetailsFixtures.CHANNEL_DETAILS; +import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; +import static de.cotto.lndmanagej.model.FeeReportFixtures.FEE_REPORT; +import static de.cotto.lndmanagej.model.FlowReportFixtures.FLOW_REPORT; +import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL; +import static de.cotto.lndmanagej.model.NodeFixtures.ALIAS; +import static de.cotto.lndmanagej.model.NodeFixtures.NODE_PEER; +import static de.cotto.lndmanagej.model.OnChainCostsFixtures.ON_CHAIN_COSTS; +import static de.cotto.lndmanagej.model.OpenInitiator.LOCAL; +import static de.cotto.lndmanagej.model.PolicyFixtures.POLICIES_FOR_LOCAL_CHANNEL; +import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; +import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; +import static de.cotto.lndmanagej.model.RebalanceReportFixtures.REBALANCE_REPORT; +import static de.cotto.lndmanagej.model.warnings.ChannelWarningFixtures.CHANNEL_NUM_UPDATES_WARNING; +import static de.cotto.lndmanagej.ui.model.NodeDetailsDtoFixture.NODE_DETAILS_DTO; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class UiDataServiceImplTest { + @InjectMocks + private UiDataServiceImpl uiDataService; + + @Mock + private StatusController statusController; + + @Mock + private WarningsController warningsController; + + @Mock + private ChannelController channelController; + + @Mock + private ChannelService channelService; + + @Mock + private NodeController nodeController; + + @Mock + private NodeService nodeService; + + @Test + void getStatus() { + int blockHeight = 995; + NodesAndChannelsWithWarningsDto warnings = new NodesAndChannelsWithWarningsDto(List.of(), List.of()); + when(statusController.isSyncedToChain()).thenReturn(true); + when(statusController.getBlockHeight()).thenReturn(blockHeight); + when(warningsController.getWarnings()).thenReturn(warnings); + StatusModel expected = new StatusModel(true, blockHeight, warnings); + + assertThat(uiDataService.getStatus()).isEqualTo(expected); + } + + @Test + void getOpenChannels() { + String alias = "remote alias"; + PoliciesDto policies = PoliciesDto.createFromModel(POLICIES_FOR_LOCAL_CHANNEL); + BalanceInformationDto balance = BalanceInformationDto.createFromModel(BALANCE_INFORMATION); + when(channelService.getLocalChannel(CHANNEL_ID)).thenReturn(Optional.of(LOCAL_OPEN_CHANNEL)); + when(nodeController.getAlias(PUBKEY_2)).thenReturn(alias); + when(channelController.getPolicies(CHANNEL_ID)).thenReturn(policies); + when(channelController.getBalance(CHANNEL_ID)).thenReturn(balance); + when(statusController.getOpenChannels()).thenReturn(new ChannelsDto(List.of(CHANNEL_ID))); + + assertThat(uiDataService.getOpenChannels()).containsExactly( + new OpenChannelDto(CHANNEL_ID, alias, PUBKEY_2, policies, balance) + ); + } + + @Test + void getChannelDetails() throws Exception { + when(channelController.getDetails(CHANNEL_ID)).thenReturn(ChannelDetailsDto.createFromModel(CHANNEL_DETAILS)); + assertThat(uiDataService.getChannelDetails(CHANNEL_ID)).isEqualTo( + new de.cotto.lndmanagej.ui.dto.ChannelDetailsDto( + CHANNEL_ID, + PUBKEY_2, + ALIAS, + LOCAL, + BalanceInformationDto.createFromModel(BALANCE_INFORMATION), + OnChainCostsDto.createFromModel(ON_CHAIN_COSTS), + PoliciesDto.createFromModel(POLICIES_FOR_LOCAL_CHANNEL), + FeeReportDto.createFromModel(FEE_REPORT), + FlowReportDto.createFromModel(FLOW_REPORT), + RebalanceReportDto.createFromModel(REBALANCE_REPORT), + Set.of(CHANNEL_NUM_UPDATES_WARNING.description()) + )); + } + + @Test + void getChannelDetails_not_found() throws Exception { + when(channelController.getDetails(CHANNEL_ID)).thenThrow(NotFoundException.class); + assertThatExceptionOfType(NotFoundException.class).isThrownBy( + () -> uiDataService.getChannelDetails(CHANNEL_ID) + ); + } + + @Test + void getNode() { + when(nodeService.getNode(PUBKEY)).thenReturn(NODE_PEER); + assertThat(uiDataService.getNode(PUBKEY)).isEqualTo( + new NodeDto(PUBKEY.toString(), NODE_PEER.alias(), true) + ); + } + + @Test + void getNodeDetails() { + when(nodeController.getDetails(PUBKEY)).thenReturn(NODE_DETAILS_DTO); + assertThat(uiDataService.getNodeDetails(PUBKEY)).isEqualTo(NODE_DETAILS_DTO); + } +}