Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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<TransactionStatusResponse> 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);
}

}
Original file line number Diff line number Diff line change
@@ -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;

Check warning on line 9 in src/test/java/org/folio/dcb/controller/TransactionApiControllerTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unnecessary import: same package classes are always implicitly imported.

See more on https://sonarcloud.io/project/issues?id=org.folio%3Amod-dcb&issues=AZ1t_czOUMVYmqxuOTEF&open=AZ1t_czOUMVYmqxuOTEF&pullRequest=252
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<TransactionStatusResponse> 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);
}

}
Loading