From aa51dab96e638b134b90a3fbc28204cc22f13c47 Mon Sep 17 00:00:00 2001 From: Brendan Lawlor Date: Thu, 4 Sep 2025 17:58:31 +0000 Subject: [PATCH] Bug 39419: (follow-up) Unit tests perl t/db_dependent/Reserves.t perl t/db_dependent/api/v1/holds.t --- t/db_dependent/Reserves.t | 75 ++++++++++++++++++++++++++++++++++- t/db_dependent/api/v1/holds.t | 60 ++++++++++++++++++++++++---- 2 files changed, 126 insertions(+), 9 deletions(-) diff --git a/t/db_dependent/Reserves.t b/t/db_dependent/Reserves.t index 33a99d714e..c00396085f 100755 --- a/t/db_dependent/Reserves.t +++ b/t/db_dependent/Reserves.t @@ -1508,7 +1508,7 @@ subtest 'IsAvailableForItemLevelRequest() tests' => sub { subtest 'AddReserve() tests' => sub { - plan tests => 2; + plan tests => 4; $schema->storage->txn_begin; @@ -1554,6 +1554,79 @@ subtest 'AddReserve() tests' => sub { $patron->discard_changes; isnt( $patron->lastseen, undef, "Patron activity tracked when hold is a valid trigger" ); + my $reserve_id = AddReserve( + { + branchcode => $library->branchcode, + borrowernumber => $patron->id, + biblionumber => $biblio->id, + expiration_date => '2040-04-02' + } + ); + + my $hold = Koha::Holds->find($reserve_id); + + is( $hold->expirationdate, '2040-04-02', 'Successfully set expiration date' ); + + $reserve_id = AddReserve( + { + branchcode => $library->branchcode, + borrowernumber => $patron->id, + biblionumber => $biblio->id, + patron_expiration_date => '2040-04-02' + } + ); + + $hold = Koha::Holds->find($reserve_id); + is( $hold->patron_expiration_date, '2040-04-02', 'Successfully set patron expiration date' ); + + $schema->storage->txn_rollback; +}; + +subtest 'ModReserve() tests' => sub { + + plan tests => 2; + + $schema->storage->txn_begin; + + my $library = $builder->build_object( { class => 'Koha::Libraries' } ); + my $patron = $builder->build_object( { class => 'Koha::Patrons', value => { lastseen => undef } } ); + my $biblio = $builder->build_sample_biblio; + + my $reserve_id = AddReserve( + { + branchcode => $library->branchcode, + borrowernumber => $patron->id, + biblionumber => $biblio->id, + } + ); + + my $hold = Koha::Holds->find($reserve_id); + + ModReserve( + { + reserve_id => $hold->id, + branchcode => $hold->branchcode, + expirationdate => '2040-04-02', + rank => $hold->priority, + reservedate => $hold->reservedate, + } + ); + + $hold = Koha::Holds->find($reserve_id); + is( $hold->expirationdate, '2040-04-02', 'Successfully updated expiration date' ); + + ModReserve( + { + reserve_id => $reserve_id, + rank => $hold->priority, + patron_expiration_date => '2040-04-02', + branchcode => $hold->branchcode, + } + ); + + $hold = Koha::Holds->find($reserve_id); + is( $hold->patron_expiration_date, '2040-04-02', 'Successfully updated patron expiration date' ); + $schema->storage->txn_rollback; }; diff --git a/t/db_dependent/api/v1/holds.t b/t/db_dependent/api/v1/holds.t index a96ca9fe65..2b2798b648 100755 --- a/t/db_dependent/api/v1/holds.t +++ b/t/db_dependent/api/v1/holds.t @@ -1210,7 +1210,7 @@ subtest 'pickup_locations() tests' => sub { subtest 'edit() tests' => sub { - plan tests => 47; + plan tests => 61; $schema->storage->txn_begin; @@ -1324,6 +1324,28 @@ subtest 'edit() tests' => sub { is( $biblio_hold->reservedate, '2022-01-02', 'Hold date changed correctly' ); is( $biblio_hold->expirationdate, '2022-03-02', 'Expiration date changed correctly' ); + $biblio_hold_data = { + patron_expiration_date => '2022-05-02', + }; + + $t->patch_ok( "//$userid:$password@/api/v1/holds/" . $biblio_hold->id => json => $biblio_hold_data ) + ->status_is(200); + + $biblio_hold->discard_changes; + is( $biblio_hold->patron_expiration_date, '2022-05-02', 'Patron expiration date changed correctly' ); + + $biblio_hold_data = { + expiration_date => '2022-07-02', + patron_expiration_date => '2022-09-02', + }; + + $t->patch_ok( "//$userid:$password@/api/v1/holds/" . $biblio_hold->id => json => $biblio_hold_data ) + ->status_is(200); + + $biblio_hold->discard_changes; + is( $biblio_hold->expirationdate, '2022-07-02', 'Expiration date changed correctly' ); + is( $biblio_hold->patron_expiration_date, '2022-09-02', 'Patron expiration date changed correctly' ); + # Test item-level holds my $item_hold = $builder->build_object( { @@ -1386,6 +1408,24 @@ subtest 'edit() tests' => sub { is( $item_hold->reservedate, '2022-01-02', 'Hold date changed correctly' ); is( $item_hold->expirationdate, '2022-03-02', 'Expiration date changed correctly' ); + $item_hold_data = { patron_expiration_date => '2022-05-02' }; + + $t->patch_ok( "//$userid:$password@/api/v1/holds/" . $item_hold->id => json => $item_hold_data )->status_is(200); + + $item_hold->discard_changes; + is( $item_hold->patron_expiration_date, '2022-05-02', 'Patron expiration date changed correctly' ); + + $item_hold_data = { + expiration_date => '2022-07-02', + patron_expiration_date => '2022-09-02', + }; + + $t->patch_ok( "//$userid:$password@/api/v1/holds/" . $item_hold->id => json => $item_hold_data )->status_is(200); + + $item_hold->discard_changes; + is( $item_hold->expirationdate, '2022-07-02', 'Expiration date changed correctly' ); + is( $item_hold->patron_expiration_date, '2022-09-02', 'Patron expiration date changed correctly' ); + $schema->storage->txn_rollback; }; @@ -1482,6 +1522,7 @@ subtest 'add() tests' => sub { biblio_id => $biblio_hold_api_data->{biblio_id}, patron_id => $biblio_hold_api_data->{patron_id}, pickup_library_id => $library_1->branchcode, + expiration_date => '2022-11-02', }; $t->post_ok( "//$userid:$password@/api/v1/holds" => json => $biblio_hold_data )->status_is(400) @@ -1508,9 +1549,10 @@ subtest 'add() tests' => sub { $biblio_hold_api_data = $biblio_hold->to_api; $biblio_hold->delete; $biblio_hold_data = { - biblio_id => $biblio_hold_api_data->{biblio_id}, - patron_id => $biblio_hold_api_data->{patron_id}, - pickup_library_id => $library_1->branchcode, + biblio_id => $biblio_hold_api_data->{biblio_id}, + patron_id => $biblio_hold_api_data->{patron_id}, + pickup_library_id => $library_1->branchcode, + patron_expiration_date => '2022-11-02', }; $t->post_ok( "//$userid:$password@/api/v1/holds" => json => $biblio_hold_data )->status_is(400) @@ -1535,10 +1577,12 @@ subtest 'add() tests' => sub { my $item_hold_api_data = $item_hold->to_api; $item_hold->delete; my $item_hold_data = { - biblio_id => $item_hold_api_data->{biblio_id}, - item_id => $item_hold_api_data->{item_id}, - patron_id => $item_hold_api_data->{patron_id}, - pickup_library_id => $library_1->branchcode, + biblio_id => $item_hold_api_data->{biblio_id}, + item_id => $item_hold_api_data->{item_id}, + patron_id => $item_hold_api_data->{patron_id}, + pickup_library_id => $library_1->branchcode, + expiration_date => '2022-11-02', + patron_expiration_date => '2022-11-02', }; $t->post_ok( "//$userid:$password@/api/v1/holds" => json => $item_hold_data )->status_is(400) -- 2.39.5