Skip to content

Commit

Permalink
Issue #392
Browse files Browse the repository at this point in the history
Corretta gestione degli errori di parsing dei messaggi di risposta del servizio di verifica per allineare il comportamento del sistema
a quanto fatto per gli altri errori che possono accadere invocando il servizio di verifica.
Ora se il parametro 'it.govpay.context.aggiornamentoValiditaMandatorio' e' impostato a true, l'errore viene rilanciato altrimenti
viene utilizzata per il pagamento la pendenza originale non aggiornata.
Corretto problema nella lettura della property 'it.govpay.context.aggiornamentoValiditaMandatorio' nella configurazione di GovPay.
  • Loading branch information
pintorig committed Sep 6, 2021
1 parent 3142840 commit b035689
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 1 deletion.
4 changes: 4 additions & 0 deletions ear/src/main/application/properties/govpay.properties
Expand Up @@ -152,6 +152,10 @@ it.govpay.context.savataggioDumpSuFile.enabled=${it.govpay.context.savataggioDum
# Gestione creazione giornale eventi
it.govpay.context.giornaleEventi.enabled=${it.govpay.context.giornaleEventi.enabled}

# Gestione della data Validita. Se true, una pendenza con data di validita' decorsa
# risulta scaduta se non si riesce ad aggiornare.
it.govpay.context.aggiornamentoValiditaMandatorio=${it.govpay.context.aggiornamentoValiditaMandatorio}


# Govpay API BackOffice

Expand Down
Expand Up @@ -5,6 +5,8 @@ Background:
* callonce read('classpath:utils/common-utils.feature')
* callonce read('classpath:configurazione/v1/anagrafica.feature')

* def backofficeBasicBaseurl = getGovPayApiBaseUrl({api: 'backoffice', versione: 'v1', autenticazione: 'basic'})

Scenario: Pagamento avviso precaricato autenticato basic

* def idPendenza = getCurrentTimeMillis()
Expand Down Expand Up @@ -69,3 +71,73 @@ And match response.rpp[0].rpt.soggettoVersante ==
"e-mailVersante":"#(pagamentoPost.soggettoVersante.email)"
}
"""

Scenario: Pagamento di una pendenza precaricata da aggiornare e parametro aggiornamento mandatorio con valore di default = false

* def idPendenza = getCurrentTimeMillis()
* def pendenzeBaseurl = getGovPayApiBaseUrl({api: 'pendenze', versione: 'v2', autenticazione: 'basic'})
* def basicAutenticationHeader = getBasicAuthenticationHeader( { username: idA2A, password: pwdA2A } )
* def pendenza = read('classpath:test/api/pendenza/v2/pendenze/put/msg/pendenza-put_monovoce_riferimento.json')

* set pendenza.dataValidita = '1900-01-31'
* set pendenza.dataScadenza = '2999-01-31'

Given url pendenzeBaseurl
And path 'pendenze', idA2A, idPendenza
And headers basicAutenticationHeader
And request pendenza
When method put
Then status 201

* def pendenzaPutResponse = response
* def numeroAvviso = response.numeroAvviso

Given url pendenzeBaseurl
And path '/pendenze', idA2A, idPendenza
And headers basicAutenticationHeader
When method get
Then status 200

# configurazione del servizio verifica che risponde errore in fase di aggiornamento

* def applicazione = read('classpath:configurazione/v1/msg/applicazione.json')
* set applicazione.servizioIntegrazione.url = ente_api_url + "/vERROREVALIDAZIONE"

Given url backofficeBaseurl
And path 'applicazioni', idA2A
And headers gpAdminBasicAutenticationHeader
And request applicazione
When method put
Then assert responseStatus == 200 || responseStatus == 201

* call read('classpath:configurazione/v1/operazioni-resetCache.feature')

* def pagamentiBaseurl = getGovPayApiBaseUrl({api: 'pagamento', versione: 'v2', autenticazione: 'basic'})
* def pagamentoPost = read('classpath:test/api/pagamento/v2/pagamenti/post/msg/pagamento-post_riferimento_pendenza.json')
* set pagamentoPost.soggettoVersante =
"""
{
"tipo": "F",
"identificativo": "RSSMRA30A01H501I",
"anagrafica": "Mario Rossi",
"indirizzo": "Piazza della Vittoria",
"civico": "10/A",
"cap": 0,
"localita": "Roma",
"provincia": "Roma",
"nazione": "IT",
"email": "mario.rossi@host.eu",
"cellulare": "+39 000-1234567"
}
"""

* def basicAutenticationHeader = getBasicAuthenticationHeader( { username: idA2A, password: pwdA2A } )

Given url pagamentiBaseurl
And path '/pagamenti'
And headers basicAutenticationHeader
And request pagamentoPost
When method post
Then status 201
And match response == { id: '#notnull', location: '#notnull', redirect: '#notnull', idSession: '#notnull' }

18 changes: 18 additions & 0 deletions integration-test/src/test/java/utils/mock-ente.feature
Expand Up @@ -83,6 +83,24 @@ Scenario: pathMatches(pagamentiPath+'/vTP/pendenze/{idDominio}/{idTipoPendenza}'
* eval pendenza.idTipoPendenza = 'CODENTRATA'
* def response = pendenza

# Errore validazione
Scenario: pathMatches(pagamentiPath+'/vERROREVALIDAZIONE/pendenze/{idA2A}/{idPendenza}') && methodIs('get')
* def responseStatus = 200
* def response =
"""
<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode xsi:type = "xsd:string">SOAP-ENV:Client</faultcode>
<faultstring xsi:type = "xsd:string">Failed to locate method</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
"""

# Errore interno
Scenario: pathMatches(pagamentiPath+'/vERROR/pendenze/{idDominio}/{idTipoPendenza}') && methodIs('post')
* def responseStatus = 500
Expand Down
2 changes: 1 addition & 1 deletion jars/core/src/main/java/it/govpay/core/business/Rpt.java
Expand Up @@ -129,7 +129,7 @@ public List<it.govpay.bd.model.Rpt> avviaTransazione(List<Versamento> versamenti
log.warn("Aggiornamento del versamento [" + codVersamentoEnte + "] applicazione [" + codApplicazione + "] fallito: errore di interazione con il servizio di verifica.");
throw new GovPayException(EsitoOperazione.VER_014, codApplicazione, codVersamentoEnte, e.getMessage());
} catch (VersamentoNonValidoException e) {
log.warn("Aggiornamento del versamento [" + codVersamentoEnte + "] applicazione [" + codApplicazione + "] fallito: errore di validazine dei dati ricevuti dal servizio di verifica.");
log.warn("Aggiornamento del versamento [" + codVersamentoEnte + "] applicazione [" + codApplicazione + "] fallito: errore di validazione dei dati ricevuti dal servizio di verifica.");
throw new GovPayException(EsitoOperazione.VER_014, codApplicazione, codVersamentoEnte, e.getMessage());
}
}
Expand Down
Expand Up @@ -200,6 +200,9 @@ public GovpayConfig(InputStream is) throws Exception {

this.batchCaricamentoTracciatiNotificaPagamenti = false;
this.ricercaRiconciliazioniIdFlussoCaseInsensitive = false;

this.aggiornamentoValiditaMandatorio = false;

try {

// Recupero il property all'interno dell'EAR
Expand Down Expand Up @@ -597,6 +600,10 @@ public void readProperties() throws Exception {
if(ricercaRiconciliazioniIdFlussoCaseInsensitiveString != null && Boolean.valueOf(ricercaRiconciliazioniIdFlussoCaseInsensitiveString))
this.ricercaRiconciliazioniIdFlussoCaseInsensitive = true;

String aggiornamentoValiditaMandatorioString = getProperty("it.govpay.context.aggiornamentoValiditaMandatorio", this.props, false, log);
if(aggiornamentoValiditaMandatorioString != null && Boolean.valueOf(aggiornamentoValiditaMandatorioString))
this.aggiornamentoValiditaMandatorio = true;

} catch (Exception e) {
log.error("Errore di inizializzazione: " + e.getMessage());
throw e;
Expand Down
Expand Up @@ -227,6 +227,10 @@ public static Versamento aggiornaVersamento(Versamento versamento) throws Versam
// Versamento sconosciuto all'ente (bug dell'ente?). Controllo se e' mandatoria o uso quel che ho
if(GovpayConfig.getInstance().isAggiornamentoValiditaMandatorio())
throw new VersamentoScadutoException(versamento.getApplicazione(configWrapper).getCodApplicazione(), codVersamentoEnte, versamento.getDataScadenza());
} catch (VersamentoNonValidoException e) {
// Versamento non valido per errori di validazione, se e' mandatorio l'aggiornamento rilancio l'eccezione altrimenti uso quello che ho
if(GovpayConfig.getInstance().isAggiornamentoValiditaMandatorio())
throw e;
}
} else if(GovpayConfig.getInstance().isAggiornamentoValiditaMandatorio())
// connettore verifica non definito, versamento non aggiornabile
Expand Down

0 comments on commit b035689

Please sign in to comment.