Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: P4ADEV-1429 invoke service mock C003 #11

Merged
merged 2 commits into from
Dec 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package it.gov.pagopa.payhub.pdnd.anpr.c003.client;

import it.gov.pagopa.payhub.anpr.C003.model.generated.RichiestaE002;
import it.gov.pagopa.payhub.anpr.C003.model.generated.RispostaE002OK;

public interface AnprC003Client {
RispostaE002OK getUserData(RichiestaE002 request);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package it.gov.pagopa.payhub.pdnd.anpr.c003.client;

import it.gov.pagopa.payhub.anpr.C003.model.generated.RichiestaE002;
import it.gov.pagopa.payhub.anpr.C003.model.generated.RispostaE002OK;
import it.gov.pagopa.payhub.pdnd.anpr.c003.service.AnprC003ServiceConfig;
import it.gov.pagopa.payhub.pdnd.anpr.client.AbstractAnprClient;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.stereotype.Component;

@Component
public class AnprC003ClientImpl extends AbstractAnprClient<RichiestaE002, RispostaE002OK> implements AnprC003Client {

private final AnprC003ServiceConfig anprC003ServiceConfig;

public AnprC003ClientImpl(RestTemplateBuilder restTemplateBuilder, AnprC003ServiceConfig anprC003ServiceConfig) {
super(restTemplateBuilder);
this.anprC003ServiceConfig = anprC003ServiceConfig;
}

@Override
protected String getEndpointPath() {
return anprC003ServiceConfig.getUrl();
}

@Override
public RispostaE002OK getUserData(RichiestaE002 request) {
return sendRequest(request, RispostaE002OK.class);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package it.gov.pagopa.payhub.pdnd.anpr.c003.service;

import it.gov.pagopa.payhub.anpr.C003.model.generated.RichiestaE002;
import it.gov.pagopa.payhub.anpr.C003.model.generated.RispostaE002OK;
import it.gov.pagopa.payhub.anpr.C003.model.generated.TipoCriteriRicercaE002;
import it.gov.pagopa.payhub.anpr.C003.model.generated.TipoDatiRichiestaE002;
import it.gov.pagopa.payhub.pdnd.anpr.c003.client.AnprC003Client;
import it.gov.pagopa.payhub.pdnd.anpr.c003.client.AnprC003ClientImpl;
import org.springframework.stereotype.Service;

import java.time.Instant;
import java.util.UUID;

@Service
public class AnprC003Service {

private final AnprC003Client anprC003Client;

public AnprC003Service(AnprC003ClientImpl anprC003Client) {
this.anprC003Client = anprC003Client;
}

public RispostaE002OK getUserData(String idAnpr, String fiscalCode) {
TipoCriteriRicercaE002 searchTypes = TipoCriteriRicercaE002.builder()
.idANPR(idAnpr)
.build();

TipoDatiRichiestaE002 reqDataTypes = TipoDatiRichiestaE002.builder()
.casoUso("C003")
.build();

RichiestaE002 request = RichiestaE002.builder()
.idOperazioneClient(generateIdClientOperation(fiscalCode))
.criteriRicerca(searchTypes)
.datiRichiesta(reqDataTypes)
.build();

return anprC003Client.getUserData(request);
}

private String generateIdClientOperation(String fiscalCode) {
String timestamp = String.valueOf(Instant.now().toEpochMilli());
String uuid = UUID.nameUUIDFromBytes(fiscalCode.getBytes()).toString();
return uuid + "-" + timestamp;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -3,43 +3,27 @@
import it.gov.pagopa.payhub.anpr.C030.model.generated.RichiestaE002;
import it.gov.pagopa.payhub.anpr.C030.model.generated.RispostaE002OK;
import it.gov.pagopa.payhub.pdnd.anpr.c030.service.AnprC030ServiceConfig;
import org.springframework.beans.factory.annotation.Value;
import it.gov.pagopa.payhub.pdnd.anpr.client.AbstractAnprClient;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

@Component
public class AnprC030ClientImpl implements AnprC030Client {
public class AnprC030ClientImpl extends AbstractAnprClient<RichiestaE002, RispostaE002OK> implements AnprC030Client {

@Value("${app.pdnd.anpr.base-url}")
private String anprBasePath;
private final RestTemplate restTemplate;
private final AnprC030ServiceConfig anprC030ServiceConfig;

public AnprC030ClientImpl(RestTemplateBuilder restTemplateBuilder, AnprC030ServiceConfig anprC030ServiceConfig) {
this.restTemplate = restTemplateBuilder.build();
super(restTemplateBuilder);
this.anprC030ServiceConfig = anprC030ServiceConfig;
}

public RispostaE002OK getIdAnprFromFc(RichiestaE002 request) {
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
headers.set("Accept", "application/json");

HttpEntity<RichiestaE002> entity = new HttpEntity<>(request, headers);

ResponseEntity<RispostaE002OK> response = restTemplate.exchange(
anprBasePath + anprC030ServiceConfig.getUrl(),
HttpMethod.POST,
entity,
RispostaE002OK.class
);
@Override
protected String getEndpointPath() {
return anprC030ServiceConfig.getUrl();
}

return response.getBody();
@Override
public RispostaE002OK getIdAnprFromFc(RichiestaE002 request) {
return sendRequest(request, RispostaE002OK.class);
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package it.gov.pagopa.payhub.pdnd.anpr.client;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

public abstract class AbstractAnprClient<R, S> {

@Value("${app.pdnd.anpr.base-url}")
private String anprBasePath;

private final RestTemplate restTemplate;

protected AbstractAnprClient(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.build();
}

protected abstract String getEndpointPath();

public S sendRequest(R request, Class<S> responseType) {
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
headers.set("Accept", "application/json");

HttpEntity<R> entity = new HttpEntity<>(request, headers);

ResponseEntity<S> response = restTemplate.exchange(
anprBasePath + getEndpointPath(),
HttpMethod.POST,
entity,
responseType
);

return response.getBody();
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package it.gov.pagopa.payhub.pdnd.anpr.c003.client;

import it.gov.pagopa.payhub.anpr.C003.model.generated.*;
import it.gov.pagopa.payhub.pdnd.anpr.c003.service.AnprC003ServiceConfig;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.client.RestTemplate;

import java.util.List;

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

class AnprC003ClientImplTest {

@Mock
private RestTemplate restTemplate;

@Mock
private RestTemplateBuilder restTemplateBuilder;

@Mock
private AnprC003ServiceConfig anprC003ServiceConfig;

private AnprC003ClientImpl anprC003Client;

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

when(restTemplateBuilder.build()).thenReturn(restTemplate);

anprC003Client = new AnprC003ClientImpl(restTemplateBuilder, anprC003ServiceConfig);
ReflectionTestUtils.setField(anprC003Client, "anprBasePath", "http://localhost:8080");
}

@Test
void getUserData() {
RichiestaE002 request = RichiestaE002.builder()
.idOperazioneClient("13f32508-7bcb-38d0-8510-d68bf240aa59-1733496758205")
.build();

TipoInfoSoggettoEnte subTypeInfo = TipoInfoSoggettoEnte.builder()
.id("nome")
.chiave("Jed")
.valore(TipoInfoValore.S)
.valoreTesto("Nome del soggetto")
.valoreData("2024-11-02")
.dettaglio("")
.build();

TipoDatiSoggettiEnte subDataTypes = TipoDatiSoggettiEnte.builder()
.infoSoggettoEnte(List.of(subTypeInfo))
.build();

TipoListaSoggetti subTypeList = TipoListaSoggetti.builder()
.datiSoggetto(List.of(subDataTypes))
.build();

RispostaE002OK mockResponse = RispostaE002OK.builder()
.idOperazioneANPR("ANPR-12345")
.listaSoggetti(subTypeList)
.build();

ResponseEntity<RispostaE002OK> responseEntity = ResponseEntity.ok(mockResponse);

when(anprC003ServiceConfig.getUrl()).thenReturn("/test");
when(restTemplate.exchange(
eq("http://localhost:8080/test"),
eq(HttpMethod.POST),
any(),
eq(RispostaE002OK.class)
)).thenReturn(responseEntity);

RispostaE002OK result = anprC003Client.getUserData(request);

assertEquals("ANPR-12345", result.getIdOperazioneANPR());
assertEquals(1, result.getListaSoggetti().getDatiSoggetto().size());
verify(restTemplate, times(1)).exchange(
eq("http://localhost:8080/test"),
eq(HttpMethod.POST),
any(),
eq(RispostaE002OK.class)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package it.gov.pagopa.payhub.pdnd.anpr.c003.service;

import it.gov.pagopa.payhub.anpr.C003.model.generated.*;
import it.gov.pagopa.payhub.pdnd.anpr.c003.client.AnprC003ClientImpl;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

import java.util.List;

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

@ExtendWith(MockitoExtension.class)
class AnprC003ServiceTest {

@Mock
private AnprC003ClientImpl anprC003ClientImpl;

@InjectMocks
private AnprC003Service anprC003Service;

@Test
void getUserData() {
String fiscalCode = "DNTCRL65S67M126K";
String idAnpr = "d20fcd8e-f228-323c-8924-6405b44879bf";

TipoInfoSoggettoEnte subTypeInfo = TipoInfoSoggettoEnte.builder()
.id("nome")
.chiave("Jed")
.valore(TipoInfoValore.S)
.valoreTesto("Nome del soggetto")
.valoreData("2024-11-02")
.dettaglio("")
.build();

TipoDatiSoggettiEnte subDataTypes = TipoDatiSoggettiEnte.builder()
.infoSoggettoEnte(List.of(subTypeInfo))
.build();

TipoListaSoggetti subTypeList = TipoListaSoggetti.builder()
.datiSoggetto(List.of(subDataTypes))
.build();

RispostaE002OK mockResponse = RispostaE002OK.builder()
.idOperazioneANPR("12345")
.listaSoggetti(subTypeList)
.listaAnomalie(null)
.build();

when(anprC003ClientImpl.getUserData(Mockito.any(RichiestaE002.class))).thenReturn(mockResponse);

RispostaE002OK response = anprC003Service.getUserData(idAnpr, fiscalCode);

assertNotNull(response);
assertEquals("Jed", response.getListaSoggetti().getDatiSoggetto().getFirst().getInfoSoggettoEnte().getFirst().getChiave());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ void setUp() {
@Test
void testGetIdAnprFromFc() {
RichiestaE002 request = RichiestaE002.builder()
.idOperazioneClient("ID-ENTE-myHost-1701102800550")
.idOperazioneClient("13f32508-7bcb-38d0-8510-d68bf240aa59-1733496758205")
.build();

RispostaE002OK mockResponse = RispostaE002OK.builder()
Expand Down
Loading