Skip to content

Commit

Permalink
fix: Story srtp 184 problems solving (#55)
Browse files Browse the repository at this point in the history
  • Loading branch information
lucaconsalvi authored Jan 20, 2025
1 parent d15b6ff commit 3f48367
Show file tree
Hide file tree
Showing 11 changed files with 85 additions and 42 deletions.
25 changes: 24 additions & 1 deletion openapi/send.openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ paths:
tags:
- rtps
operationId: "createRtp"
parameters:
- $ref: '#/components/parameters/Version'
security:
- oAuth2: [ admin_rtp_send, write_rtp_send ]
summary: "Create and send a new RTP from a pagoPa notice"
description: "Create and send a new RTP from a pagoPa notice"
requestBody:
Expand Down Expand Up @@ -167,7 +171,7 @@ components:
- paymentNotice
- payer
- payee

MalformedRequestErrorResponse:
type: object
properties:
Expand All @@ -187,3 +191,22 @@ components:
details:
type: string
example: "The debtor's fiscal code provided is not activated by thr subject making the request."

Version:
description: Version of the required API.
type: string
pattern: "^[ -~]{1,64}$"
minLength: 1
maxLength: 64
example: "v1"


parameters:

Version:
name: Version
in: header
description: Version of the required API.
required: false
schema:
$ref: '#/components/schemas/Version'
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public Rtp toRtp(CreateRtpDto createRtpDto) {
.savingDateTime(LocalDateTime.now())
.payerName(createRtpDto.getPayer().getName())
.payerId(createRtpDto.getPayer().getPayerId()).payeeName(createRtpDto.getPayee().getName())
.payeeId(createRtpDto.getPayee().getPayeeId()).rtpSpId("rtpSpId").endToEndId("endToEndId").iban("iban")
.payeeId(createRtpDto.getPayee().getPayeeId()).rtpSpId("rtpSpId").iban("iban")
.subject(createRtpDto.getPaymentNotice().getSubject())
.payTrxRef(createRtpDto.getPayee().getPayTrxRef()).flgConf("flgConf").build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@ public SendAPIControllerImpl(SendRTPService sendRTPService, RtpDtoMapper rtpDtoM
this.rtpDtoMapper = rtpDtoMapper;
}


@Override
@PreAuthorize("hasRole('write_rtp_send')")
public Mono<ResponseEntity<Void>> createRtp(Mono<CreateRtpDto> createRtpDto,
ServerWebExchange exchange) {
String version, ServerWebExchange exchange) {
log.info("Received request to create RTP");
return createRtpDto
.map(rtpDtoMapper::toRtp)
Expand All @@ -39,4 +40,5 @@ public Mono<ResponseEntity<Void>> createRtp(Mono<CreateRtpDto> createRtpDto,
.onErrorReturn(PayerNotActivatedException.class, ResponseEntity.unprocessableEntity().build())
.doOnError(a -> log.error("Error creating RTP {}", a.getMessage()));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,12 @@
@Builder
public record Rtp(String noticeNumber, BigDecimal amount, String description, LocalDate expiryDate,
String payerId, String payerName, String payeeName, String payeeId, ResourceID resourceID,
String subject, LocalDateTime savingDateTime, String rtpSpId, String endToEndId, String iban,
String subject, LocalDateTime savingDateTime, String rtpSpId, String iban,
String payTrxRef, String flgConf, RtpStatus status) {

public Rtp toRtpWithActivationInfo(String rtpSpId) {
return Rtp.builder()
.rtpSpId(rtpSpId)
.endToEndId(this.endToEndId())
.iban(this.iban())
.payTrxRef(this.payTrxRef())
.flgConf(this.flgConf())
Expand All @@ -36,7 +35,6 @@ public Rtp toRtpWithActivationInfo(String rtpSpId) {
public Rtp toRtpSent(Rtp rtp) {
return Rtp.builder()
.rtpSpId(rtp.rtpSpId())
.endToEndId(rtp.endToEndId())
.iban(rtp.iban())
.payTrxRef(rtp.payTrxRef())
.flgConf(rtp.flgConf())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public Rtp toDomain(RtpEntity rtpEntity) {
.iban(rtpEntity.getIban())
.payTrxRef(rtpEntity.getPayTrxRef())
.flgConf(rtpEntity.getFlgConf())
.subject(rtpEntity.getSubject())
.status(RtpStatus.valueOf(rtpEntity.getStatus()))
.build();
}
Expand All @@ -45,6 +46,7 @@ public RtpEntity toDbEntity(Rtp rtp) {
.iban(rtp.iban())
.payTrxRef(rtp.payTrxRef())
.flgConf(rtp.flgConf())
.subject(rtp.subject())
.status(rtp.status().name())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
import it.gov.pagopa.rtp.activator.domain.errors.PayerNotActivatedException;
import it.gov.pagopa.rtp.activator.domain.rtp.Rtp;
import it.gov.pagopa.rtp.activator.domain.rtp.RtpRepository;
import it.gov.pagopa.rtp.activator.model.generated.activate.ErrorsDto;
import it.gov.pagopa.rtp.activator.model.generated.epc.ActiveOrHistoricCurrencyAndAmountEPC25922V30DS02WrapperDto;
import it.gov.pagopa.rtp.activator.model.generated.epc.ExternalOrganisationIdentification1CodeEPC25922V30DS022WrapperDto;
import it.gov.pagopa.rtp.activator.model.generated.epc.ExternalPersonIdentification1CodeEPC25922V30DS02WrapperDto;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,6 @@ class ActivationAPIControllerImplTest {
@MockBean
private ActivationDtoMapper activationDtoMapper;

@Autowired
private ActivationPropertiesConfig activationPropertiesConfig;

private WebTestClient webTestClient;

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ void testToRtp() {
assertThat(rtp.payeeName()).isEqualTo(createRtpDto.getPayee().getName());
assertThat(rtp.payeeId()).isEqualTo(createRtpDto.getPayee().getPayeeId());
assertThat(rtp.rtpSpId()).isEqualTo("rtpSpId");
assertThat(rtp.endToEndId()).isEqualTo("endToEndId");
assertThat(rtp.iban()).isEqualTo("iban");
assertThat(rtp.payTrxRef()).isEqualTo(createRtpDto.getPayee().getPayTrxRef());
assertThat(rtp.flgConf()).isEqualTo("flgConf");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ void setup() {
String payerId = "payerId";
String payeeName = "Payee Name";
String payeeId = "payeeId";
String endToEndId = "endToEndId";
String rtpSpId = "rtpSpId";
String iban = "IT60X0542811101000000123456";
String flgConf = "flgConf";
Expand All @@ -78,7 +77,7 @@ void setup() {
.expiryDate(expiryDate)
.payerId(payerId).payeeName(payeeName).payeeId(payeeId)
.resourceID(ResourceID.createNew())
.savingDateTime(LocalDateTime.now()).rtpSpId(rtpSpId).endToEndId(endToEndId)
.savingDateTime(LocalDateTime.now()).rtpSpId(rtpSpId)
.payerName(payerName)
.subject(subject)
.iban(iban).payTrxRef(payTrxRef)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import com.fasterxml.jackson.databind.ObjectMapper;
import it.gov.pagopa.rtp.activator.activateClient.api.ReadApi;
import it.gov.pagopa.rtp.activator.activateClient.model.ActivationDto;
import it.gov.pagopa.rtp.activator.activateClient.model.PayerDto;
Expand All @@ -17,8 +16,6 @@
import it.gov.pagopa.rtp.activator.domain.rtp.RtpRepository;
import it.gov.pagopa.rtp.activator.domain.rtp.RtpStatus;
import it.gov.pagopa.rtp.activator.model.generated.epc.SepaRequestToPayRequestResourceDto;
import java.io.DataInput;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.URI;
import java.nio.charset.StandardCharsets;
Expand Down Expand Up @@ -54,7 +51,6 @@ class SendRTPServiceTest {
final String payerId = "payerId";
final String payeeName = "Payee Name";
final String payeeId = "payeeId";
final String endToEndId = "endToEndId";
final String rtpSpId = "rtpSpId";
final String iban = "IT60X0542811101000000123456";
final String payTrxRef = "ABC/124";
Expand All @@ -70,7 +66,7 @@ void setUp() {
.expiryDate(expiryDate)
.payerId(payerId).payeeName(payeeName).payeeId(payeeId)
.resourceID(ResourceID.createNew())
.savingDateTime(LocalDateTime.now()).rtpSpId(rtpSpId).endToEndId(endToEndId)
.savingDateTime(LocalDateTime.now()).rtpSpId(rtpSpId)
.iban(iban).payTrxRef(payTrxRef)
.flgConf(flgConf).build();
}
Expand All @@ -93,7 +89,7 @@ void testSend() {
.expiryDate(expiryDate)
.payerId(payerId).payeeName(payeeName).payeeId(payeeId)
.resourceID(ResourceID.createNew())
.savingDateTime(LocalDateTime.now()).rtpSpId(activationRtpSpId).endToEndId(endToEndId)
.savingDateTime(LocalDateTime.now()).rtpSpId(activationRtpSpId)
.iban(iban).payTrxRef(payTrxRef)
.status(RtpStatus.CREATED)
.flgConf(flgConf)
Expand All @@ -118,7 +114,6 @@ void testSend() {
&& rtp.payeeName().equals(expectedRtp.payeeName())
&& rtp.payeeId().equals(expectedRtp.payeeId())
&& rtp.rtpSpId().equals(expectedRtp.rtpSpId())
&& rtp.endToEndId().equals(expectedRtp.endToEndId())
&& rtp.iban().equals(expectedRtp.iban())
&& rtp.payTrxRef().equals(expectedRtp.payTrxRef())
&& rtp.flgConf().equals(expectedRtp.flgConf())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package it.gov.pagopa.rtp.activator.service.rtp;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand All @@ -17,9 +16,6 @@

class SepaRequestToPayMapperTest {

@Mock
private Rtp rtp;

@InjectMocks
private SepaRequestToPayMapper sepaRequestToPayMapper;

Expand All @@ -28,6 +24,7 @@ void setUp() {
MockitoAnnotations.openMocks(this);
}


@Test
void testToRequestToPay() {
ResourceID resourceId = ResourceID.createNew();
Expand All @@ -36,37 +33,69 @@ void testToRequestToPay() {
String payeeName = "Mario Rossi";
String rtpSpId = "BIC123456";
String iban = "IT60X0542811101000000123456";
String endToEndId = "endToEndId123";
BigDecimal amount = new BigDecimal("99999999999");
LocalDateTime savingDateTime = LocalDateTime.now();
LocalDate expiryDate = LocalDate.now().plusDays(5);
String description = "Pagamento TARI";
String noticeNumber = "123456";
String payTrxRef = "ABC/124";
String flgConf = "flgConf123";
String payerName = "John Doe";
String subject = "subject";

Rtp nRtp = Rtp.builder().resourceID(resourceId).payerId(payerId).payeeName(payerName).payeeId(payeeId)
.payeeName(payeeName).rtpSpId(rtpSpId).iban(iban).amount(amount)
.savingDateTime(savingDateTime).expiryDate(expiryDate).description(description).subject(subject)
.noticeNumber(noticeNumber).payTrxRef(payTrxRef).flgConf(flgConf).build();

when(rtp.resourceID()).thenReturn(resourceId);
when(rtp.payerId()).thenReturn(payerId);
when(rtp.payeeId()).thenReturn(payeeId);
when(rtp.payeeName()).thenReturn(payeeName);
when(rtp.rtpSpId()).thenReturn(rtpSpId);
when(rtp.iban()).thenReturn(iban);
when(rtp.endToEndId()).thenReturn(endToEndId);
when(rtp.amount()).thenReturn(amount);
when(rtp.savingDateTime()).thenReturn(savingDateTime);
when(rtp.expiryDate()).thenReturn(expiryDate);
when(rtp.description()).thenReturn(description);
when(rtp.noticeNumber()).thenReturn(noticeNumber);
when(rtp.payTrxRef()).thenReturn(payTrxRef);
when(rtp.flgConf()).thenReturn(flgConf);

SepaRequestToPayRequestResourceDto result = sepaRequestToPayMapper.toRequestToPay(rtp);
SepaRequestToPayRequestResourceDto result = sepaRequestToPayMapper.toRequestToPay(nRtp);

assertNotNull(result);
assertEquals(resourceId.getId().toString(), result.getResourceId());
assertEquals("http://spsrtp.api.cstar.pagopa.it", result.getCallbackUrl().toString());
assertEquals(resourceId.getId().toString(), result.getDocument().getCdtrPmtActvtnReq().getGrpHdr().getMsgId());
assertTrue(result.getDocument().getCdtrPmtActvtnReq().getPmtInf().get(0).getCdtTrfTx().get(0).getRmtInf().getUstrd().get(1).contains(description));
assertTrue(result.getDocument().getCdtrPmtActvtnReq().getPmtInf().get(0).getCdtTrfTx().get(0).getRmtInf()
.getUstrd().get(1).contains(description));



// Verify group header
var grpHdr = result.getDocument().getCdtrPmtActvtnReq().getGrpHdr();
assertEquals(nRtp.resourceID().getId().toString(), grpHdr.getMsgId());
assertEquals(nRtp.savingDateTime().toString(), grpHdr.getCreDtTm());


// Verify payment information
var pmtInf = result.getDocument().getCdtrPmtActvtnReq().getPmtInf().get(0);
assertEquals(nRtp.noticeNumber(), pmtInf.getPmtInfId());
assertTrue(pmtInf.getXpryDt().toString().contains(nRtp.expiryDate().toString()));

// Verify debtor information
assertEquals(nRtp.payerName(), pmtInf.getDbtr().getNm());

// Verify credit transfer transaction
var cdtTrfTx = pmtInf.getCdtTrfTx().get(0);
assertEquals(nRtp.noticeNumber(), cdtTrfTx.getPmtId().getEndToEndId());

// Verify creditor information
assertEquals(nRtp.payeeName(), cdtTrfTx.getCdtr().getNm());
assertTrue(cdtTrfTx.getCdtrAcct().getId().toString().contains(nRtp.iban()));

// Verify remittance information
var rmtInf = cdtTrfTx.getRmtInf();
assertTrue(rmtInf.getUstrd().get(0).contains(nRtp.subject()));
assertTrue(rmtInf.getUstrd().get(0).contains(nRtp.noticeNumber()));
assertTrue(rmtInf.getUstrd().get(1).contains(nRtp.description()));

// Verify instruction for creditor agent
var instrForCdtrAgt = cdtTrfTx.getInstrForCdtrAgt();
assertEquals("ATR113/" + nRtp.payTrxRef(), instrForCdtrAgt.get(0).getInstrInf());
assertEquals(nRtp.flgConf(), instrForCdtrAgt.get(1).getInstrInf());

// Verify callback URL
assertEquals("http://spsrtp.api.cstar.pagopa.it", result.getCallbackUrl().toString());

}
}


0 comments on commit 3f48367

Please sign in to comment.