Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/folio-org/mod-tlr into MO…
Browse files Browse the repository at this point in the history
…DTLR-13
  • Loading branch information
MagzhanArtykov committed Mar 11, 2024
2 parents 122167f + 65893ef commit b99bf28
Show file tree
Hide file tree
Showing 9 changed files with 198 additions and 0 deletions.
28 changes: 28 additions & 0 deletions src/main/java/org/folio/client/feign/DcbClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.folio.client.feign;

import org.folio.domain.dto.DcbTransaction;
import org.folio.domain.dto.TransactionStatus;
import org.folio.domain.dto.TransactionStatusResponse;
import org.folio.spring.config.FeignClientConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;

@FeignClient(name = "dcb", url = "${folio.okapi-url}", configuration = FeignClientConfiguration.class)
public interface DcbClient {

@PostMapping("/ecs-tlr-transactions/{dcbTransactionId}")
TransactionStatusResponse createDcbTransaction(@PathVariable String dcbTransactionId,
@RequestBody DcbTransaction dcbTransaction);

@GetMapping("/transactions/{dcbTransactionId}/status")
TransactionStatusResponse getDcbTransactionStatus(@PathVariable String dcbTransactionId);

@PutMapping("/transactions/{dcbTransactionId}/status")
TransactionStatusResponse changeDcbTransactionStatus(@PathVariable String dcbTransactionId,
@RequestBody TransactionStatus newStatus);

}
6 changes: 6 additions & 0 deletions src/main/resources/swagger.api/ecs-tlr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ components:
schemas:
ecs-tlr:
$ref: 'schemas/EcsTlr.yaml#/EcsTlr'
dcbTransaction:
$ref: 'schemas/dcbTransaction.yaml#/DcbTransaction'
transactionStatus:
$ref: 'schemas/transactionStatus.yaml#/TransactionStatus'
transactionStatusResponse:
$ref: 'schemas/transactionStatusResponse.yaml#/TransactionStatusResponse'
errorResponse:
$ref: 'schemas/errors.json'
request:
Expand Down
19 changes: 19 additions & 0 deletions src/main/resources/swagger.api/schemas/dcbItem.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
DcbItem:
description: Item metadata required for the transaction
type: object
properties:
id:
description: The unique item identifier
$ref: "uuid.yaml"
title:
description: The title of the item that has been requested
type: string
barcode:
description: The barcode of the item as specified in the lending library
type: string
materialType:
description: The “hub-normalized” form of the item item type, used in the circulation rules for determining the correct loan policy.
type: string
lendingLibraryCode:
description: The code which identifies the lending library
type: string
13 changes: 13 additions & 0 deletions src/main/resources/swagger.api/schemas/dcbPatron.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
DcbPatron:
description: Patron metadata required for the transaction
type: object
properties:
id:
description: The unique identifier for the patron making the request as known in the requesting library
$ref: "uuid.yaml"
group:
description: The patron group associated with the requesting patron
type: string
barcode:
description: The barcode of the patron
type: string
13 changes: 13 additions & 0 deletions src/main/resources/swagger.api/schemas/dcbPickup.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
DcbPickup:
description: Pickup Location metadata required for the pickup service point
type: object
properties:
libraryCode:
description: The code which identifies the pickup library
type: string
servicePointId:
description: UUID of the pickup service point
type: string
servicePointName:
description: The name of the pickup service point
type: string
15 changes: 15 additions & 0 deletions src/main/resources/swagger.api/schemas/dcbTransaction.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
DcbTransaction:
type: object
properties:
item:
$ref: 'dcbItem.yaml#/DcbItem'
role:
type: string
enum:
- LENDER
- BORROWER
- PICKUP
- BORROWING-PICKUP
requestId:
description: ID of the existing request
$ref: "uuid.yaml"
16 changes: 16 additions & 0 deletions src/main/resources/swagger.api/schemas/transactionStatus.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
TransactionStatus:
type: object
properties:
status:
type: string
enum:
- CREATED #Created by DCB
- OPEN #Item checked in at lending library
- AWAITING_PICKUP #Item checked in at borrowing/Pickup library
- ITEM_CHECKED_OUT #Item checkout by patron. Request is fulfilled and loan is created
- ITEM_CHECKED_IN #Item returned to borrowing/Pickup library
- CLOSED #Item returned to lending library
- CANCELLED #Request was cancelled
- ERROR #Error occurred
message:
type: string
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
TransactionStatusResponse:
allOf:
- $ref: 'transactionStatus.yaml#/TransactionStatus'
- $ref: 'dcbTransaction.yaml#/DcbTransaction'
84 changes: 84 additions & 0 deletions src/test/java/org/folio/client/DcbClientTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package org.folio.client;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.Mockito.when;

import java.util.UUID;

import org.folio.client.feign.DcbClient;
import org.folio.domain.dto.DcbTransaction;
import org.folio.domain.dto.TransactionStatus;
import org.folio.domain.dto.TransactionStatusResponse;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
class DcbClientTest {
@Mock
private DcbClient dcbClient;

@Test
void canCreateDcbTransaction() {
String requestId = UUID.randomUUID().toString();
String dcbTransactionId = UUID.randomUUID().toString();
DcbTransaction dcbTransaction = new DcbTransaction()
.role(DcbTransaction.RoleEnum.BORROWER)
.requestId(requestId);
TransactionStatusResponse transactionStatusResponse = new TransactionStatusResponse()
.status(TransactionStatusResponse.StatusEnum.CANCELLED)
.message("test message")
.item(dcbTransaction.getItem())
.role(TransactionStatusResponse.RoleEnum.BORROWER)
.requestId(requestId);
when(dcbClient.createDcbTransaction(dcbTransactionId, dcbTransaction))
.thenReturn(transactionStatusResponse);
var response = dcbClient.createDcbTransaction(dcbTransactionId,
dcbTransaction);
assertNotNull(response);
assertEquals(TransactionStatusResponse.RoleEnum.BORROWER, response.getRole());
assertEquals(requestId, response.getRequestId());
}

@Test
void canGetDcbTransactionStatus() {
String requestId = UUID.randomUUID().toString();
String transactionId = UUID.randomUUID().toString();
DcbTransaction dcbTransaction = new DcbTransaction()
.role(DcbTransaction.RoleEnum.BORROWER)
.requestId(requestId);
TransactionStatusResponse transactionStatusResponse = new TransactionStatusResponse()
.status(TransactionStatusResponse.StatusEnum.CANCELLED)
.message("test message")
.item(dcbTransaction.getItem())
.requestId(requestId);
when(dcbClient.getDcbTransactionStatus(transactionId)).thenReturn(transactionStatusResponse);
var response = dcbClient.getDcbTransactionStatus(transactionId);
assertNotNull(response);
assertEquals(TransactionStatusResponse.StatusEnum.CANCELLED, response.getStatus());
}

@Test
void canChangeDcbTransactionStatus() {
String requestId = UUID.randomUUID().toString();
String transactionId = UUID.randomUUID().toString();
TransactionStatus targetStatus = new TransactionStatus()
.status(TransactionStatus.StatusEnum.CANCELLED)
.message("test message");
DcbTransaction dcbTransaction = new DcbTransaction()
.role(DcbTransaction.RoleEnum.BORROWER)
.requestId(requestId);
TransactionStatusResponse transactionStatusResponse = new TransactionStatusResponse()
.status(TransactionStatusResponse.StatusEnum.CANCELLED)
.message("test message")
.item(dcbTransaction.getItem())
.requestId(requestId);
when(dcbClient.changeDcbTransactionStatus(transactionId, targetStatus))
.thenReturn(transactionStatusResponse);
var response = dcbClient.changeDcbTransactionStatus(transactionId, targetStatus);
assertNotNull(response);
assertEquals(TransactionStatusResponse.StatusEnum.CANCELLED, response.getStatus());
}
}

0 comments on commit b99bf28

Please sign in to comment.