Search in sources :

Example 11 with NoticePolicyBuilder

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);
}
Also used : CheckOutByBarcodeRequestBuilder(api.support.builders.CheckOutByBarcodeRequestBuilder) NoticePolicyBuilder(api.support.builders.NoticePolicyBuilder)

Example 12 with NoticePolicyBuilder

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)));
}
Also used : CheckOutByBarcodeRequestBuilder(api.support.builders.CheckOutByBarcodeRequestBuilder) ZonedDateTime(java.time.ZonedDateTime) NoticePolicyBuilder(api.support.builders.NoticePolicyBuilder) NoticeConfigurationBuilder(api.support.builders.NoticeConfigurationBuilder) Period(org.folio.circulation.domain.policy.Period) JsonObject(io.vertx.core.json.JsonObject) UUID(java.util.UUID) IndividualResource(api.support.http.IndividualResource) Test(org.junit.jupiter.api.Test)

Example 13 with NoticePolicyBuilder

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);
}
Also used : RequestBuilder(api.support.builders.RequestBuilder) CheckOutByBarcodeRequestBuilder(api.support.builders.CheckOutByBarcodeRequestBuilder) ZonedDateTime(java.time.ZonedDateTime) NoticePolicyBuilder(api.support.builders.NoticePolicyBuilder) NoticeConfigurationBuilder(api.support.builders.NoticeConfigurationBuilder) Period(org.folio.circulation.domain.policy.Period) JsonObject(io.vertx.core.json.JsonObject) LoanPolicyBuilder(api.support.builders.LoanPolicyBuilder) UUID(java.util.UUID) IndividualResource(api.support.http.IndividualResource) Test(org.junit.jupiter.api.Test)

Example 14 with NoticePolicyBuilder

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);
}
Also used : OkapiHeaders(api.support.http.OkapiHeaders) ZonedDateTime(java.time.ZonedDateTime) NoticePolicyBuilder(api.support.builders.NoticePolicyBuilder) NoticeConfigurationBuilder(api.support.builders.NoticeConfigurationBuilder) Period(org.folio.circulation.domain.policy.Period) JsonObject(io.vertx.core.json.JsonObject) LoanPolicyBuilder(api.support.builders.LoanPolicyBuilder) UUID(java.util.UUID) IndividualResource(api.support.http.IndividualResource) Test(org.junit.jupiter.api.Test)

Example 15 with NoticePolicyBuilder

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);
}
Also used : ZonedDateTime(java.time.ZonedDateTime) NoticePolicyBuilder(api.support.builders.NoticePolicyBuilder) NoticeConfigurationBuilder(api.support.builders.NoticeConfigurationBuilder) Period(org.folio.circulation.domain.policy.Period) JsonObject(io.vertx.core.json.JsonObject) UUID(java.util.UUID) IndividualResource(api.support.http.IndividualResource) Test(org.junit.jupiter.api.Test)

Aggregations

NoticePolicyBuilder (api.support.builders.NoticePolicyBuilder)73 NoticeConfigurationBuilder (api.support.builders.NoticeConfigurationBuilder)64 Test (org.junit.jupiter.api.Test)63 JsonObject (io.vertx.core.json.JsonObject)58 ZonedDateTime (java.time.ZonedDateTime)53 IndividualResource (api.support.http.IndividualResource)51 UUID (java.util.UUID)47 ItemResource (api.support.http.ItemResource)37 RequestBuilder (api.support.builders.RequestBuilder)28 ClockUtil.getZonedDateTime (org.folio.circulation.support.utils.ClockUtil.getZonedDateTime)21 CheckInByBarcodeRequestBuilder (api.support.builders.CheckInByBarcodeRequestBuilder)18 LoanPolicyBuilder (api.support.builders.LoanPolicyBuilder)16 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)14 ItemBuilder (api.support.builders.ItemBuilder)11 Period (org.folio.circulation.domain.policy.Period)11 Matcher (org.hamcrest.Matcher)11 CheckOutByBarcodeRequestBuilder (api.support.builders.CheckOutByBarcodeRequestBuilder)10 MoveRequestBuilder (api.support.builders.MoveRequestBuilder)9 HashMap (java.util.HashMap)9 lombok.val (lombok.val)8