Skip to content

Commit

Permalink
Prima versione del test di caricamento pendenze da CSV
Browse files Browse the repository at this point in the history
  • Loading branch information
nardil committed Aug 5, 2019
1 parent acb37bb commit 3889e0e
Show file tree
Hide file tree
Showing 7 changed files with 240 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<#assign csvUtils = class["it.govpay.core.utils.CSVUtils"].getInstance()>
<#assign csvRecord = csvUtils.getCSVRecord($)>
CSVUtils.isEmpty(csvRecord, i)
{
"idA2A": ${csvUtils.toJsonValue(csvRecord, 0)},
"idPendenza": ${csvUtils.toJsonValue(csvRecord, 1)},
"idDominio": ${csvUtils.toJsonValue(csvRecord, 2)},
"idTipoPendenza": ${csvUtils.toJsonValue(csvRecord, 3)},
"idUnitaOperativa": ${csvUtils.toJsonValue(csvRecord, 4)},
"causale": ${csvUtils.toJsonValue(csvRecord, 5)},
"annoRiferimento": ${csvUtils.toJsonValue(csvRecord, 6)},
"cartellaPagamento": ${csvUtils.toJsonValue(csvRecord, 7)},
<#if !csvUtils.isEmpty(csvRecord, 8)>"datiAllegati": ${csvRecord.get(8)},</#if>
"direzione": ${csvUtils.toJsonValue(csvRecord, 9)},
"divisione": ${csvUtils.toJsonValue(csvRecord, 10)},
"importo": ${csvUtils.toJsonValue(csvRecord, 11)},
"dataValidita": ${csvUtils.toJsonValue(csvRecord, 12)},
"dataScadenza": ${csvUtils.toJsonValue(csvRecord, 13)},
"tassonomiaAvviso": ${csvUtils.toJsonValue(csvRecord, 14)},
"soggettoPagatore": {
"tipo": ${csvUtils.toJsonValue(csvRecord, 15)},
"identificativo": ${csvUtils.toJsonValue(csvRecord, 16)},
"anagrafica": ${csvUtils.toJsonValue(csvRecord, 17)},
"indirizzo": ${csvUtils.toJsonValue(csvRecord, 18)},
"civico": ${csvUtils.toJsonValue(csvRecord, 19)},
"cap": ${csvUtils.toJsonValue(csvRecord, 20)},
"localita": ${csvUtils.toJsonValue(csvRecord, 21)},
"provincia": ${csvUtils.toJsonValue(csvRecord, 22)},
"nazione": ${csvUtils.toJsonValue(csvRecord, 23)},
"email": ${csvUtils.toJsonValue(csvRecord, 24)},
"cellulare": ${csvUtils.toJsonValue(csvRecord, 25)},
},
"voci": [
{
"idVocePendenza": "${csvUtils.toJsonValue(csvRecord, 26)}",
"importo": "${csvUtils.toJsonValue(csvRecord, 27)}",
"descrizione": "${csvUtils.toJsonValue(csvRecord, 28)}",
<#if !csvUtils.isEmpty(csvRecord, 33)>
"tipoEntrata": "${csvUtils.toJsonValue(csvRecord, 33)}"
<#else>
"ibanAccredito": "${csvUtils.toJsonValue(csvRecord, 29)}",
"ibanAppoggio": "${csvUtils.toJsonValue(csvRecord, 30)}",
"tipoContabilita": "${csvUtils.toJsonValue(csvRecord, 31)}",
"codiceContabilita": "${csvUtils.toJsonValue(csvRecord, 32)}"
</#if>
}
<#if !csvUtils.isEmpty(csvRecord, 34)>
,{
"idVocePendenza": "${csvUtils.toJsonValue(csvRecord, 34)}",
"importo": "${csvUtils.toJsonValue(csvRecord, 35)}",
"descrizione": "${csvUtils.toJsonValue(csvRecord, 36)}",
<#if !csvUtils.isEmpty(csvRecord, 41)>
"tipoEntrata": "${csvUtils.toJsonValue(csvRecord, 41)}"
<#else>
"ibanAccredito": "${csvUtils.toJsonValue(csvRecord, 37)}",
"ibanAppoggio": "${csvUtils.toJsonValue(csvRecord, 38)}",
"tipoContabilita": "${csvUtils.toJsonValue(csvRecord, 39)}",
"codiceContabilita": "${csvUtils.toJsonValue(csvRecord, 40)}"
</#if>
}
</#if>
<#if !csvUtils.isEmpty(csvRecord, 42)>
,{
"idVocePendenza": "${csvUtils.toJsonValue(csvRecord, 42)}",
"importo": "${csvUtils.toJsonValue(csvRecord, 43)}",
"descrizione": "${csvUtils.toJsonValue(csvRecord, 44)}",
<#if !csvUtils.isEmpty(csvRecord, 49)>
"tipoEntrata": "${csvUtils.toJsonValue(csvRecord, 49)}"
<#else>
"ibanAccredito": "${csvUtils.toJsonValue(csvRecord, 45)}",
"ibanAppoggio": "${csvUtils.toJsonValue(csvRecord, 46)}",
"tipoContabilita": "${csvUtils.toJsonValue(csvRecord, 47)}",
"codiceContabilita": "${csvUtils.toJsonValue(csvRecord, 48)}"
</#if>
}
</#if>
<#if !csvUtils.isEmpty(csvRecord, 50)>
,{
"idVocePendenza": "${csvUtils.toJsonValue(csvRecord, 50)}",
"importo": "${csvUtils.toJsonValue(csvRecord, 51)}",
"descrizione": "${csvUtils.toJsonValue(csvRecord, 52)}",
<#if !csvUtils.isEmpty(csvRecord, 57)>
"tipoEntrata": "${csvUtils.toJsonValue(csvRecord, 57)}"
<#else>
"ibanAccredito": "${csvUtils.toJsonValue(csvRecord, 53)}",
"ibanAppoggio": "${csvUtils.toJsonValue(csvRecord, 54)}",
"tipoContabilita": "${csvUtils.toJsonValue(csvRecord, 55)}",
"codiceContabilita": "${csvUtils.toJsonValue(csvRecord, 56)}"
</#if>
}
</#if>
<#if !csvUtils.isEmpty(csvRecord, 58)>
,{
"idVocePendenza": "${csvUtils.toJsonValue(csvRecord, 58)}",
"importo": "${csvUtils.toJsonValue(csvRecord, 59)}",
"descrizione": "${csvUtils.toJsonValue(csvRecord, 60)}",
<#if !csvUtils.isEmpty(csvRecord, 85)>
"tipoEntrata": "${csvUtils.toJsonValue(csvRecord, 65)}"
<#else>
"ibanAccredito": "${csvUtils.toJsonValue(csvRecord, 61)}",
"ibanAppoggio": "${csvUtils.toJsonValue(csvRecord, 62)}",
"tipoContabilita": "${csvUtils.toJsonValue(csvRecord, 63)}",
"codiceContabilita": "${csvUtils.toJsonValue(csvRecord, 64)}"
</#if>
}
</#if>
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<#assign csvUtils = class["it.govpay.core.utils.CSVUtils"].getInstance() />
<#assign idA2A = applicazione.getCodApplicazione() />
<#assign idPendenza = versamento.getCodVersamentoEnte() />
<#assign idDominio = dominio.getCodDominio() />
<#assign tipoPendenza = versamento.getIdTipoPendenza() />
<#assign numeroAvviso = versamento.getNumeroAvviso()! />
<#if numeroAvviso?has_content>
<#assign pdfAvviso = idDominio + "_" + numeroAvviso + ".pdf" />
</#if>
<#assign tipo = versamento.getAnagraficaDebitore().getTipo().toString() />
<#assign identificativo = versamento.getAnagraficaDebitore().getCodUnivoco()! />
<#assign anagrafica = versamento.getAnagraficaDebitore().getRagioneSociale()! />
<#assign indirizzo = versamento.getAnagraficaDebitore().getIndirizzo()! />
<#assign civico = versamento.getAnagraficaDebitore().getCivico()! />
<#assign cap = versamento.getAnagraficaDebitore().getCap()! />
<#assign localita = versamento.getAnagraficaDebitore().getLocalita()! />
<#assign provincia = versamento.getAnagraficaDebitore().getProvincia()! />
<#assign nazione = versamento.getAnagraficaDebitore().getNazione()! />
<#assign email = versamento.getAnagraficaDebitore().getEmail()! />
<#assign cellulare = versamento.getAnagraficaDebitore().getCellulare()! />
<#assign csvRecord = csvUtils.toCsv(idA2A, idPendenza, idDominio, tipoPendenza, numeroAvviso, pdfAvviso, tipo, identificativo, anagrafica, indirizzo, civico, cap, localita, provincia, nazione, email, cellulare) />
${csvRecord}

Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
idA2A,idPendenza,idDominio,tipoPendenza,idUnitaOperativa,causale,annoRiferimento,cartellaPagamento,datiAllegati,direzione,divisione,importo,dataValidita,dataScadenza,tassonomiaAvviso,tipoSoggettoPagatore,identificativoPagatore,anagraficaPagatore,indirizzoPagatore,civicoPagatore,capPagatore,localitaPagatore,provinciaPagatore,nazionePagatore,emailPagatore,cellularePagatore,idVoce1,importoVoce1,descrizioneVoce1,ibanAccreditoVoce1,ibanAppoggioVoce1,tipoContabilitaVoce1,codiceContabilitaVoce1,tipoVoce1,idVoce2,importoVoce2,descrizioneVoce2,ibanAccreditoVoce2,ibanAppoggioVoce2,tipoContabilitaVoce2,codiceContabilitaVoce2,tipoVoce2,idVoce3,importoVoce3,descrizioneVoce3,ibanAccreditoVoce3,ibanAppoggioVoce3,tipoContabilitaVoce3,codiceContabilitaVoce3,tipoVoce3,idVoce4,importoVoce4,descrizioneVoce4,ibanAccreditoVoce4,ibanAppoggioVoce4,tipoContabilitaVoce4,codiceContabilitaVoce4,tipoVoce4,idVoce5,importoVoce5,descrizioneVoce5,ibanAccreditoVoce5,ibanAppoggioVoce5,tipoContabilitaVoce5,codiceContabilitaVoce5,tipoVoce5
{idA2A},{idPendenza},{idDominio},{tipoPendenza},,Tassa Passo Carrabile n. abc00000,2010,CRT-001,{ ""foo"": ""baz"", ""bar"": true },,,61.25,2019-12-30,2020-12-30,Servizi erogati da altri enti,F,DRCGNN12A46A326K,Giovanna D'Arco,Viale Monterosa,11Bis,340,Roma,RM,IT,laPulzelladOrleans@yahoo.fr,,1,61.25,Tassa Passo Carrabile n. abc00000,{ibanAccredito},,ALTRO,CodiceContabilita,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
Feature: Caricamento tracciato CSV

Background:

* callonce read('classpath:utils/common-utils.feature')
* callonce read('classpath:configurazione/v1/anagrafica.feature')

* def freemarker_request = encodeBase64InputStream(read('msg/freemarker-request.ftl'))
* def freemarker_response = encodeBase64InputStream(read('msg/freemarker-response.ftl'))
* def response_csv_header =


Given url backofficeBaseurl
And path 'configurazione',
And headers basicAutenticationHeader
And request
"""
[
{
op: "replace",
path: "/tracciato_csv",
value: {
responseHeader: "idA2A,idPendenza,idDominio,tipoPendenza,numeroAvviso,pdfAvviso,tipoSoggettoPagatore,identificativoPagatore,anagraficaPagatore,emailPagatore,indirizzoPagatore,civicoPagatore,capPagatore,localitaPagatore,provinciaPagatore"
freemarkerRequest: freemarker_request,
freemarkerResponse: freemarker_response
}
}
]
"""
When method patch
Then status 200

* configure retry = { count: 10, interval: 1000 }

Scenario: Pagamento pendenza precaricata anonimo

* def idPendenza = getCurrentTimeMillis()
* def tracciato = karate.readAsString('classpath:test/api/backoffice/v1/tracciati/post/msg/tracciato-pendenze.csv')
* def tracciato = replace(tracciato,"{idA2A}", idA2A);
* def tracciato = replace(tracciato,"{idPendenza}", idPendenza);
* def tracciato = replace(tracciato,"{idDominio}", idDominio);
* def tracciato = replace(tracciato,"{ibanAccredito}", ibanAccredito);
* def tracciato = replace(tracciato,"{tipoPendenza}", codEntrataSegreteria);

Given url backofficeBaseurl
And path 'pendenze', 'tracciati'
And header Content-type = text/csv
And headers basicAutenticationHeader
And request tracciato
When method post
Then status 201

* def idTracciato = response.id

Given url backofficeBaseurl
And path 'pendenze', 'tracciati', idTracciato
And headers basicAutenticationHeader
And retry until response.stato == 'ESEGUITO'
When method get
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Feature: Pagamento avviso precaricato
Feature: Caricamento tracciato JSON

Background:

Expand All @@ -9,7 +9,6 @@ Background:
Scenario: Pagamento pendenza precaricata anonimo

* def idPendenza = getCurrentTimeMillis()
* def tracciato = read('classpath:test/api/backoffice/v1/tracciati/post/msg/tracciato-pendenze.json')

Given url backofficeBaseurl
And path 'pendenze', 'tracciati'
Expand Down
7 changes: 7 additions & 0 deletions integration-test/src/test/java/utils/common-utils.feature
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,10 @@ Scenario:
return Base64.getEncoder().encodeToString(IOUtils.toByteArray(inputstream));
}
"""

* def replace =
"""
function(text,placeholder,value) {
return text.replace(placeholder,value)
}
"""
40 changes: 40 additions & 0 deletions jars/core/src/main/java/it/govpay/core/utils/CSVUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,16 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.csv.CSVRecord;

public class CSVUtils {

public static long countLines(byte[] tracciato) throws IOException {
Expand Down Expand Up @@ -50,4 +57,37 @@ public static List<byte[]> splitCSV(byte[] tracciato, long skip) throws IOExcept
}
return lst;
}

public static CSVRecord getCSVRecord(String csvEntry) {
try {
CSVParser p = CSVParser.parse(csvEntry, CSVFormat.RFC4180);
return p.getRecords().get(0);
} catch (IOException ioe) {
return null;
}
}

public static boolean isEmpty(CSVRecord record, int position) {
try {
return record.get(position).isEmpty();
} catch (Throwable t) {
return true;
}
}

public static String toJsonValue(CSVRecord record, int position) {
if(isEmpty(record, position))
return "null";
else
return "\"" + record.get(position) + "\"";
}

public static String toCsv(String ...strings) throws IOException {
StringWriter writer = new StringWriter();
CSVPrinter printer = new CSVPrinter(writer, CSVFormat.RFC4180);
printer.printRecord(Arrays.asList(strings));
printer.flush();
printer.close();
return writer.toString();
}
}

0 comments on commit 3889e0e

Please sign in to comment.