Skip to content

Commit

Permalink
CIRC-1980: Error message - after Service point changed from "yes" to …
Browse files Browse the repository at this point in the history
…"no" as Pickup location (#1482)

* CIRC-1980: Fix intervalId absence in hold shelf expiry period
---------
Co-authored-by: alexanderkurash <alexander.kurash@gmail.com>
  • Loading branch information
Maksat-Galymzhan authored Jul 19, 2024
1 parent a1841c5 commit e7e2682
Showing 4 changed files with 70 additions and 2 deletions.
14 changes: 12 additions & 2 deletions src/main/java/org/folio/circulation/domain/UpdateRequestQueue.java
Original file line number Diff line number Diff line change
@@ -12,6 +12,7 @@
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;

@@ -38,6 +39,7 @@ public class UpdateRequestQueue {
private final ConfigurationRepository configurationRepository;
private final RequestQueueService requestQueueService;
private final CalendarRepository calendarRepository;
private static final String NOT_DEFINED_INTERVAL = "";

public UpdateRequestQueue(
RequestQueueRepository requestQueueRepository,
@@ -184,8 +186,16 @@ private RequestQueue setHoldShelfExpirationDateWithExpirationDateManagement(

ExpirationDateManagement expirationDateManagement = calculatedRequest.getPickupServicePoint()
.getHoldShelfClosedLibraryDateManagement();
String intervalId = calculatedRequest.getPickupServicePoint().getHoldShelfExpiryPeriod()
.getIntervalId().toUpperCase();

String intervalId = Optional.of(calculatedRequest)
.map(Request::getPickupServicePoint)
.map(ServicePoint::getHoldShelfExpiryPeriod)
.map(TimePeriod::getIntervalId)
.map(String::toUpperCase)
.orElse(NOT_DEFINED_INTERVAL);

log.info("setHoldShelfExpirationDateWithExpirationDateManagement:: interval: {}", intervalId);

log.info("setHoldShelfExpirationDateWithExpirationDateManagement expDate before:{}",
calculatedRequest.getHoldShelfExpirationDate());
// Old data where strategy is not set so default value but TimePeriod has MINUTES / HOURS
50 changes: 50 additions & 0 deletions src/test/java/api/loans/CheckInByBarcodeTests.java
Original file line number Diff line number Diff line change
@@ -45,6 +45,7 @@
import static org.folio.circulation.domain.RequestType.HOLD;
import static org.folio.circulation.domain.RequestType.RECALL;
import static org.folio.circulation.domain.notice.TemplateContextUtil.CURRENT_DATE_TIME;
import static org.folio.circulation.domain.policy.ExpirationDateManagement.KEEP_THE_CURRENT_DUE_DATE;
import static org.folio.circulation.domain.representations.logs.LogEventType.CHECK_IN;
import static org.folio.circulation.domain.representations.logs.LogEventType.NOTICE;
import static org.folio.circulation.domain.representations.logs.LogEventType.NOTICE_ERROR;
@@ -76,6 +77,7 @@
import java.util.Map;
import java.util.UUID;

import api.support.builders.ServicePointBuilder;
import org.folio.circulation.domain.ItemStatus;
import org.folio.circulation.domain.Request;
import org.folio.circulation.domain.RequestStatus;
@@ -1662,6 +1664,54 @@ void linkItemToHoldTLRWithHoldShelfWhenCheckedInItemThenFulfilledWithSuccess(){
assertThat(itemRepresentation.getJsonObject("status").getString("name"), is("Awaiting pickup"));
}

@Test
void checkInItemWhenServicePointHasChangedToNoPickupLocation() {
configurationsFixture.enableTlrFeature();
var instanceId = instancesFixture.basedUponDunkirk().getId();
var defaultWithHoldings = holdingsFixture.defaultWithHoldings(instanceId);
var checkedOutItem = itemsClient.create(buildCheckedOutItemWithHoldingRecordsId(
defaultWithHoldings.getId()));
var holdRequestBeforeFulfilled = requestsClient.create(
buildHoldTLRWithHoldShelffulfillmentPreference(instanceId));

String servicePointCode = servicePointsFixture.cd1().getJson().getString("code");
String servicePointName = "custom service point";
int shelvingLagTime = 0;
String discoveryDisplayName = servicePointsFixture.cd1().getJson()
.getString("discoveryDisplayName");
String description = servicePointsFixture.cd1().getJson().getString("description");

ServicePointBuilder changedServicePoint = new ServicePointBuilder(
servicePointsFixture.cd1().getId(), servicePointName, servicePointCode, discoveryDisplayName,
description, shelvingLagTime, Boolean.FALSE, null, KEEP_THE_CURRENT_DUE_DATE.name());

// Update existing service point
servicePointsFixture.update(servicePointCode, changedServicePoint);

checkInFixture.checkInByBarcode(checkedOutItem, servicePointsFixture.cd1().getId());

//validating request before fulfilled
var holdRequestAfterFulfilled = requestsClient.get(holdRequestBeforeFulfilled.getId());
JsonObject representationBefore = holdRequestBeforeFulfilled.getJson();
assertThat(representationBefore.getString("itemId"), nullValue());
validateTLRequestByFields(representationBefore, HOLD_SHELF, instanceId, OPEN_NOT_YET_FILLED);

//validating request after fulfilled
JsonObject representation = holdRequestAfterFulfilled.getJson();
assertThat(representation.getString("itemId"), is(checkedOutItem.getId().toString()));
assertThat(representation.getString("holdingsRecordId"), is(defaultWithHoldings.getId()));

validateTLRequestByFields(representation, HOLD_SHELF, instanceId, OPEN_AWAITING_PICKUP);

IndividualResource itemAfter = itemsClient.get(checkedOutItem.getId());
JsonObject itemRepresentation = itemAfter.getJson();
assertThat(itemRepresentation.getJsonObject("status").getString("name"),
is("Awaiting pickup"));

JsonObject servicePointRepresentation = representation.getJsonObject("pickupServicePoint");
assertThat(servicePointRepresentation.getBoolean("pickupLocation"), is(false));
}

@Test
void linkItemToHoldTLRWithDeliveryWhenCheckedInThenFulfilledWithSuccess(){
reconfigureTlrFeature(TlrFeatureStatus.NOT_CONFIGURED);
4 changes: 4 additions & 0 deletions src/test/java/api/support/fixtures/RecordCreator.java
Original file line number Diff line number Diff line change
@@ -49,6 +49,10 @@ IndividualResource createIfAbsent(JsonObject record) {
return createIfAbsent(identityMapKey.apply(record), record);
}

void update(String key, JsonObject updateRecord) {
identityMap.put(key, client.create(updateRecord));
}

private IndividualResource createIfAbsent(String key, JsonObject record) {
return needsCreating(key) ? create(record) : getExistingRecord(key);
}
4 changes: 4 additions & 0 deletions src/test/java/api/support/fixtures/ServicePointsFixture.java
Original file line number Diff line number Diff line change
@@ -89,4 +89,8 @@ public IndividualResource create(ServicePointBuilder builder) {
public Collection<IndividualResource> getAllServicePoints() {
return servicePointRecordCreator.getIdentityMap().values();
}

public void update(String servicePointCode, ServicePointBuilder builder) {
servicePointRecordCreator.update(servicePointCode, builder.create());
}
}

0 comments on commit e7e2682

Please sign in to comment.