Skip to content

Commit

Permalink
[PAGOPA-2113] chore: Resolve review issue
Browse files Browse the repository at this point in the history
  • Loading branch information
cap-ang committed Sep 18, 2024
1 parent 6a5ef9d commit 4e4312c
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 87 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,6 @@ public void insert(String key, String value, long ttl, ChronoUnit chronoUnit) {
this.redisSimpleTemplate.opsForValue().set(key, value, Duration.of(ttl, chronoUnit));
}

public void insert(String key, String value, long ttl, ChronoUnit chronoUnit, boolean deleteIfAlreadyExists) {
if(deleteIfAlreadyExists && hasKey(key))
this.delete(key);
this.redisSimpleTemplate.opsForValue().set(key, value, Duration.of(ttl, chronoUnit));
}

public <T> T read(String key, Class<T> clazz) {
T result = null;
try {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
package it.gov.pagopa.wispconverter.service;

import it.gov.pagopa.wispconverter.controller.ReceiptController;
import it.gov.pagopa.wispconverter.controller.model.RecoveryReceiptPaymentResponse;
import it.gov.pagopa.wispconverter.controller.model.RecoveryReceiptResponse;
import it.gov.pagopa.wispconverter.exception.AppErrorCodeMessageEnum;
import it.gov.pagopa.wispconverter.exception.AppException;
import it.gov.pagopa.wispconverter.repository.CacheRepository;
import it.gov.pagopa.wispconverter.repository.RTRepository;
import it.gov.pagopa.wispconverter.repository.ReEventRepository;
import it.gov.pagopa.wispconverter.repository.model.RTEntity;
import it.gov.pagopa.wispconverter.repository.model.ReEventEntity;
import it.gov.pagopa.wispconverter.repository.model.SessionIdEntity;
import it.gov.pagopa.wispconverter.repository.model.enumz.InternalStepStatus;
import it.gov.pagopa.wispconverter.service.model.ReceiptDto;
import it.gov.pagopa.wispconverter.service.model.re.ReEventDto;
import it.gov.pagopa.wispconverter.util.Constants;
import it.gov.pagopa.wispconverter.util.MDCUtil;
Expand All @@ -27,7 +24,6 @@
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.CompletableFuture;
Expand All @@ -43,18 +39,12 @@ public class RecoveryService {

private static final String RECOVERY_VALID_START_DATE = "2024-09-03";

private static final String MOCK_NOTICE_NUMBER = "348000000000000000";

private static final List<String> BUSINESS_PROCESSES = List.of("receipt-ok", "receipt-ko", "ecommerce-hang-timeout-trigger");

private final ReceiptController receiptController;
private final ReceiptService receiptService;

private final RTRepository rtRepository;

private final ReEventRepository reEventRepository;

private final CacheRepository cacheRepository;

private final ReService reService;

private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
Expand Down Expand Up @@ -146,11 +136,10 @@ public int recoverMissingRedirect(ZonedDateTime dateFrom, ZonedDateTime dateTo)
ReEventEntity reEvent = reEventList.get(0);
String iuv = reEvent.getIuv();
String ccp = reEvent.getCcp();
// String noticeNumber = reEvent.getNoticeNumber(); always null in RPT_ACCETTATA_NODO, the NAV is created after /redirect call!
String ci = reEvent.getDomainId();

log.info("[RECOVER-MISSING-REDIRECT] Recovery with receipt-ko for ci = {}, iuv = {}, ccp = {}, sessionId = {}", ci, iuv, ccp, sessionId);
this.recoverReceiptKO(ci, MOCK_NOTICE_NUMBER, iuv, sessionId, ccp, dateFromString, dateToString);
this.recoverReceiptKO(ci, iuv, ccp, sessionId, dateFromString, dateToString);
}
}

Expand Down Expand Up @@ -180,14 +169,13 @@ private boolean recoverReceiptKOByRecoveryPayment(String dateFrom, String dateTo
int numberOfEvents = filteredEvents.size();
if (numberOfEvents > 0) {
ReEventEntity event = filteredEvents.get(numberOfEvents - 1);
String noticeNumber = event.getNoticeNumber();
String sessionId = event.getSessionId();

log.info("[RECOVERY-MISSING-RT] Recovery with receipt-ko for ci = {}, iuv = {}, ccp = {}, sessionId = {}", ci, iuv, ccp, sessionId);
this.recoverReceiptKO(ci, noticeNumber, iuv, sessionId, ccp, dateFrom, dateTo);
this.recoverReceiptKO(ci, iuv, ccp, sessionId, dateFrom, dateTo);
}
} catch (Exception e) {
generateRE(Constants.PAA_INVIA_RT, "Failure", InternalStepStatus.RT_END_RECONCILIATION_PROCESS, ci, iuv, null, ccp, null);
generateRE(Constants.PAA_INVIA_RT, "Failure", InternalStepStatus.RT_END_RECONCILIATION_PROCESS, ci, iuv, ccp, null);
throw new AppException(e, AppErrorCodeMessageEnum.ERROR, e.getMessage());
}
}
Expand All @@ -196,35 +184,26 @@ private boolean recoverReceiptKOByRecoveryPayment(String dateFrom, String dateTo
}

// check if there is a successful RT submission, if there isn't prepare cached data and send receipt-ko
public void recoverReceiptKO(String ci, String noticeNumber, String iuv, String sessionId, String ccp, String dateFrom, String dateTo) {
public void recoverReceiptKO(String ci, String iuv, String ccp, String sessionId, String dateFrom, String dateTo) {
// search by sessionId, then filter by status=RT_SEND_SUCCESS. If there is zero, then proceed
List<ReEventEntity> reEventsRT = reEventRepository.findBySessionIdAndStatus(dateFrom, dateTo, sessionId, STATUS_RT_SEND_SUCCESS);

if (reEventsRT.isEmpty()) {
String navToIuvMapping = String.format(DecouplerService.MAP_CACHING_KEY_TEMPLATE, ci, noticeNumber);
String iuvToSessionIdMapping = String.format(DecouplerService.CACHING_KEY_TEMPLATE, ci, iuv);
this.cacheRepository.insert(navToIuvMapping, iuvToSessionIdMapping, this.requestIDMappingTTL, ChronoUnit.MINUTES,true);
this.cacheRepository.insert(iuvToSessionIdMapping, sessionId, this.requestIDMappingTTL, ChronoUnit.MINUTES,true);

MDC.put(Constants.MDC_BUSINESS_PROCESS, "receipt-ko");
generateRE(Constants.PAA_INVIA_RT, null, InternalStepStatus.RT_START_RECONCILIATION_PROCESS, ci, iuv, noticeNumber, ccp, sessionId);
String receiptKoRequest = ReceiptDto.builder()
.fiscalCode(ci)
.noticeNumber(noticeNumber)
.build()
.toString();
generateRE(Constants.PAA_INVIA_RT, null, InternalStepStatus.RT_START_RECONCILIATION_PROCESS, ci, iuv, ccp, sessionId);

try {
this.receiptController.receiptKo(receiptKoRequest);
this.receiptService.sendRTKoFromSessionId(sessionId, InternalStepStatus.NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION);
} catch (Exception e) {
generateRE(Constants.PAA_INVIA_RT, "Failure", InternalStepStatus.RT_END_RECONCILIATION_PROCESS, ci, iuv, noticeNumber, ccp, sessionId);
generateRE(Constants.PAA_INVIA_RT, "Failure", InternalStepStatus.RT_END_RECONCILIATION_PROCESS, ci, iuv, ccp, sessionId);
throw new AppException(e, AppErrorCodeMessageEnum.ERROR, e.getMessage());
}
generateRE(Constants.PAA_INVIA_RT, "Success", InternalStepStatus.RT_END_RECONCILIATION_PROCESS, ci, iuv, noticeNumber, ccp, sessionId);
generateRE(Constants.PAA_INVIA_RT, "Success", InternalStepStatus.RT_END_RECONCILIATION_PROCESS, ci, iuv, ccp, sessionId);
MDC.remove(Constants.MDC_BUSINESS_PROCESS);
}
}

private void generateRE(String primitive, String operationStatus, InternalStepStatus status, String domainId, String iuv, String noticeNumber, String ccp, String sessionId) {
private void generateRE(String primitive, String operationStatus, InternalStepStatus status, String domainId, String iuv, String ccp, String sessionId) {

// setting data in MDC for next use
ReEventDto reEvent = ReUtil.getREBuilder()
Expand All @@ -235,7 +214,7 @@ private void generateRE(String primitive, String operationStatus, InternalStepSt
.domainId(domainId)
.iuv(iuv)
.ccp(ccp)
.noticeNumber(noticeNumber)
.noticeNumber(null)
.build();
reService.addRe(reEvent);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,38 +42,4 @@ void hasKey() {
cacheRepository.hasKey("key");
verify(redisSimpleTemplate, times(1)).hasKey(eq("key"));
}


@Test
void testInsertWhenDeleteIfAlreadyExistsTrueAndKeyExists() {
// Arrange
String key = "testKey";
String value = "testValue";
long ttl = 5;

when(redisSimpleTemplate.hasKey(key)).thenReturn(true);

// Act
cacheRepository.insert(key, value, ttl, ChronoUnit.MINUTES, true);

// Assert
verify(redisSimpleTemplate).hasKey(key); // Ensure hasKey is called
verify(redisSimpleTemplate).delete(key); // Ensure delete is called because deleteIfAlreadyExists is true and key exists
}

@Test
void testInsertWhenDeleteIfAlreadyExistsFalse() {
// Arrange
String key = "testKey";
String value = "testValue";
long ttl = 5;

when(redisSimpleTemplate.hasKey(key)).thenReturn(true);

// Act
cacheRepository.insert(key, value, ttl, ChronoUnit.MINUTES, false);

// Assert
verify(redisSimpleTemplate, never()).delete(key); // Ensure delete is NOT called
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package it.gov.pagopa.wispconverter.service;

import it.gov.pagopa.wispconverter.controller.ReceiptController;
import it.gov.pagopa.wispconverter.controller.model.RecoveryReceiptResponse;
import it.gov.pagopa.wispconverter.exception.AppException;
import it.gov.pagopa.wispconverter.repository.CacheRepository;
import it.gov.pagopa.wispconverter.repository.RTRepository;
import it.gov.pagopa.wispconverter.repository.ReEventRepository;
import it.gov.pagopa.wispconverter.repository.model.RTEntity;
Expand All @@ -19,10 +17,10 @@
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.List;

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

public class RecoveryServiceTest {
Expand All @@ -34,10 +32,7 @@ public class RecoveryServiceTest {
private ReEventRepository reRepository;

@Mock
private CacheRepository cacheRepository;

@Mock
private ReceiptController receiptController;
private ReceiptService receiptService;

@Mock
private ReService reService;
Expand All @@ -58,24 +53,22 @@ public void testRecoverReceiptKO() throws Exception {
String dateFrom = "2024-09-05";
String dateTo = "2024-09-09";
String ci = "ci";
String nav = "nav";
String iuv = "iuv";
String ccp = "cpp";
String session = "sessionId";
List<ReEventEntity> rtSuccessReEventEntity = List.of();

when(reRepository.findBySessionIdAndStatus(anyString(), anyString(), anyString(), anyString())).thenReturn(rtSuccessReEventEntity);
doNothing().when(cacheRepository)
.insert(anyString(), anyString(), anyLong(), any(ChronoUnit.class), anyBoolean());
doNothing().when(receiptController)
.receiptKo(anyString());
// doNothing().when(cacheRepository).insert(anyString(), anyString(), anyLong(), any(ChronoUnit.class), anyBoolean());
doNothing().when(receiptService)
.sendRTKoFromSessionId(anyString(), any());
doNothing().when(reService).addRe(any(ReEventDto.class));

// Act
recoveryService.recoverReceiptKO(ci, nav, iuv, session, ccp, dateFrom, dateTo);
recoveryService.recoverReceiptKO(ci, iuv, ccp, session, dateFrom, dateTo);

// Assert
verify(cacheRepository, times(2)).insert(anyString(), anyString(), anyLong(), any(ChronoUnit.class), anyBoolean());
verify(reRepository, times(1)).findBySessionIdAndStatus(anyString(), anyString(), anyString(), anyString());
}

@Test
Expand Down

0 comments on commit 4e4312c

Please sign in to comment.