Skip to content

Commit

Permalink
Merge pull request #28 from pagopa/update-unit-tests
Browse files Browse the repository at this point in the history
[PRDP-70] fix: Update unit tests
  • Loading branch information
pasqualespica authored Oct 6, 2023
2 parents 478c9f1 + acb8a3d commit 21983aa
Show file tree
Hide file tree
Showing 11 changed files with 1,092 additions and 636 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.QueueOutput;
import com.microsoft.azure.functions.annotation.QueueTrigger;
import it.gov.pagopa.receipt.pdf.generator.client.ReceiptCosmosClient;
import it.gov.pagopa.receipt.pdf.generator.client.impl.ReceiptCosmosClientImpl;
import it.gov.pagopa.receipt.pdf.generator.entity.event.BizEvent;
import it.gov.pagopa.receipt.pdf.generator.entity.receipt.ReasonError;
Expand All @@ -33,6 +34,19 @@ public class GenerateReceiptPdf {

private static final int MAX_NUMBER_RETRY = Integer.parseInt(System.getenv().getOrDefault("COSMOS_RECEIPT_QUEUE_MAX_RETRY", "5"));

private final GenerateReceiptPdfService generateReceiptPdfService;
private final ReceiptCosmosClient receiptCosmosClient;

public GenerateReceiptPdf() {
this.generateReceiptPdfService = new GenerateReceiptPdfServiceImpl();
this.receiptCosmosClient = ReceiptCosmosClientImpl.getInstance();
}

GenerateReceiptPdf(GenerateReceiptPdfService generateReceiptPdfService, ReceiptCosmosClient receiptCosmosClient) {
this.generateReceiptPdfService = generateReceiptPdfService;
this.receiptCosmosClient = receiptCosmosClient;
}

/**
* This function will be invoked when a Queue trigger occurs
* #
Expand Down Expand Up @@ -99,55 +113,17 @@ public void processGenerateReceipt(
Receipt receipt = getReceipt(context, bizEvent);

//Verify receipt status
if (isReceiptValid(receipt)) {
logger.info("[{}] Receipt with id {} not in INSERTED or RETRY (status: {}) or have null event data (eventData is null: {})",
if (isReceiptInInValidState(receipt)) {
logger.info("[{}] Receipt with id {} is discarded from generation because it is not in INSERTED or RETRY (status: {}) or have null event data (eventData is null: {})",
context.getFunctionName(),
receipt.getEventId(),
receipt.getStatus(),
receipt.getEventData() == null);
return;
}

GenerateReceiptPdfService service = new GenerateReceiptPdfServiceImpl();

//Verify if debtor's and payer's fiscal code are the same
String debtorCF = receipt.getEventData().getDebtorFiscalCode();

if (debtorCF != null) {
logger.info("[{}] Generating pdf for Receipt with id {} and bizEvent with id {}",
context.getFunctionName(),
receipt.getId(),
bizEvent.getId());

//Generate and save PDF
PdfGeneration pdfGeneration = service.generateReceipts(receipt, bizEvent);

//Verify PDF generation success
boolean success = service.verifyAndUpdateReceipt(receipt, pdfGeneration);
if (success) {
receipt.setStatus(ReceiptStatusType.GENERATED);
receipt.setGenerated_at(System.currentTimeMillis());
logger.info("[{}] Receipt with id {} being saved with status {}",
context.getFunctionName(),
receipt.getEventId(),
receipt.getStatus());
} else {
ReceiptStatusType receiptStatusType;
//Verify if the max number of retry have been passed
if (receipt.getNumRetry() > MAX_NUMBER_RETRY) {
receiptStatusType = ReceiptStatusType.FAILED;
} else {
receiptStatusType = ReceiptStatusType.RETRY;
receipt.setNumRetry(receipt.getNumRetry() + 1);
requeueMessage.setValue(bizEventMessage);
}
receipt.setStatus(receiptStatusType);
logger.error("[{}] Error generating receipt for Receipt {} will be saved with status {}",
context.getFunctionName(),
receipt.getId(),
receiptStatusType);
}
} else {
if (debtorCF == null) {
String errorMessage = String.format(
"Error processing receipt with id %s : debtor's fiscal code is null",
receipt.getEventId()
Expand All @@ -157,19 +133,52 @@ public void processGenerateReceipt(
ReasonError reasonError = new ReasonError(HttpStatus.SC_INTERNAL_SERVER_ERROR, errorMessage);
receipt.setReasonErr(reasonError);
logger.error("[{}] Error generating PDF: {}", context.getFunctionName(), errorMessage);
documentdb.setValue(receipt);
return;
}

logger.info("[{}] Generating pdf for Receipt with id {} and bizEvent with id {}",
context.getFunctionName(),
receipt.getId(),
bizEvent.getId());
//Generate and save PDF
PdfGeneration pdfGeneration = generateReceiptPdfService.generateReceipts(receipt, bizEvent);

//Verify PDF generation success
boolean success = generateReceiptPdfService.verifyAndUpdateReceipt(receipt, pdfGeneration);
if (success) {
receipt.setStatus(ReceiptStatusType.GENERATED);
receipt.setGenerated_at(System.currentTimeMillis());
logger.info("[{}] Receipt with id {} being saved with status {}",
context.getFunctionName(),
receipt.getEventId(),
receipt.getStatus());
} else {
ReceiptStatusType receiptStatusType;
//Verify if the max number of retry have been passed
if (receipt.getNumRetry() > MAX_NUMBER_RETRY) {
receiptStatusType = ReceiptStatusType.FAILED;
} else {
receiptStatusType = ReceiptStatusType.RETRY;
receipt.setNumRetry(receipt.getNumRetry() + 1);
requeueMessage.setValue(bizEventMessage);
}
receipt.setStatus(receiptStatusType);
logger.error("[{}] Error generating receipt for Receipt {} will be saved with status {}",
context.getFunctionName(),
receipt.getId(),
receiptStatusType);
}
documentdb.setValue(receipt);
}

private boolean isReceiptValid(Receipt receipt) {
private boolean isReceiptInInValidState(Receipt receipt) {
return receipt.getEventData() == null
|| (!receipt.getStatus().equals(ReceiptStatusType.INSERTED) && !receipt.getStatus().equals(ReceiptStatusType.RETRY));
}

private Receipt getReceipt(ExecutionContext context, BizEvent bizEvent) throws ReceiptNotFoundException {
Receipt receipt;
ReceiptCosmosClientImpl receiptCosmosClient = ReceiptCosmosClientImpl.getInstance();
//Retrieve receipt from CosmosDB
try {
receipt = receiptCosmosClient.getReceiptDocument(bizEvent.getId());
Expand All @@ -181,7 +190,7 @@ private Receipt getReceipt(ExecutionContext context, BizEvent bizEvent) throws R

if (receipt == null) {
String errorMsg = "[{}] Receipt retrieved with the biz-event id {} is null";
logger.debug(errorMsg, context.getFunctionName(), bizEvent.getId());
logger.error(errorMsg, context.getFunctionName(), bizEvent.getId());
throw new ReceiptNotFoundException(errorMsg);
}
return receipt;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package it.gov.pagopa.receipt.pdf.generator.entity.receipt;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CartItem {
private String subject;
private String payeeName;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package it.gov.pagopa.receipt.pdf.generator.entity.receipt;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;

import java.util.List;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class EventData {
private String payerFiscalCode;
private String debtorFiscalCode;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package it.gov.pagopa.receipt.pdf.generator.entity.receipt;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class IOMessageData {
private String idMessageDebtor;
private String idMessagePayer;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package it.gov.pagopa.receipt.pdf.generator.entity.receipt;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ReasonError {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package it.gov.pagopa.receipt.pdf.generator.entity.receipt;

import it.gov.pagopa.receipt.pdf.generator.entity.receipt.enumeration.ReceiptStatusType;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Receipt {

private String eventId;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package it.gov.pagopa.receipt.pdf.generator.entity.receipt;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ReceiptMetadata {

private String name;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package it.gov.pagopa.receipt.pdf.generator.model;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;

/**
* Model class for PDF generation process' response
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PdfGeneration {

private boolean generateOnlyDebtor;
Expand Down
Loading

0 comments on commit 21983aa

Please sign in to comment.