wrap response in object

This commit is contained in:
Carsten Otto
2021-12-09 14:30:25 +01:00
parent 9a8549b527
commit fc4ac8ebd9
5 changed files with 67 additions and 36 deletions

View File

@@ -11,6 +11,9 @@ import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import static org.assertj.core.api.Assertions.assertThat;
@@ -38,6 +41,22 @@ class ArchUnitIT {
rule.check(importedClasses);
}
@Test
void public_controller_methods_do_not_return_collection_type() {
ArchRule rule = ArchRuleDefinition.methods().that()
.areDeclaredInClassesThat().areAnnotatedWith(RequestMapping.class)
.and()
.arePublic()
.should()
.notHaveRawReturnType(Collection.class)
.andShould()
.notHaveRawReturnType(List.class)
.andShould()
.notHaveRawReturnType(Set.class);
assertThat(importedClasses).isNotEmpty();
rule.check(importedClasses);
}
private static class DoNotIncludeTests implements ImportOption {
private static final Pattern GRADLE_PATTERN = Pattern.compile(".*/build/classes/([^/]+/)?[a-zA-Z-]*[tT]est/.*");

View File

@@ -1,6 +1,7 @@
package de.cotto.lndmanagej.controller;
import de.cotto.lndmanagej.model.ChannelIdResolver;
import de.cotto.lndmanagej.model.Coins;
import de.cotto.lndmanagej.service.SelfPaymentsService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -44,8 +45,8 @@ class SelfPaymentsControllerIT {
when(selfPaymentsService.getSelfPaymentsFromChannel(CHANNEL_ID))
.thenReturn(List.of(SELF_PAYMENT_2, SELF_PAYMENT));
mockMvc.perform(get(CHANNEL_PREFIX + "/self-payments-from-channel/"))
.andExpect(jsonPath("$[0].memo", is(SELF_PAYMENT_2.memo())))
.andExpect(jsonPath("$[1].memo", is(SELF_PAYMENT.memo())));
.andExpect(jsonPath("$.selfPayments[0].memo", is(SELF_PAYMENT_2.memo())))
.andExpect(jsonPath("$.selfPayments[1].memo", is(SELF_PAYMENT.memo())));
}
@Test
@@ -53,8 +54,8 @@ class SelfPaymentsControllerIT {
when(selfPaymentsService.getSelfPaymentsFromPeer(PUBKEY))
.thenReturn(List.of(SELF_PAYMENT_2, SELF_PAYMENT));
mockMvc.perform(get(NODE_PREFIX + "/self-payments-from-peer/"))
.andExpect(jsonPath("$[0].memo", is(SELF_PAYMENT_2.memo())))
.andExpect(jsonPath("$[1].memo", is(SELF_PAYMENT.memo())));
.andExpect(jsonPath("$.selfPayments[0].memo", is(SELF_PAYMENT_2.memo())))
.andExpect(jsonPath("$.selfPayments[1].memo", is(SELF_PAYMENT.memo())));
}
@Test
@@ -62,18 +63,18 @@ class SelfPaymentsControllerIT {
when(selfPaymentsService.getSelfPaymentsToChannel(CHANNEL_ID))
.thenReturn(List.of(SELF_PAYMENT, SELF_PAYMENT_2));
mockMvc.perform(get(CHANNEL_PREFIX + "/self-payments-to-channel/"))
.andExpect(jsonPath("$[0].memo", is(SELF_PAYMENT.memo())))
.andExpect(jsonPath("$[0].settleDate", is(SELF_PAYMENT.settleDate().toString())))
.andExpect(jsonPath("$[0].value", is(String.valueOf(SELF_PAYMENT.value().milliSatoshis()))))
.andExpect(jsonPath("$[0].fees", is(String.valueOf(SELF_PAYMENT.fees().milliSatoshis()))))
.andExpect(jsonPath("$[0].firstChannel", is(CHANNEL_ID_4.toString())))
.andExpect(jsonPath("$[0].lastChannel", is(CHANNEL_ID_2.toString())))
.andExpect(jsonPath("$[1].memo", is(SELF_PAYMENT_2.memo())))
.andExpect(jsonPath("$[1].settleDate", is(SELF_PAYMENT_2.settleDate().toString())))
.andExpect(jsonPath("$[1].value", is(String.valueOf(SELF_PAYMENT_2.value().milliSatoshis()))))
.andExpect(jsonPath("$[1].fees", is(String.valueOf(SELF_PAYMENT_2.fees().milliSatoshis()))))
.andExpect(jsonPath("$[1].firstChannel", is(not(empty()))))
.andExpect(jsonPath("$[1].lastChannel", is(CHANNEL_ID.toString())));
.andExpect(jsonPath("$.selfPayments[0].memo", is(SELF_PAYMENT.memo())))
.andExpect(jsonPath("$.selfPayments[0].settleDate", is(SELF_PAYMENT.settleDate().toString())))
.andExpect(jsonPath("$.selfPayments[0].value", is(msat(SELF_PAYMENT.value()))))
.andExpect(jsonPath("$.selfPayments[0].fees", is(msat(SELF_PAYMENT.fees()))))
.andExpect(jsonPath("$.selfPayments[0].firstChannel", is(CHANNEL_ID_4.toString())))
.andExpect(jsonPath("$.selfPayments[0].lastChannel", is(CHANNEL_ID_2.toString())))
.andExpect(jsonPath("$.selfPayments[1].memo", is(SELF_PAYMENT_2.memo())))
.andExpect(jsonPath("$.selfPayments[1].settleDate", is(SELF_PAYMENT_2.settleDate().toString())))
.andExpect(jsonPath("$.selfPayments[1].value", is(msat(SELF_PAYMENT_2.value()))))
.andExpect(jsonPath("$.selfPayments[1].fees", is(msat(SELF_PAYMENT_2.fees()))))
.andExpect(jsonPath("$.selfPayments[1].firstChannel", is(not(empty()))))
.andExpect(jsonPath("$.selfPayments[1].lastChannel", is(CHANNEL_ID.toString())));
}
@Test
@@ -81,7 +82,11 @@ class SelfPaymentsControllerIT {
when(selfPaymentsService.getSelfPaymentsToPeer(PUBKEY))
.thenReturn(List.of(SELF_PAYMENT_2, SELF_PAYMENT));
mockMvc.perform(get(NODE_PREFIX + "/self-payments-to-peer/"))
.andExpect(jsonPath("$[0].memo", is(SELF_PAYMENT_2.memo())))
.andExpect(jsonPath("$[1].memo", is(SELF_PAYMENT.memo())));
.andExpect(jsonPath("$.selfPayments[0].memo", is(SELF_PAYMENT_2.memo())))
.andExpect(jsonPath("$.selfPayments[1].memo", is(SELF_PAYMENT.memo())));
}
private String msat(Coins value) {
return String.valueOf(value.milliSatoshis());
}
}

View File

@@ -3,6 +3,7 @@ package de.cotto.lndmanagej.controller;
import com.codahale.metrics.annotation.Timed;
import de.cotto.lndmanagej.controller.dto.ObjectMapperConfiguration;
import de.cotto.lndmanagej.controller.dto.SelfPaymentDto;
import de.cotto.lndmanagej.dto.SelfPaymentsDto;
import de.cotto.lndmanagej.model.ChannelId;
import de.cotto.lndmanagej.model.Pubkey;
import de.cotto.lndmanagej.service.SelfPaymentsService;
@@ -12,8 +13,6 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/")
@Import(ObjectMapperConfiguration.class)
@@ -26,33 +25,33 @@ public class SelfPaymentsController {
@Timed
@GetMapping("/channel/{channelId}/self-payments-from-channel")
public List<SelfPaymentDto> getSelfPaymentsFromChannel(@PathVariable ChannelId channelId) {
return selfPaymentsService.getSelfPaymentsFromChannel(channelId).stream()
public SelfPaymentsDto getSelfPaymentsFromChannel(@PathVariable ChannelId channelId) {
return new SelfPaymentsDto(selfPaymentsService.getSelfPaymentsFromChannel(channelId).stream()
.map(SelfPaymentDto::createFromModel)
.toList();
.toList());
}
@Timed
@GetMapping("/node/{pubkey}/self-payments-from-peer")
public List<SelfPaymentDto> getSelfPaymentsFromPeer(@PathVariable Pubkey pubkey) {
return selfPaymentsService.getSelfPaymentsFromPeer(pubkey).stream()
public SelfPaymentsDto getSelfPaymentsFromPeer(@PathVariable Pubkey pubkey) {
return new SelfPaymentsDto(selfPaymentsService.getSelfPaymentsFromPeer(pubkey).stream()
.map(SelfPaymentDto::createFromModel)
.toList();
.toList());
}
@Timed
@GetMapping("/channel/{channelId}/self-payments-to-channel")
public List<SelfPaymentDto> getSelfPaymentsToChannel(@PathVariable ChannelId channelId) {
return selfPaymentsService.getSelfPaymentsToChannel(channelId).stream()
public SelfPaymentsDto getSelfPaymentsToChannel(@PathVariable ChannelId channelId) {
return new SelfPaymentsDto(selfPaymentsService.getSelfPaymentsToChannel(channelId).stream()
.map(SelfPaymentDto::createFromModel)
.toList();
.toList());
}
@Timed
@GetMapping("/node/{pubkey}/self-payments-to-peer")
public List<SelfPaymentDto> getSelfPaymentsToPeer(@PathVariable Pubkey pubkey) {
return selfPaymentsService.getSelfPaymentsToPeer(pubkey).stream()
public SelfPaymentsDto getSelfPaymentsToPeer(@PathVariable Pubkey pubkey) {
return new SelfPaymentsDto(selfPaymentsService.getSelfPaymentsToPeer(pubkey).stream()
.map(SelfPaymentDto::createFromModel)
.toList();
.toList());
}
}

View File

@@ -0,0 +1,8 @@
package de.cotto.lndmanagej.dto;
import de.cotto.lndmanagej.controller.dto.SelfPaymentDto;
import java.util.List;
public record SelfPaymentsDto(List<SelfPaymentDto> selfPayments) {
}

View File

@@ -28,7 +28,7 @@ class SelfPaymentsControllerTest {
@Test
void getSelfPaymentsFromChannel() {
when(service.getSelfPaymentsFromChannel(CHANNEL_ID)).thenReturn(List.of(SELF_PAYMENT, SELF_PAYMENT_2));
assertThat(selfPaymentsController.getSelfPaymentsFromChannel(CHANNEL_ID)).containsExactly(
assertThat(selfPaymentsController.getSelfPaymentsFromChannel(CHANNEL_ID).selfPayments()).containsExactly(
SelfPaymentDto.createFromModel(SELF_PAYMENT),
SelfPaymentDto.createFromModel(SELF_PAYMENT_2)
);
@@ -37,7 +37,7 @@ class SelfPaymentsControllerTest {
@Test
void getSelfPaymentsFromPeer() {
when(service.getSelfPaymentsFromPeer(PUBKEY)).thenReturn(List.of(SELF_PAYMENT, SELF_PAYMENT_2));
assertThat(selfPaymentsController.getSelfPaymentsFromPeer(PUBKEY)).containsExactly(
assertThat(selfPaymentsController.getSelfPaymentsFromPeer(PUBKEY).selfPayments()).containsExactly(
SelfPaymentDto.createFromModel(SELF_PAYMENT),
SelfPaymentDto.createFromModel(SELF_PAYMENT_2)
);
@@ -46,7 +46,7 @@ class SelfPaymentsControllerTest {
@Test
void getSelfPaymentsToChannel() {
when(service.getSelfPaymentsToChannel(CHANNEL_ID)).thenReturn(List.of(SELF_PAYMENT, SELF_PAYMENT_2));
assertThat(selfPaymentsController.getSelfPaymentsToChannel(CHANNEL_ID)).containsExactly(
assertThat(selfPaymentsController.getSelfPaymentsToChannel(CHANNEL_ID).selfPayments()).containsExactly(
SelfPaymentDto.createFromModel(SELF_PAYMENT),
SelfPaymentDto.createFromModel(SELF_PAYMENT_2)
);
@@ -55,7 +55,7 @@ class SelfPaymentsControllerTest {
@Test
void getSelfPaymentsToPeer() {
when(service.getSelfPaymentsToPeer(PUBKEY)).thenReturn(List.of(SELF_PAYMENT, SELF_PAYMENT_2));
assertThat(selfPaymentsController.getSelfPaymentsToPeer(PUBKEY)).containsExactly(
assertThat(selfPaymentsController.getSelfPaymentsToPeer(PUBKEY).selfPayments()).containsExactly(
SelfPaymentDto.createFromModel(SELF_PAYMENT),
SelfPaymentDto.createFromModel(SELF_PAYMENT_2)
);