Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add mapping for non-bic service provider id
Browse files Browse the repository at this point in the history
and-mora committed Jan 31, 2025
1 parent 8070091 commit 35d5832
Showing 2 changed files with 94 additions and 23 deletions.
Original file line number Diff line number Diff line change
@@ -45,6 +45,8 @@
@Component
public class SepaRequestToPayMapper {

private static final String BIC_REGEX = "^([A-Z0-9]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?)$";

public SepaRequestToPayRequestResourceDto toEpcRequestToPay(Rtp rtp) {

var sepaRequestToPayRequestResourceDto = new SepaRequestToPayRequestResourceDto();
@@ -82,7 +84,14 @@ public SepaRequestToPayRequestResourceDto toEpcRequestToPay(Rtp rtp) {
.id(party38ChoiceEPC25922V30DS02Dto);

var dbtFinancialInstitutionIdentification18EPC25922V30DS02Dto = new FinancialInstitutionIdentification18EPC25922V30DS02Dto();
dbtFinancialInstitutionIdentification18EPC25922V30DS02Dto.setBICFI(rtp.serviceProviderDebtor());
// regex
if (rtp.serviceProviderDebtor().matches(BIC_REGEX)) {
dbtFinancialInstitutionIdentification18EPC25922V30DS02Dto.setBICFI(rtp.serviceProviderDebtor());
} else {
var genericFinancialIdentification1Dto = new GenericFinancialIdentification1Dto();
genericFinancialIdentification1Dto.setId(rtp.serviceProviderDebtor());
dbtFinancialInstitutionIdentification18EPC25922V30DS02Dto.setOthr(genericFinancialIdentification1Dto);
}

var dbtBranchAndFinancialInstitutionIdentification6EPC25922V30DS02Dto = new BranchAndFinancialInstitutionIdentification6EPC25922V30DS02Dto()
.finInstnId(dbtFinancialInstitutionIdentification18EPC25922V30DS02Dto);
Original file line number Diff line number Diff line change
@@ -1,36 +1,32 @@
package it.gov.pagopa.rtp.activator.service.rtp;

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

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

import it.gov.pagopa.rtp.activator.domain.rtp.ResourceID;
import it.gov.pagopa.rtp.activator.domain.rtp.Rtp;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
class SepaRequestToPayMapperTest {

@InjectMocks
private SepaRequestToPayMapper sepaRequestToPayMapper;

@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}


@Test
void testToEpcRequestToPay() {
ResourceID resourceId = ResourceID.createNew();
String payerId = "payerId123";
String payeeId = "payeeId123";
String payeeName = "Comune di Bugliano";
String rtpSpId = "BIC123456";
String rtpSpId = "F4K3SP12";
String iban = "IT60X0542811101000000123456";
BigDecimal amount = new BigDecimal("99999999999");
LocalDateTime savingDateTime = LocalDateTime.now();
@@ -56,26 +52,24 @@ void testToEpcRequestToPay() {
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());

assertEquals(nRtp.serviceProviderDebtor(), pmtInf.getDbtrAgt().getFinInstnId().getBICFI());

// 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()));
@@ -85,15 +79,83 @@ void testToEpcRequestToPay() {
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());

}

@Test
void testToEpcRequestToPayWithNonPspSpDebtor() {
ResourceID resourceId = ResourceID.createNew();
String payerId = "payerId123";
String payeeId = "payeeId123";
String payeeName = "Comune di Bugliano";
String rtpSpId = "12345678911";
String iban = "IT60X0542811101000000123456";
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).payerName(payerName).payeeId(payeeId)
.payeeName(payeeName).serviceProviderDebtor(rtpSpId).iban(iban).amount(amount)
.savingDateTime(savingDateTime).expiryDate(expiryDate).description(description).subject(subject)
.noticeNumber(noticeNumber).payTrxRef(payTrxRef).flgConf(flgConf).build();

var result = sepaRequestToPayMapper.toEpcRequestToPay(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));

// 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());
assertEquals(nRtp.serviceProviderDebtor(), pmtInf.getDbtrAgt().getFinInstnId().getOthr().getId());

// 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 35d5832

Please sign in to comment.