From 09fa5a0ea3f9c52e8fb39eb3c2a4548f0f0f6807 Mon Sep 17 00:00:00 2001 From: aitestmate Date: Wed, 8 Apr 2026 16:42:15 +0000 Subject: [PATCH] [chore] [mod-dcb] unit tests --- ...sRequestTransactionsApiControllerTest.java | 71 ++++++++++++++++++ .../TransactionApiControllerTest.java | 74 +++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java create mode 100644 src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java diff --git a/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java new file mode 100644 index 00000000..8c4d755f --- /dev/null +++ b/src/test/java/org/folio/dcb/controller/EcsRequestTransactionsApiControllerTest.java @@ -0,0 +1,71 @@ +package org.folio.dcb.controller; + +import org.folio.dcb.service.EcsRequestTransactionsService; +import org.folio.dcb.service.TransactionAuditService; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.folio.dcb.domain.dto.DcbTransaction; +import org.folio.dcb.domain.dto.TransactionStatusResponse; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.junit.jupiter.api.Assertions.assertThrows; + +@ExtendWith(MockitoExtension.class) +class EcsRequestTransactionsApiControllerTest { + + @InjectMocks + private EcsRequestTransactionsApiController ecsRequestTransactionsApiController; + + @Mock + private EcsRequestTransactionsService ecsRequestTransactionsService; + + @Mock + private TransactionAuditService transactionAuditService; + + @Test + void createEcsRequestTransactionsShouldReturnCreatedStatusWhenSuccessful() { + // TestMate-fb0e3f3afb8bd45bf92f0bfdaf01a130 + // Given + String ecsRequestTransactionId = "550e8400-e29b-41d4-a716-446655440000"; + DcbTransaction dcbTransaction = new DcbTransaction(); + dcbTransaction.setRole(DcbTransaction.RoleEnum.LENDER); + TransactionStatusResponse expectedResponse = new TransactionStatusResponse(); + expectedResponse.setStatus(TransactionStatusResponse.StatusEnum.CREATED); + when(ecsRequestTransactionsService.createEcsRequestTransactions(ecsRequestTransactionId, dcbTransaction)) + .thenReturn(expectedResponse); + // When + ResponseEntity actualResponse = ecsRequestTransactionsApiController + .createEcsRequestTransactions(ecsRequestTransactionId, dcbTransaction); + // Then + assertEquals(HttpStatus.CREATED, actualResponse.getStatusCode()); + assertEquals(expectedResponse, actualResponse.getBody()); + verify(ecsRequestTransactionsService).createEcsRequestTransactions(ecsRequestTransactionId, dcbTransaction); + } + + @Test + void createEcsRequestTransactionsShouldLogErrorToAuditAndRethrowWhenServiceFails() { + // TestMate-2b1511e07057750f28e1b2d54902dfe4 + // Given + String ecsRequestTransactionId = "550e8400-e29b-41d4-a716-446655440000"; + DcbTransaction dcbTransaction = new DcbTransaction(); + dcbTransaction.setRole(DcbTransaction.RoleEnum.LENDER); + String errorMessage = "Service failure"; + RuntimeException expectedException = new RuntimeException(errorMessage); + when(ecsRequestTransactionsService.createEcsRequestTransactions(ecsRequestTransactionId, dcbTransaction)) + .thenThrow(expectedException); + // When + RuntimeException actualException = assertThrows(RuntimeException.class, () -> + ecsRequestTransactionsApiController.createEcsRequestTransactions(ecsRequestTransactionId, dcbTransaction)); + // Then + assertEquals(errorMessage, actualException.getMessage()); + verify(transactionAuditService).logErrorIfTransactionAuditNotExists(ecsRequestTransactionId, dcbTransaction, errorMessage); + verify(ecsRequestTransactionsService).createEcsRequestTransactions(ecsRequestTransactionId, dcbTransaction); + } + +} diff --git a/src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java b/src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java new file mode 100644 index 00000000..78ef5280 --- /dev/null +++ b/src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java @@ -0,0 +1,74 @@ +package org.folio.dcb.controller; + +import org.folio.dcb.service.TransactionAuditService; +import org.folio.dcb.service.TransactionsService; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.folio.dcb.controller.TransactionApiController; +import org.folio.dcb.domain.dto.DcbTransaction; +import org.folio.dcb.domain.dto.TransactionStatusResponse; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.junit.jupiter.api.Assertions.assertThrows; + +@ExtendWith(MockitoExtension.class) +class TransactionApiControllerTest { + + @InjectMocks + private TransactionApiController transactionApiController; + + @Mock + private TransactionsService transactionsService; + + @Mock + private TransactionAuditService transactionAuditService; + + @Test +void createCirculationRequestTest() { + // TestMate-4a274117d55982eb7ff0b5e267ec86ed + // given + String dcbTransactionId = "txn-123"; + DcbTransaction dcbTransaction = DcbTransaction.builder() + .role(DcbTransaction.RoleEnum.LENDER) + .build(); + TransactionStatusResponse expectedResponse = TransactionStatusResponse.builder() + .status(TransactionStatusResponse.StatusEnum.CREATED) + .build(); + when(transactionsService.createCirculationRequest(dcbTransactionId, dcbTransaction)) + .thenReturn(expectedResponse); + // when + ResponseEntity responseEntity = transactionApiController.createCirculationRequest(dcbTransactionId, dcbTransaction); + // then + assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.CREATED); + assertThat(responseEntity.getBody()).isEqualTo(expectedResponse); + verify(transactionsService).createCirculationRequest(dcbTransactionId, dcbTransaction); +} + + @Test + void createCirculationRequestShouldLogAuditAndThrowWhenExceptionOccurs() { + // TestMate-515a8d0a1d8b2ffc0a8908e3322eb24e + // given + String dcbTransactionId = "txn-err-1"; + String errorMessage = "Service Error"; + DcbTransaction dcbTransaction = DcbTransaction.builder() + .role(DcbTransaction.RoleEnum.LENDER) + .build(); + RuntimeException exception = new RuntimeException(errorMessage); + when(transactionsService.createCirculationRequest(dcbTransactionId, dcbTransaction)) + .thenThrow(exception); + // when + RuntimeException thrownException = assertThrows(RuntimeException.class, () -> + transactionApiController.createCirculationRequest(dcbTransactionId, dcbTransaction)); + // then + assertThat(thrownException.getMessage()).isEqualTo(errorMessage); + verify(transactionsService).createCirculationRequest(dcbTransactionId, dcbTransaction); + verify(transactionAuditService).logErrorIfTransactionAuditNotExists(dcbTransactionId, dcbTransaction, errorMessage); + } + +}