|
Lines 19-25
use Modern::Perl;
Link Here
|
| 19 |
use utf8; |
19 |
use utf8; |
| 20 |
|
20 |
|
| 21 |
use Test::NoWarnings; |
21 |
use Test::NoWarnings; |
| 22 |
use Test::More tests => 76; |
22 |
use Test::More tests => 77; |
| 23 |
use Test::Exception; |
23 |
use Test::Exception; |
| 24 |
use Test::MockModule; |
24 |
use Test::MockModule; |
| 25 |
use Test::Deep qw( cmp_deeply ); |
25 |
use Test::Deep qw( cmp_deeply ); |
|
Lines 6882-6887
subtest 'AddIssue records staff who checked out item if appropriate' => sub {
Link Here
|
| 6882 |
); |
6882 |
); |
| 6883 |
}; |
6883 |
}; |
| 6884 |
|
6884 |
|
|
|
6885 |
subtest 'AddIssue | booking status handling' => sub { |
| 6886 |
plan tests => 5; |
| 6887 |
|
| 6888 |
my $schema = Koha::Database->schema; |
| 6889 |
$schema->storage->txn_begin; |
| 6890 |
|
| 6891 |
my $patron1 = $builder->build_object( { class => 'Koha::Patrons' } ); |
| 6892 |
my $patron2 = $builder->build_object( { class => 'Koha::Patrons' } ); |
| 6893 |
my $pickup_library = $builder->build_object( { class => 'Koha::Libraries' } ); |
| 6894 |
my $item = $builder->build_sample_item( { bookable => 1 } ); |
| 6895 |
|
| 6896 |
# Test 1: Patron checks out item with their own booking - should mark as completed |
| 6897 |
my $booking1 = Koha::Booking->new( |
| 6898 |
{ |
| 6899 |
patron_id => $patron1->borrowernumber, |
| 6900 |
pickup_library_id => $pickup_library->branchcode, |
| 6901 |
item_id => $item->itemnumber, |
| 6902 |
biblio_id => $item->biblio->biblionumber, |
| 6903 |
start_date => dt_from_string(), |
| 6904 |
end_date => dt_from_string()->add( days => 7 ), |
| 6905 |
} |
| 6906 |
)->store(); |
| 6907 |
|
| 6908 |
my $issue1 = AddIssue( $patron1, $item->barcode, dt_from_string()->add( days => 7 ) ); |
| 6909 |
$booking1->discard_changes(); |
| 6910 |
|
| 6911 |
is( $booking1->status, 'completed', "Patron's own booking marked as completed when item checked out" ); |
| 6912 |
|
| 6913 |
# Clean up for next test |
| 6914 |
AddReturn( $item->barcode, $pickup_library->branchcode ); |
| 6915 |
$booking1->delete(); |
| 6916 |
|
| 6917 |
# Test 2: Another patron checks out item with different patron's booking overlapping actual booking period - should cancel booking |
| 6918 |
my $booking2 = Koha::Booking->new( |
| 6919 |
{ |
| 6920 |
patron_id => $patron1->borrowernumber, |
| 6921 |
pickup_library_id => $pickup_library->branchcode, |
| 6922 |
item_id => $item->itemnumber, |
| 6923 |
biblio_id => $item->biblio->biblionumber, |
| 6924 |
start_date => dt_from_string()->add( days => 1 ), |
| 6925 |
end_date => dt_from_string()->add( days => 5 ), |
| 6926 |
} |
| 6927 |
)->store(); |
| 6928 |
|
| 6929 |
my $issue2 = AddIssue( $patron2, $item->barcode, dt_from_string()->add( days => 3 ) ); |
| 6930 |
$booking2->discard_changes(); |
| 6931 |
|
| 6932 |
is( |
| 6933 |
$booking2->status, 'cancelled', |
| 6934 |
"Another patron's booking cancelled when checkout overlaps actual booking period" |
| 6935 |
); |
| 6936 |
|
| 6937 |
# Clean up for next test |
| 6938 |
AddReturn( $item->barcode, $pickup_library->branchcode ); |
| 6939 |
$booking2->delete(); |
| 6940 |
|
| 6941 |
# Test 3: Another patron checks out item - checkout period only in lead period - should NOT cancel booking |
| 6942 |
# First set up a lead period rule |
| 6943 |
Koha::CirculationRules->set_rules( |
| 6944 |
{ |
| 6945 |
branchcode => '*', |
| 6946 |
itemtype => $item->effective_itemtype, |
| 6947 |
rules => { |
| 6948 |
bookings_lead_period => 3, |
| 6949 |
}, |
| 6950 |
} |
| 6951 |
); |
| 6952 |
|
| 6953 |
my $booking3 = Koha::Booking->new( |
| 6954 |
{ |
| 6955 |
patron_id => $patron1->borrowernumber, |
| 6956 |
pickup_library_id => $pickup_library->branchcode, |
| 6957 |
item_id => $item->itemnumber, |
| 6958 |
biblio_id => $item->biblio->biblionumber, |
| 6959 |
start_date => dt_from_string()->add( days => 5 ), |
| 6960 |
end_date => dt_from_string()->add( days => 10 ), |
| 6961 |
} |
| 6962 |
)->store(); |
| 6963 |
|
| 6964 |
# Issue that would return before booking starts (only conflicts due to lead period) |
| 6965 |
my $issue3 = AddIssue( $patron2, $item->barcode, dt_from_string()->add( days => 4 ) ); |
| 6966 |
$booking3->discard_changes(); |
| 6967 |
|
| 6968 |
is( |
| 6969 |
$booking3->status, 'new', |
| 6970 |
"Another patron's booking NOT cancelled when checkout only conflicts with lead period" |
| 6971 |
); |
| 6972 |
|
| 6973 |
# Clean up for next test |
| 6974 |
AddReturn( $item->barcode, $pickup_library->branchcode ); |
| 6975 |
$booking3->delete(); |
| 6976 |
|
| 6977 |
# Test 4: Edge case - checkout period starts before booking and ends after booking (encompasses booking) |
| 6978 |
my $booking4 = Koha::Booking->new( |
| 6979 |
{ |
| 6980 |
patron_id => $patron1->borrowernumber, |
| 6981 |
pickup_library_id => $pickup_library->branchcode, |
| 6982 |
item_id => $item->itemnumber, |
| 6983 |
biblio_id => $item->biblio->biblionumber, |
| 6984 |
start_date => dt_from_string()->add( days => 2 ), |
| 6985 |
end_date => dt_from_string()->add( days => 4 ), |
| 6986 |
} |
| 6987 |
)->store(); |
| 6988 |
|
| 6989 |
# Issue that encompasses the entire booking period |
| 6990 |
my $issue4 = AddIssue( $patron2, $item->barcode, dt_from_string()->add( days => 6 ) ); |
| 6991 |
$booking4->discard_changes(); |
| 6992 |
|
| 6993 |
is( |
| 6994 |
$booking4->status, 'cancelled', |
| 6995 |
"Another patron's booking cancelled when checkout encompasses entire booking period" |
| 6996 |
); |
| 6997 |
|
| 6998 |
# Clean up for next test |
| 6999 |
AddReturn( $item->barcode, $pickup_library->branchcode ); |
| 7000 |
$booking4->delete(); |
| 7001 |
|
| 7002 |
# Test 5: No booking found - should not cause errors |
| 7003 |
my $issue5 = AddIssue( $patron1, $item->barcode, dt_from_string()->add( days => 7 ) ); |
| 7004 |
|
| 7005 |
ok( $issue5, "AddIssue works normally when no booking is found" ); |
| 7006 |
|
| 7007 |
$schema->storage->txn_rollback; |
| 7008 |
}; |
| 7009 |
|
| 6885 |
subtest "Item's onloan value should be set if checked out item is checked out to a different patron" => sub { |
7010 |
subtest "Item's onloan value should be set if checked out item is checked out to a different patron" => sub { |
| 6886 |
plan tests => 2; |
7011 |
plan tests => 2; |
| 6887 |
|
7012 |
|
| 6888 |
- |
|
|