From 78165822075efc617666bac2e2d82efb7b0f49b3 Mon Sep 17 00:00:00 2001 From: Roman_Barannyk Date: Wed, 5 Nov 2025 12:49:21 +0200 Subject: [PATCH 1/2] CIRC-2339 preferredFirstName falls back to the firstName --- .../domain/LoanRepresentation.java | 3 ++- src/test/java/api/loans/LoanAPITests.java | 23 ++++++++++++++++++- .../api/support/fixtures/UsersFixture.java | 5 ++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/folio/circulation/domain/LoanRepresentation.java b/src/main/java/org/folio/circulation/domain/LoanRepresentation.java index f7528c65e8..cb9ef00298 100644 --- a/src/main/java/org/folio/circulation/domain/LoanRepresentation.java +++ b/src/main/java/org/folio/circulation/domain/LoanRepresentation.java @@ -1,6 +1,7 @@ package org.folio.circulation.domain; import static java.util.Objects.isNull; +import static org.apache.commons.lang3.StringUtils.firstNonBlank; import static org.folio.circulation.domain.representations.LoanProperties.BORROWER; import static org.folio.circulation.domain.representations.LoanProperties.LOAN_POLICY; import static org.folio.circulation.domain.representations.LoanProperties.LOST_ITEM_POLICY; @@ -177,7 +178,7 @@ private void additionalBorrowerProperties(JsonObject loanRepresentation, User bo borrowerSummary.put("lastName", borrower.getLastName()); borrowerSummary.put("middleName", borrower.getMiddleName()); borrowerSummary.put("barcode", borrower.getBarcode()); - borrowerSummary.put("preferredFirstName",borrower.getPreferredFirstName()); + borrowerSummary.put("preferredFirstName", firstNonBlank(borrower.getPreferredFirstName(), borrower.getFirstName())); borrowerSummary.put("patronGroup",borrower.getPatronGroupId()); loanRepresentation.put(BORROWER, borrowerSummary); additionalPatronGroupProperties(loanRepresentation, borrower.getPatronGroup()); diff --git a/src/test/java/api/loans/LoanAPITests.java b/src/test/java/api/loans/LoanAPITests.java index 783269fb09..87b0e95e4d 100644 --- a/src/test/java/api/loans/LoanAPITests.java +++ b/src/test/java/api/loans/LoanAPITests.java @@ -55,8 +55,8 @@ import api.support.builders.AccountBuilder; import api.support.builders.ItemBuilder; import api.support.builders.LoanBuilder; +import api.support.builders.UserBuilder; import api.support.fakes.FakePubSub; -import api.support.fixtures.ConfigurationExample; import api.support.http.IndividualResource; import api.support.http.ItemResource; import api.support.http.UserResource; @@ -280,6 +280,27 @@ void canGetLoansWithAdditionalFieldsRequiredForDueDateSlip() { loan.getJsonObject("item").containsKey("seriesStatements"), is(true)); } + @Test + void borrowerPreferredFirstNameFallsBackToFirstNameWhenBlankOrNull() { + testPreferredFirstName("Jones", "Steven", "", "Steven", itemsFixture.basedUponSmallAngryPlanet()); + testPreferredFirstName("Rodwell", "James", null, "James", itemsFixture.basedUponNod()); + testPreferredFirstName("Kim", "Jam", "kimJ", "kimJ", itemsFixture.basedUponDunkirk()); + } + + private void testPreferredFirstName(String lastName, String firstName, String preferredFirstName, + String expectedFirstName, IndividualResource item) { + + var user = usersFixture.from(new UserBuilder() + .withPreferredFirstName(lastName, firstName, preferredFirstName) + .withActive(true)); + var loan = loansFixture.createLoan(item, user); + var loanJson = loansFixture.getLoanById(loan.getId()).getJson(); + assertThat("Borrower preferredFirstName logic", + loanJson.getJsonObject("borrower").getString("preferredFirstName"), + is(expectedFirstName)); + } + + @Test void canGetLoanWithoutOpenFeesFines() { UUID id = UUID.randomUUID(); diff --git a/src/test/java/api/support/fixtures/UsersFixture.java b/src/test/java/api/support/fixtures/UsersFixture.java index 41c0e32c8c..fa0f4cdbc7 100644 --- a/src/test/java/api/support/fixtures/UsersFixture.java +++ b/src/test/java/api/support/fixtures/UsersFixture.java @@ -126,6 +126,11 @@ public void defaultAdmin() { .withId(APITestContext.getUserId())); } + public UserResource from(UserBuilder userBuilder) { + return createIfAbsent(userBuilder + .inGroupFor(patronGroupsFixture.staff())); + } + private UserResource createIfAbsent(UserBuilder userBuilder) { return new UserResource(userRecordCreator.createIfAbsent(userBuilder)); } From 6eca980f8083cb236e88a7fcab34abda1eed63a3 Mon Sep 17 00:00:00 2001 From: Roman_Barannyk Date: Wed, 5 Nov 2025 13:12:52 +0200 Subject: [PATCH 2/2] CIRC-2339 remove redundant extra line --- src/test/java/api/loans/LoanAPITests.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/api/loans/LoanAPITests.java b/src/test/java/api/loans/LoanAPITests.java index 87b0e95e4d..59aca7c428 100644 --- a/src/test/java/api/loans/LoanAPITests.java +++ b/src/test/java/api/loans/LoanAPITests.java @@ -300,7 +300,6 @@ private void testPreferredFirstName(String lastName, String firstName, String pr is(expectedFirstName)); } - @Test void canGetLoanWithoutOpenFeesFines() { UUID id = UUID.randomUUID();