use of api.support.builders.NoticePolicyBuilder in project mod-circulation by folio-org.
the class DueDateScheduledNoticesProcessingTests method generateLoanAndScheduledNotices.
private void generateLoanAndScheduledNotices(JsonObject... patronNoticeConfigurations) {
NoticePolicyBuilder noticePolicy = new NoticePolicyBuilder().withName("Policy with due date notices").withLoanNotices(List.of(patronNoticeConfigurations));
useFallbackPolicies(loanPoliciesFixture.canCirculateRolling().getId(), requestPoliciesFixture.allowAllRequestPolicy().getId(), noticePoliciesFixture.create(noticePolicy).getId(), overdueFinePoliciesFixture.noOverdueFine().getId(), lostItemFeePoliciesFixture.chargeFee().getId());
loan = checkOutFixture.checkOutByBarcode(new CheckOutByBarcodeRequestBuilder().forItem(item).to(borrower).on(LOAN_DATE).at(UUID.randomUUID()));
loanId = loan.getId();
dueDate = DateFormatUtil.parseDateTime(loan.getJson().getString("dueDate"));
verifyNumberOfScheduledNotices(patronNoticeConfigurations.length);
}
use of api.support.builders.NoticePolicyBuilder in project mod-circulation by folio-org.
the class DueDateScheduledNoticesTests method checkOutSchedulesDifferentBeforeDueDateNotices.
@Test
void checkOutSchedulesDifferentBeforeDueDateNotices() {
UUID firstBeforeTemplateId = UUID.randomUUID();
Period firstBeforePeriod = Period.weeks(1);
UUID secondBeforeTemplateId = UUID.randomUUID();
Period secondBeforePeriod = Period.hours(12);
JsonObject firstBeforeDueDateNoticeConfiguration = new NoticeConfigurationBuilder().withTemplateId(firstBeforeTemplateId).withDueDateEvent().withBeforeTiming(firstBeforePeriod).sendInRealTime(false).create();
JsonObject secondBeforeDueDateNoticeConfiguration = new NoticeConfigurationBuilder().withTemplateId(secondBeforeTemplateId).withDueDateEvent().withBeforeTiming(secondBeforePeriod).sendInRealTime(true).create();
NoticePolicyBuilder noticePolicy = new NoticePolicyBuilder().withName("Policy with before due date notices").withLoanNotices(Arrays.asList(firstBeforeDueDateNoticeConfiguration, secondBeforeDueDateNoticeConfiguration));
use(noticePolicy);
IndividualResource smallAngryPlanet = itemsFixture.basedUponSmallAngryPlanet();
final IndividualResource steve = usersFixture.steve();
final ZonedDateTime loanDate = ZonedDateTime.of(2018, 3, 18, 11, 43, 54, 0, UTC);
final IndividualResource loan = checkOutFixture.checkOutByBarcode(new CheckOutByBarcodeRequestBuilder().forItem(smallAngryPlanet).to(steve).on(loanDate).at(UUID.randomUUID()));
ZonedDateTime dueDate = getDateTimeProperty(loan.getJson(), "dueDate");
verifyNumberOfScheduledNotices(2);
List<JsonObject> scheduledNotices = scheduledNoticesClient.getAll();
assertThat(scheduledNotices, hasItems(hasScheduledLoanNotice(loan.getId(), firstBeforePeriod.minusDate(dueDate), BEFORE_TIMING, firstBeforeTemplateId, null, false), hasScheduledLoanNotice(loan.getId(), secondBeforePeriod.minusDate(dueDate), BEFORE_TIMING, secondBeforeTemplateId, null, true)));
}
use of api.support.builders.NoticePolicyBuilder in project mod-circulation by folio-org.
the class DueDateScheduledNoticesTests method noticesShouldBeRescheduledAfterRecall.
@Test
void noticesShouldBeRescheduledAfterRecall() {
UUID beforeTemplateId = UUID.randomUUID();
Period beforePeriod = Period.days(2);
Period beforeRecurringPeriod = Period.hours(6);
UUID uponAtTemplateId = UUID.randomUUID();
UUID afterTemplateId = UUID.randomUUID();
Period afterPeriod = Period.days(3);
Period afterRecurringPeriod = Period.hours(4);
JsonObject beforeDueDateNoticeConfiguration = new NoticeConfigurationBuilder().withTemplateId(beforeTemplateId).withDueDateEvent().withBeforeTiming(beforePeriod).recurring(beforeRecurringPeriod).sendInRealTime(true).create();
JsonObject uponAtDueDateNoticeConfiguration = new NoticeConfigurationBuilder().withTemplateId(uponAtTemplateId).withDueDateEvent().withUponAtTiming().sendInRealTime(false).create();
JsonObject afterDueDateNoticeConfiguration = new NoticeConfigurationBuilder().withTemplateId(afterTemplateId).withDueDateEvent().withAfterTiming(afterPeriod).recurring(afterRecurringPeriod).sendInRealTime(true).create();
NoticePolicyBuilder noticePolicy = new NoticePolicyBuilder().withName("Policy with due date notices").withLoanNotices(Arrays.asList(beforeDueDateNoticeConfiguration, uponAtDueDateNoticeConfiguration, afterDueDateNoticeConfiguration));
LoanPolicyBuilder loanPolicy = new LoanPolicyBuilder().withName("Can Circulate Rolling for recall").rolling(Period.weeks(3)).withRecallsMinimumGuaranteedLoanPeriod(Period.weeks(2));
use(loanPolicy, noticePolicy);
IndividualResource item = itemsFixture.basedUponSmallAngryPlanet();
final IndividualResource borrower = usersFixture.steve();
final IndividualResource loan = checkOutFixture.checkOutByBarcode(item, borrower);
checkOutFixture.checkOutByBarcode(itemsFixture.basedUponNod(), usersFixture.jessica());
verifyNumberOfScheduledNotices(6);
requestsFixture.place(new RequestBuilder().open().recall().forItem(item).by(usersFixture.james()).withPickupServicePointId(servicePointsFixture.cd1().getId()));
IndividualResource loanAfterRecall = loansClient.get(loan.getId());
ZonedDateTime dueDateAfterRecall = getDateTimeProperty(loanAfterRecall.getJson(), "dueDate");
Matcher<Iterable<JsonObject>> scheduledNoticesAfterRecallMatcher = hasItems(hasScheduledLoanNotice(loan.getId(), beforePeriod.minusDate(dueDateAfterRecall), BEFORE_TIMING, beforeTemplateId, beforeRecurringPeriod, true), hasScheduledLoanNotice(loan.getId(), dueDateAfterRecall, UPON_AT_TIMING, uponAtTemplateId, null, false), hasScheduledLoanNotice(loan.getId(), afterPeriod.plusDate(dueDateAfterRecall), AFTER_TIMING, afterTemplateId, afterRecurringPeriod, true));
Awaitility.await().atMost(1, TimeUnit.SECONDS).until(scheduledNoticesClient::getAll, scheduledNoticesAfterRecallMatcher);
verifyNumberOfScheduledNotices(6);
}
use of api.support.builders.NoticePolicyBuilder in project mod-circulation by folio-org.
the class DueDateScheduledNoticesTests method noticesShouldBeRescheduledAfterRenewalOverride.
@Test
void noticesShouldBeRescheduledAfterRenewalOverride() {
UUID beforeTemplateId = UUID.randomUUID();
Period beforePeriod = Period.days(2);
Period beforeRecurringPeriod = Period.hours(6);
UUID uponAtTemplateId = UUID.randomUUID();
UUID afterTemplateId = UUID.randomUUID();
Period afterPeriod = Period.days(3);
Period afterRecurringPeriod = Period.hours(4);
JsonObject beforeDueDateNoticeConfiguration = new NoticeConfigurationBuilder().withTemplateId(beforeTemplateId).withDueDateEvent().withBeforeTiming(beforePeriod).recurring(beforeRecurringPeriod).sendInRealTime(true).create();
JsonObject uponAtDueDateNoticeConfiguration = new NoticeConfigurationBuilder().withTemplateId(uponAtTemplateId).withDueDateEvent().withUponAtTiming().sendInRealTime(false).create();
JsonObject afterDueDateNoticeConfiguration = new NoticeConfigurationBuilder().withTemplateId(afterTemplateId).withDueDateEvent().withAfterTiming(afterPeriod).recurring(afterRecurringPeriod).sendInRealTime(true).create();
NoticePolicyBuilder noticePolicy = new NoticePolicyBuilder().withName("Policy with due date notices").withLoanNotices(Arrays.asList(beforeDueDateNoticeConfiguration, uponAtDueDateNoticeConfiguration, afterDueDateNoticeConfiguration));
LoanPolicyBuilder loanPolicy = new LoanPolicyBuilder().withName("Not renewable").rolling(Period.weeks(3)).notRenewable();
use(loanPolicy, noticePolicy);
IndividualResource item = itemsFixture.basedUponSmallAngryPlanet();
final IndividualResource borrower = usersFixture.steve();
final IndividualResource loan = checkOutFixture.checkOutByBarcode(item, borrower);
ZonedDateTime dueDate = getDateTimeProperty(loan.getJson(), "dueDate");
checkOutFixture.checkOutByBarcode(itemsFixture.basedUponNod(), usersFixture.jessica());
verifyNumberOfScheduledNotices(6);
ZonedDateTime dueDateAfterRenewal = dueDate.plusWeeks(3);
final OkapiHeaders okapiHeaders = buildOkapiHeadersWithPermissions(OVERRIDE_RENEWAL_PERMISSION);
loansFixture.overrideRenewalByBarcode(item, borrower, "Renewal comment", dueDateAfterRenewal.toString(), okapiHeaders);
Matcher<Iterable<JsonObject>> scheduledNoticesAfterRenewalMatcher = hasItems(hasScheduledLoanNotice(loan.getId(), beforePeriod.minusDate(dueDateAfterRenewal), BEFORE_TIMING, beforeTemplateId, beforeRecurringPeriod, true), hasScheduledLoanNotice(loan.getId(), dueDateAfterRenewal, UPON_AT_TIMING, uponAtTemplateId, null, false), hasScheduledLoanNotice(loan.getId(), afterPeriod.plusDate(dueDateAfterRenewal), AFTER_TIMING, afterTemplateId, afterRecurringPeriod, true));
Awaitility.await().atMost(1, TimeUnit.SECONDS).until(scheduledNoticesClient::getAll, scheduledNoticesAfterRenewalMatcher);
verifyNumberOfScheduledNotices(6);
}
use of api.support.builders.NoticePolicyBuilder in project mod-circulation by folio-org.
the class DueDateScheduledNoticesTests method noticesShouldBeRescheduledAfterManualDueDateChange.
@Test
void noticesShouldBeRescheduledAfterManualDueDateChange() {
UUID beforeTemplateId = UUID.randomUUID();
Period beforePeriod = Period.days(2);
Period beforeRecurringPeriod = Period.hours(6);
UUID uponAtTemplateId = UUID.randomUUID();
UUID afterTemplateId = UUID.randomUUID();
Period afterPeriod = Period.days(3);
Period afterRecurringPeriod = Period.hours(4);
JsonObject beforeDueDateNoticeConfiguration = new NoticeConfigurationBuilder().withTemplateId(beforeTemplateId).withDueDateEvent().withBeforeTiming(beforePeriod).recurring(beforeRecurringPeriod).sendInRealTime(true).create();
JsonObject uponAtDueDateNoticeConfiguration = new NoticeConfigurationBuilder().withTemplateId(uponAtTemplateId).withDueDateEvent().withUponAtTiming().sendInRealTime(false).create();
JsonObject afterDueDateNoticeConfiguration = new NoticeConfigurationBuilder().withTemplateId(afterTemplateId).withDueDateEvent().withAfterTiming(afterPeriod).recurring(afterRecurringPeriod).sendInRealTime(true).create();
NoticePolicyBuilder noticePolicy = new NoticePolicyBuilder().withName("Policy with due date notices").withLoanNotices(Arrays.asList(beforeDueDateNoticeConfiguration, uponAtDueDateNoticeConfiguration, afterDueDateNoticeConfiguration));
use(noticePolicy);
IndividualResource item = itemsFixture.basedUponSmallAngryPlanet();
IndividualResource borrower = usersFixture.steve();
IndividualResource loan = checkOutFixture.checkOutByBarcode(item, borrower);
checkOutFixture.checkOutByBarcode(itemsFixture.basedUponNod(), usersFixture.jessica());
verifyNumberOfScheduledNotices(6);
JsonObject loanJson = loan.getJson();
ZonedDateTime dueDate = getDateTimeProperty(loanJson, "dueDate");
ZonedDateTime updatedDueDate = dueDate.plusWeeks(2);
JsonPropertyWriter.write(loanJson, "dueDate", updatedDueDate);
loansClient.replace(loan.getId(), loanJson);
Matcher<Iterable<JsonObject>> scheduledNoticesAfterRecallMatcher = hasItems(hasScheduledLoanNotice(loan.getId(), beforePeriod.minusDate(updatedDueDate), BEFORE_TIMING, beforeTemplateId, beforeRecurringPeriod, true), hasScheduledLoanNotice(loan.getId(), updatedDueDate, UPON_AT_TIMING, uponAtTemplateId, null, false), hasScheduledLoanNotice(loan.getId(), afterPeriod.plusDate(updatedDueDate), AFTER_TIMING, afterTemplateId, afterRecurringPeriod, true));
Awaitility.await().atMost(1, TimeUnit.SECONDS).until(scheduledNoticesClient::getAll, scheduledNoticesAfterRecallMatcher);
verifyNumberOfScheduledNotices(6);
}
Aggregations