Skip to content

Commit

Permalink
feat: [SRTP-124] Add sepa mapping (#32)
Browse files Browse the repository at this point in the history
Co-authored-by: Andrea Morabito <andrea.morabito@pagopa.it>
lucaconsalvi and and-mora authored Dec 9, 2024
1 parent a2af931 commit 35df6db
Showing 29 changed files with 670 additions and 80 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -10,8 +10,8 @@ on:
- edited
- synchronize
paths:
- 'src/*'
- '*gradle*'
- 'src/**'
- '**gradle**'

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
24 changes: 10 additions & 14 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import org.openapitools.generator.gradle.plugin.tasks.GenerateTask

plugins {
id 'java'
id 'org.springframework.boot' version '3.3.5'
@@ -82,7 +80,7 @@ sourceSets {
}
}

tasks.register('generateOpenAPIActivate', GenerateTask) {
task generateOpenAPIActivate(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask) {
generatorName.set("spring")
inputSpec.set("$rootDir/openapi/activation.openapi.yaml")
outputDir.set("$projectDir/build/generated")
@@ -112,7 +110,7 @@ tasks.register('generateOpenAPIActivate', GenerateTask) {
}


tasks.register('generateOpenAPISend', GenerateTask) {
task generateOpenAPISend(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask) {
generatorName.set("spring")
inputSpec.set("$rootDir/openapi/send.openapi.yaml")
outputDir.set("$projectDir/build/generated")
@@ -141,22 +139,21 @@ tasks.register('generateOpenAPISend', GenerateTask) {
])
}

tasks.register('generateOpenAPIEPC', GenerateTask) {
generatorName.set("java")
task generateOpenAPIEPC(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask) {
generatorName.set("spring")
inputSpec.set("$rootDir/openapi/EPC133-22 v3.1 - SRTP scheme rulebook v3.1 related API specifications_optimized.yaml")
outputDir.set("$projectDir/build/generated")
apiPackage.set("it.gov.pagopa.rtp.activator.client.epc.api")
modelPackage.set("it.gov.pagopa.rtp.activator.client.epc.model")
invokerPackage.set("it.gov.pagopa.rtp.activator.client.epc.invoker")
apiPackage.set("it.gov.pagopa.rtp.activator.controller.generated.epc")
modelPackage.set("it.gov.pagopa.rtp.activator.model.generated.epc")
modelNameSuffix.set("Dto")
generateApiTests.set(false)
generateApiDocumentation.set(false)
generateApiTests.set(false)
generateModelTests.set(false)
library.set("webclient")
library.set("spring-boot")
configOptions.set([
"dateLibrary" : "java8",
"useJakartaEe" : "true",
"useSpringBoot3" : "true",
"interfaceOnly" : "true",
"useTags" : "true",
"useSwaggerUI" : "false",
@@ -187,7 +184,7 @@ bootRun {
]
}

tasks.withType(JavaExec).configureEach {
tasks.withType(JavaExec) {
jvmArgs += '-Djava.security.properties=src/main/resources/custom.security'
}

@@ -209,5 +206,4 @@ sonarqube {
property 'sonar.organization', 'pagopa'
property 'sonar.projectKey', 'pagopa_rtp-activator'
}
}

}
Original file line number Diff line number Diff line change
@@ -2,6 +2,8 @@

import it.gov.pagopa.rtp.activator.controller.generated.activate.CreateApi;
import it.gov.pagopa.rtp.activator.model.generated.activate.ActivationReqDto;
import it.gov.pagopa.rtp.activator.service.activation.ActivationPayerService;

import java.util.UUID;

import org.springframework.http.ResponseEntity;
@@ -11,7 +13,6 @@

import it.gov.pagopa.rtp.activator.configuration.ActivationPropertiesConfig;
import it.gov.pagopa.rtp.activator.domain.errors.PayerAlreadyExists;
import it.gov.pagopa.rtp.activator.service.ActivationPayerService;
import reactor.core.publisher.Mono;

import org.springframework.security.access.prepost.PreAuthorize;
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package it.gov.pagopa.rtp.activator.controller;

import static it.gov.pagopa.rtp.activator.utils.Authorizations.verifySubjectRequest;

import it.gov.pagopa.rtp.activator.configuration.ActivationPropertiesConfig;
import it.gov.pagopa.rtp.activator.controller.generated.send.RtpsApi;
import it.gov.pagopa.rtp.activator.model.generated.send.CreateRtpDto;
import it.gov.pagopa.rtp.activator.service.ActivationPayerService;
import it.gov.pagopa.rtp.activator.service.rtp.SendRTPService;

import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
@@ -17,22 +15,20 @@
@Validated
public class SendAPIControllerImpl implements RtpsApi {

private final ActivationPayerService activationPayerService;

private final ActivationPropertiesConfig activationPropertiesConfig;
private final SendRTPService sendRTPService;

public SendAPIControllerImpl(ActivationPayerService activationPayerService,
ActivationPropertiesConfig activationPropertiesConfig) {
this.activationPayerService = activationPayerService;
this.activationPropertiesConfig = activationPropertiesConfig;
public SendAPIControllerImpl(SendRTPService sendRTPService) {
this.sendRTPService = sendRTPService;
}

@Override
@PreAuthorize("hasRole('write_rtp_send')")
public Mono<ResponseEntity<Void>> createRtp(Mono<CreateRtpDto> createRtpDto,
ServerWebExchange exchange
) {
return verifySubjectRequest(createRtpDto, CreateRtpDto::getPayerId)
.thenReturn(ResponseEntity.status(201).build());
ServerWebExchange exchange) {
return createRtpDto
.flatMap(t -> sendRTPService.send(t.getNoticeNumber(), t.getAmount(), t.getDescription(),
t.getExpiryDate(), t.getPayerId(), t.getPayee().getName(), t.getPayee().getPayeeId(),"rtpSpId", "endToEndId",
"iban", "payTrxRef", "flgConf"))
.thenReturn(ResponseEntity.status(201).build());
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package it.gov.pagopa.rtp.activator.domain;
package it.gov.pagopa.rtp.activator.domain.payer;

import java.time.Instant;

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package it.gov.pagopa.rtp.activator.domain;
package it.gov.pagopa.rtp.activator.domain.payer;

import java.util.UUID;

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package it.gov.pagopa.rtp.activator.domain;
package it.gov.pagopa.rtp.activator.domain.payer;


import reactor.core.publisher.Mono;
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package it.gov.pagopa.rtp.activator.domain.rtp;

import java.util.UUID;

import lombok.Getter;

@Getter
public class ResourceID {

private final UUID id;

public ResourceID(UUID uuid) {
this.id = uuid;
}

public static ResourceID createNew() {
UUID uuid = UUID.randomUUID();
return new ResourceID(uuid);
}

}
10 changes: 10 additions & 0 deletions src/main/java/it/gov/pagopa/rtp/activator/domain/rtp/Rtp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package it.gov.pagopa.rtp.activator.domain.rtp;

import java.time.LocalDate;
import java.time.LocalDateTime;

public record Rtp(String noticeNumber, Integer amount, String description, LocalDate expiryDate, String payerId,
String payeeName, String payeeId,
ResourceID resourceID, LocalDateTime savingDateTime,
String rtpSpId, String endToEndId, String iban, String payTrxRef, String flgConf) {
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package it.gov.pagopa.rtp.activator.repository;
package it.gov.pagopa.rtp.activator.repository.activation;



Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package it.gov.pagopa.rtp.activator.repository;
package it.gov.pagopa.rtp.activator.repository.activation;


import org.springframework.stereotype.Repository;

import it.gov.pagopa.rtp.activator.domain.Payer;
import it.gov.pagopa.rtp.activator.domain.PayerRepository;
import it.gov.pagopa.rtp.activator.domain.payer.Payer;
import it.gov.pagopa.rtp.activator.domain.payer.PayerRepository;
import reactor.core.publisher.Mono;

@Repository
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package it.gov.pagopa.rtp.activator.repository;
package it.gov.pagopa.rtp.activator.repository.activation;

import java.time.Instant;

Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package it.gov.pagopa.rtp.activator.repository;
package it.gov.pagopa.rtp.activator.repository.activation;

import java.util.UUID;

import org.springframework.stereotype.Component;

import it.gov.pagopa.rtp.activator.domain.Payer;
import it.gov.pagopa.rtp.activator.domain.PayerID;
import it.gov.pagopa.rtp.activator.domain.payer.Payer;
import it.gov.pagopa.rtp.activator.domain.payer.PayerID;

@Component
public class ActivationMapper {

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package it.gov.pagopa.rtp.activator.service;
package it.gov.pagopa.rtp.activator.service.activation;

import it.gov.pagopa.rtp.activator.domain.Payer;
import it.gov.pagopa.rtp.activator.domain.payer.Payer;
import reactor.core.publisher.Mono;

public interface ActivationPayerService {
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package it.gov.pagopa.rtp.activator.service;
package it.gov.pagopa.rtp.activator.service.activation;

import java.time.Instant;

import org.springframework.stereotype.Service;

import it.gov.pagopa.rtp.activator.domain.Payer;
import it.gov.pagopa.rtp.activator.domain.PayerID;
import it.gov.pagopa.rtp.activator.domain.errors.PayerAlreadyExists;
import it.gov.pagopa.rtp.activator.repository.ActivationDBRepository;
import it.gov.pagopa.rtp.activator.domain.payer.Payer;
import it.gov.pagopa.rtp.activator.domain.payer.PayerID;
import it.gov.pagopa.rtp.activator.repository.activation.ActivationDBRepository;
import reactor.core.publisher.Mono;

@Service
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package it.gov.pagopa.rtp.activator.service.rtp;

import java.time.LocalDate;
import it.gov.pagopa.rtp.activator.domain.rtp.Rtp;
import reactor.core.publisher.Mono;

public interface SendRTPService {
Mono<Rtp> send(String noticeNumber, Integer amount, String description, LocalDate expiryDate, String payerId,
String payeeName, String payeeId, String rtpSpId, String endToEndId, String iban, String payTrxRef,
String flgConf);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package it.gov.pagopa.rtp.activator.service.rtp;

import it.gov.pagopa.rtp.activator.domain.rtp.ResourceID;
import it.gov.pagopa.rtp.activator.domain.rtp.Rtp;
import lombok.extern.slf4j.Slf4j;
import reactor.core.publisher.Mono;

import java.time.LocalDate;
import java.time.LocalDateTime;

import org.springframework.stereotype.Service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

@Service
@Slf4j
public class SendRTPServiceImpl implements SendRTPService {

private SepaRequestToPayMapper sepaRequestToPayMapper;

public SendRTPServiceImpl(SepaRequestToPayMapper sepaRequestToPayMapper) {
this.sepaRequestToPayMapper = sepaRequestToPayMapper;
}

@Override
public Mono<Rtp> send(String noticeNumber, Integer amount, String description, LocalDate expiryDate, String payerId ,String payeeName,
String payeeId, String rtpSpId, String endToEndId, String iban, String payTrxRef, String flgConf) {

Rtp rtp = new Rtp(noticeNumber, amount, description, expiryDate, payerId, payeeName, payeeId,
ResourceID.createNew(), LocalDateTime.now(), rtpSpId, endToEndId, iban, payTrxRef, flgConf);
// save
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);

try { //
String jsonString = objectMapper.writeValueAsString(sepaRequestToPayMapper.toRequestToPay(rtp));
log.info(jsonString);
} catch (JsonProcessingException e) {
e.printStackTrace();
}

return Mono.just(rtp);
}
}

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/main/resources/application.yaml
Original file line number Diff line number Diff line change
@@ -15,6 +15,6 @@ management:
health.mongo.enabled: false

spring.data.mongodb:
uri: ${COSMOS_ACCOUNT_RTP_CONNECTION_STRING:}
uri: ${COSMOS_ACCOUNT_RTP_CONNECTION_STRING:mongodb://localhost:27017}
database: ${DB_NAME:rtp}
activation.base-url: ${BASE_URL:http://localhost}
Original file line number Diff line number Diff line change
@@ -2,14 +2,13 @@

import it.gov.pagopa.rtp.activator.configuration.ActivationPropertiesConfig;
import it.gov.pagopa.rtp.activator.configuration.SecurityConfig;
import it.gov.pagopa.rtp.activator.domain.Payer;
import it.gov.pagopa.rtp.activator.domain.PayerID;
import it.gov.pagopa.rtp.activator.domain.errors.PayerAlreadyExists;
import it.gov.pagopa.rtp.activator.domain.payer.Payer;
import it.gov.pagopa.rtp.activator.domain.payer.PayerID;
import it.gov.pagopa.rtp.activator.model.generated.activate.ActivationReqDto;
import it.gov.pagopa.rtp.activator.model.generated.activate.PayerDto;
import it.gov.pagopa.rtp.activator.repository.ActivationDBRepository;
import it.gov.pagopa.rtp.activator.service.ActivationPayerService;

import it.gov.pagopa.rtp.activator.repository.activation.ActivationDBRepository;
import it.gov.pagopa.rtp.activator.service.activation.ActivationPayerService;
import it.gov.pagopa.rtp.activator.utils.Users;
import reactor.core.publisher.Mono;

Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package it.gov.pagopa.rtp.activator.controller;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
import org.springframework.boot.test.mock.mockito.MockBean;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Import;
import org.springframework.http.HttpStatus;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.aot.DisabledInAotMode;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.reactive.server.WebTestClient;

import it.gov.pagopa.rtp.activator.configuration.SecurityConfig;

import it.gov.pagopa.rtp.activator.model.generated.send.CreateRtpDto;
import it.gov.pagopa.rtp.activator.model.generated.send.PayeeDto;
import it.gov.pagopa.rtp.activator.service.rtp.SendRTPService;
import it.gov.pagopa.rtp.activator.utils.Users;
import reactor.core.publisher.Mono;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.springSecurity;

import java.time.LocalDate;

@ExtendWith(SpringExtension.class)
@WebFluxTest(controllers = { SendAPIControllerImpl.class })
@Import({ SecurityConfig.class })
@DisabledInAotMode
class SendAPIControllerImplTest {

@MockBean
private SendRTPService sendRTPService;

private WebTestClient webTestClient;

@Autowired
private ApplicationContext context;

@BeforeEach
void setup() {
webTestClient = WebTestClient
.bindToApplicationContext(context)
.apply(springSecurity())
.configureClient()
.build();
}

@Test
@Users.RtpSenderWriter
void testSendRtpSuccessful() {

when(sendRTPService.send(anyString(), anyInt(), anyString(), any(), anyString(), anyString(), anyString(),
anyString(), anyString(),anyString(), anyString(), anyString()))
.thenReturn(Mono.empty());

webTestClient.post()
.uri("/rtps")
.bodyValue(generateSendRequest())
.exchange()
.expectStatus()
.isCreated()
.expectBody()
.isEmpty();
}

@Test
@Users.RtpSenderWriter
void testSendRtpWithWrongBody() {

when(sendRTPService.send(anyString(), anyInt(), anyString(), any(), anyString(), anyString(), anyString(),
anyString(), anyString(),anyString(), anyString(), anyString()))
.thenReturn(Mono.empty());

webTestClient.post()
.uri("/rtps")
.bodyValue(generateWrongSendRequest())
.exchange()
.expectStatus()
.isEqualTo(HttpStatus.BAD_REQUEST);
}

@Test
@WithMockUser
void userWithoutEnoughPermissionShouldNotSendRtp() {
webTestClient.post()
.uri("/rtps")
.bodyValue(generateSendRequest())
.exchange()
.expectStatus()
.isEqualTo(HttpStatus.FORBIDDEN);
}

private CreateRtpDto generateSendRequest() {
return new CreateRtpDto("311111111112222222", 1, "description", LocalDate.now(), "payerId",
new PayeeDto("77777777777", "payeeName"));
}

private CreateRtpDto generateWrongSendRequest() {
return new CreateRtpDto("noticenumber", 1, "description", LocalDate.now(), "payerId",
new PayeeDto("dsds", "payeeName"));
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package it.gov.pagopa.rtp.activator.domain;
package it.gov.pagopa.rtp.activator.domain.payer;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;
import java.util.UUID;

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package it.gov.pagopa.rtp.activator.domain.rtp;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;

import java.util.UUID;

import org.junit.jupiter.api.Test;

class ResourceIDTest {
@Test
void testCreateNew() {
ResourceID resourceID = ResourceID.createNew();
assertNotNull(resourceID);
assertNotNull(resourceID.getId());
}

@Test
void testConstructor() {
UUID uuid = UUID.randomUUID();
ResourceID resourceID = new ResourceID(uuid);
assertNotNull(resourceID);
assertEquals(uuid, resourceID.getId());
}

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package it.gov.pagopa.rtp.activator.repository;
package it.gov.pagopa.rtp.activator.repository.activation;

import org.junit.jupiter.api.Test;

import it.gov.pagopa.rtp.activator.domain.Payer;
import it.gov.pagopa.rtp.activator.domain.PayerID;
import it.gov.pagopa.rtp.activator.domain.payer.Payer;
import it.gov.pagopa.rtp.activator.domain.payer.PayerID;

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

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package it.gov.pagopa.rtp.activator.service;
package it.gov.pagopa.rtp.activator.service.activation;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -7,11 +7,10 @@
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import it.gov.pagopa.rtp.activator.domain.Payer;
import it.gov.pagopa.rtp.activator.domain.PayerID;
import it.gov.pagopa.rtp.activator.domain.errors.PayerAlreadyExists;
import it.gov.pagopa.rtp.activator.repository.ActivationDBRepository;

import it.gov.pagopa.rtp.activator.domain.payer.Payer;
import it.gov.pagopa.rtp.activator.domain.payer.PayerID;
import it.gov.pagopa.rtp.activator.repository.activation.ActivationDBRepository;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;

Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package it.gov.pagopa.rtp.activator.service.rtp;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.net.URI;
import java.time.LocalDate;
import java.time.LocalDateTime;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.jupiter.MockitoExtension;

import it.gov.pagopa.rtp.activator.domain.rtp.ResourceID;
import it.gov.pagopa.rtp.activator.domain.rtp.Rtp;
import it.gov.pagopa.rtp.activator.model.generated.epc.SepaRequestToPayRequestResourceDto;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;

@ExtendWith(MockitoExtension.class)
class SendRTPServiceTest {

@Mock
private SepaRequestToPayMapper sepaRequestToPayMapper;

@InjectMocks
private SendRTPServiceImpl sendRTPService;

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

@Test
void testSend() {
String noticeNumber = "12345";
Integer amount = 100;
String description = "Payment Description";
LocalDate expiryDate = LocalDate.now();
String payerId = "payerId";
String payeeName = "Payee Name";
String payeeId = "payeeId";
String endToEndId = "endToEndId";
String rtpSpId = "rtpSpId";
String iban = "IT60X0542811101000000123456";
String payTrxRef = "payTrxRef";
String flgConf = "flgConf";

Rtp expectedRtp = new Rtp(noticeNumber, amount, description, expiryDate, payerId, payeeName, payeeId,
ResourceID.createNew(), LocalDateTime.now(),"rtpSpId", endToEndId, iban, payTrxRef, flgConf);

SepaRequestToPayRequestResourceDto mockSepaRequestToPayRequestResource = new SepaRequestToPayRequestResourceDto(
URI.create("http://callback.url"));

when(sepaRequestToPayMapper.toRequestToPay(any(Rtp.class))).thenReturn(mockSepaRequestToPayRequestResource);

Mono<Rtp> result = sendRTPService.send(noticeNumber, amount, description, expiryDate, payerId, payeeName,
payeeId, rtpSpId, endToEndId, iban, payTrxRef, flgConf);
StepVerifier.create(result)
.expectNextMatches(rtp -> rtp.noticeNumber().equals(expectedRtp.noticeNumber())
&& rtp.amount().equals(expectedRtp.amount())
&& rtp.description().equals(expectedRtp.description())
&& rtp.expiryDate().equals(expectedRtp.expiryDate())
&& rtp.payerId().equals(expectedRtp.payerId())
&& 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()))
.verifyComplete();
verify(sepaRequestToPayMapper, times(1)).toRequestToPay(any(Rtp.class));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
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;
import org.mockito.*;

import it.gov.pagopa.rtp.activator.domain.rtp.ResourceID;
import it.gov.pagopa.rtp.activator.domain.rtp.Rtp;
import it.gov.pagopa.rtp.activator.model.generated.epc.SepaRequestToPayRequestResourceDto;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

class SepaRequestToPayMapperTest {

@Mock
private Rtp rtp;

@InjectMocks
private SepaRequestToPayMapper sepaRequestToPayMapper;

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

@Test
void testToRequestToPay() {
ResourceID resourceId = ResourceID.createNew();
String payerId = "payerId123";
String payeeId = "payeeId123";
String payeeName = "Mario Rossi";
String rtpSpId = "BIC123456";
String iban = "IT60X0542811101000000123456";
String endToEndId = "endToEndId123";
BigDecimal amount = BigDecimal.valueOf(10);
LocalDateTime savingDateTime = LocalDateTime.now();
LocalDate expiryDate = LocalDate.now().plusDays(5);
String description = "Pagamento TARI";
String noticeNumber = "123456";
String payTrxRef = "payTrxRef123";
String flgConf = "flgConf123";

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.intValue());
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);

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().contains(description));
}
}

13 changes: 11 additions & 2 deletions src/test/java/it/gov/pagopa/rtp/activator/utils/Users.java
Original file line number Diff line number Diff line change
@@ -12,11 +12,20 @@ public class Users {
public static final String ACTIVATION_WRITE_ROLE = "write_rtp_activations";
public static final String ACTIVATION_READ_ROLE = "read_rtp_activations";

public static final String SENDER_WRITER_ROLDE = "write_rtp_send";

@Retention(RetentionPolicy.RUNTIME)
@WithMockUser(value = SERVICE_PROVIDER_ID, roles = ACTIVATION_WRITE_ROLE)
public @interface RtpWriter { }
public @interface RtpWriter {
}

@Retention(RetentionPolicy.RUNTIME)
@WithMockUser(value = SERVICE_PROVIDER_ID, roles = ACTIVATION_READ_ROLE)
public @interface RtpReader { }
public @interface RtpReader {
}

@Retention(RetentionPolicy.RUNTIME)
@WithMockUser(value = SERVICE_PROVIDER_ID, roles = SENDER_WRITER_ROLDE)
public @interface RtpSenderWriter {
}
}

0 comments on commit 35df6db

Please sign in to comment.