Skip to content

Commit

Permalink
MODDCB-22 MODDCB-25 Implementing update API for AwaitingPickup to Ite…
Browse files Browse the repository at this point in the history
…mChecked out and ItemCheckedOut to ItemCheckedIn in Borrowing library (#49)

* MODDCB-22 MODDCB-25 Implementing update API for AwaitingPickup to ItemChecked out and ItemCheckedOut to ItemCheckedIn in Borrowing library

* MODDCB-22 MODDCB-25 Fixing code smell

* MODDCB-22 MODDCB-25 Organizing imports
  • Loading branch information
Vignesh-kalyanasundaram authored Nov 21, 2023
1 parent 044fa49 commit 04e0648
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.CREATED;
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.CLOSED;
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.ITEM_CHECKED_IN;
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.ITEM_CHECKED_OUT;
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.OPEN;

@Log4j2
Expand Down Expand Up @@ -43,15 +44,19 @@ public void updateTransactionStatus(TransactionEntity dcbTransaction, Transactio
var currentStatus = dcbTransaction.getStatus();
var requestedStatus = transactionStatus.getStatus();

if (CREATED == currentStatus && OPEN == requestedStatus) {
if ((CREATED == currentStatus && OPEN == requestedStatus) || (ITEM_CHECKED_OUT == currentStatus && ITEM_CHECKED_IN == requestedStatus)) {
log.info("updateTransactionStatus:: Checking in item by barcode: {} ", dcbTransaction.getItemBarcode());
//Random UUID for servicePointId.
circulationService.checkInByBarcode(dcbTransaction, UUID.randomUUID().toString());
updateTransactionEntity(dcbTransaction, requestedStatus);
} else if(OPEN == currentStatus && AWAITING_PICKUP == requestedStatus) {
circulationService.checkInByBarcode(dcbTransaction);
updateTransactionEntity(dcbTransaction, requestedStatus);
}else if (ITEM_CHECKED_IN == currentStatus && CLOSED == requestedStatus) {
} else if (AWAITING_PICKUP == currentStatus && ITEM_CHECKED_OUT == requestedStatus) {
log.info("updateTransactionStatus:: Checking out item by barcode: {} ", dcbTransaction.getPatronBarcode());
circulationService.checkOutByBarcode(dcbTransaction);
updateTransactionEntity(dcbTransaction, requestedStatus);
} else if (ITEM_CHECKED_IN == currentStatus && CLOSED == requestedStatus) {
log.info("updateTransactionStatus:: transaction status transition from {} to {} for the item with barcode {} ",
ITEM_CHECKED_IN.getValue(), CLOSED.getValue(), dcbTransaction.getItemBarcode());
updateTransactionEntity(dcbTransaction, requestedStatus);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,46 @@ void createBorrowerCirculationRequestTest() throws Exception {
jsonPath("$.errors[0].code", is("DUPLICATE_ERROR")));
}

@Test
void transactionStatusUpdateFromAwaitingPickupToItemCheckedOut() throws Exception {
var transactionID = UUID.randomUUID().toString();
var dcbTransaction = createTransactionEntity();
dcbTransaction.setStatus(TransactionStatus.StatusEnum.AWAITING_PICKUP);
dcbTransaction.setRole(BORROWER);
dcbTransaction.setId(transactionID);

systemUserScopedExecutionService.executeAsyncSystemUserScoped(TENANT, () -> transactionRepository.save(dcbTransaction));

this.mockMvc.perform(
put("/transactions/" + transactionID + "/status")
.content(asJsonString(createTransactionStatus(TransactionStatus.StatusEnum.ITEM_CHECKED_OUT)))
.headers(defaultHeaders())
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.status").value("ITEM_CHECKED_OUT"));
}

@Test
void transactionStatusUpdateFromItemCheckedOutToItemCheckedIn() throws Exception {
var transactionID = UUID.randomUUID().toString();
var dcbTransaction = createTransactionEntity();
dcbTransaction.setStatus(TransactionStatus.StatusEnum.ITEM_CHECKED_OUT);
dcbTransaction.setRole(BORROWER);
dcbTransaction.setId(transactionID);

systemUserScopedExecutionService.executeAsyncSystemUserScoped(TENANT, () -> transactionRepository.save(dcbTransaction));

this.mockMvc.perform(
put("/transactions/" + transactionID + "/status")
.content(asJsonString(createTransactionStatus(TransactionStatus.StatusEnum.ITEM_CHECKED_IN)))
.headers(defaultHeaders())
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.status").value("ITEM_CHECKED_IN"));
}

private void removeExistedTransactionFromDbIfSoExists() {
systemUserScopedExecutionService.executeAsyncSystemUserScoped(TENANT, () -> {
if (transactionRepository.existsById(DCB_TRANSACTION_ID)){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@

import static org.folio.dcb.domain.dto.DcbTransaction.RoleEnum.BORROWER;
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.AWAITING_PICKUP;
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.CREATED;
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.CLOSED;
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.CREATED;
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.ITEM_CHECKED_IN;
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.ITEM_CHECKED_OUT;
import static org.folio.dcb.domain.dto.TransactionStatus.StatusEnum.OPEN;
import static org.folio.dcb.utils.EntityUtils.DCB_TRANSACTION_ID;
import static org.folio.dcb.utils.EntityUtils.PICKUP_SERVICE_POINT_ID;
Expand Down Expand Up @@ -86,4 +87,28 @@ void testTransactionStatusUpdateFromItemCheckedInToClosed() {
Assertions.assertEquals(CLOSED, transactionEntity.getStatus());
}

@Test
void testTransactionStatusUpdateFromAwaitingPickupToItemCheckedOut() {
var transactionEntity = createTransactionEntity();
transactionEntity.setStatus(AWAITING_PICKUP);
doNothing().when(circulationService).checkOutByBarcode(transactionEntity);
TransactionStatus transactionStatus = TransactionStatus.builder().status(ITEM_CHECKED_OUT).build();
borrowingLibraryService.updateTransactionStatus(transactionEntity, transactionStatus);

verify(circulationService).checkOutByBarcode(any());
Assertions.assertEquals(ITEM_CHECKED_OUT, transactionEntity.getStatus());
}

@Test
void testTransactionStatusUpdateFromItemCheckedOutToItemCheckedIn() {
var transactionEntity = createTransactionEntity();
transactionEntity.setStatus(ITEM_CHECKED_OUT);
doNothing().when(circulationService).checkInByBarcode(any(), any());
TransactionStatus transactionStatus = TransactionStatus.builder().status(ITEM_CHECKED_IN).build();
borrowingLibraryService.updateTransactionStatus(transactionEntity, transactionStatus);

verify(circulationService).checkInByBarcode(any(), any());
Assertions.assertEquals(ITEM_CHECKED_IN, transactionEntity.getStatus());
}

}

0 comments on commit 04e0648

Please sign in to comment.