Main Koha release repository
https://koha-community.org
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
262 lines
8.1 KiB
262 lines
8.1 KiB
#!/usr/bin/perl
|
|
|
|
# Copyright 2020 Koha Development team
|
|
#
|
|
# This file is part of Koha
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Koha; if not, see <http://www.gnu.org/licenses>.
|
|
|
|
use Modern::Perl;
|
|
|
|
use Koha::Database;
|
|
use Koha::DateUtils;
|
|
|
|
use t::lib::TestBuilder;
|
|
|
|
use Test::More tests => 5;
|
|
use Test::Exception;
|
|
|
|
my $schema = Koha::Database->new->schema;
|
|
my $builder = t::lib::TestBuilder->new;
|
|
|
|
subtest 'item relation tests' => sub {
|
|
plan tests => 2;
|
|
|
|
$schema->storage->txn_begin;
|
|
|
|
my $item = $builder->build_sample_item();
|
|
my $transfer = $builder->build_object(
|
|
{
|
|
class => 'Koha::Item::Transfers',
|
|
value => {
|
|
itemnumber => $item->itemnumber,
|
|
}
|
|
}
|
|
);
|
|
|
|
my $transfer_item = $transfer->item;
|
|
is( ref( $transfer_item ), 'Koha::Item', 'Koha::Item::Transfer->item should return a Koha::Item' );
|
|
is( $transfer_item->itemnumber, $item->itemnumber, 'Koha::Item::Transfer->item should return the correct item' );
|
|
|
|
$schema->storage->txn_rollback;
|
|
};
|
|
|
|
subtest 'transit tests' => sub {
|
|
plan tests => 7;
|
|
|
|
$schema->storage->txn_begin;
|
|
|
|
my $library1 = $builder->build_object( { class => 'Koha::Libraries' } );
|
|
my $library2 = $builder->build_object( { class => 'Koha::Libraries' } );
|
|
my $item = $builder->build_sample_item(
|
|
{
|
|
homebranch => $library1->branchcode,
|
|
holdingbranch => $library2->branchcode,
|
|
datelastseen => undef
|
|
}
|
|
);
|
|
|
|
my $transfer = $builder->build_object(
|
|
{
|
|
class => 'Koha::Item::Transfers',
|
|
value => {
|
|
itemnumber => $item->itemnumber,
|
|
frombranch => $library2->branchcode,
|
|
tobranch => $library1->branchcode,
|
|
reason => 'Manual'
|
|
}
|
|
}
|
|
);
|
|
is( ref($transfer), 'Koha::Item::Transfer', 'Mock transfer added' );
|
|
|
|
# Item checked out should result in failure
|
|
my $checkout = $builder->build_object(
|
|
{
|
|
class => 'Koha::Checkouts',
|
|
value => {
|
|
itemnumber => $item->itemnumber
|
|
}
|
|
}
|
|
);
|
|
is( ref($checkout), 'Koha::Checkout', 'Mock checkout added' );
|
|
|
|
throws_ok { $transfer->transit() }
|
|
'Koha::Exceptions::Item::Transfer::Out',
|
|
'Exception thrown if item is checked out';
|
|
|
|
$checkout->delete;
|
|
|
|
# CartToShelf test
|
|
$item->set({ location => 'CART', permanent_location => 'TEST' })->store();
|
|
is ( $item->location, 'CART', 'Item location set to CART');
|
|
$transfer->discard_changes;
|
|
$transfer->transit();
|
|
$item->discard_changes;
|
|
is ( $item->location, 'TEST', 'Item location correctly restored to match permanent location');
|
|
|
|
# Transit state set
|
|
ok( $transfer->datesent, 'Transit set the datesent for the transfer' );
|
|
|
|
# Last seen
|
|
ok ( $item->datelastseen, 'Transit set item datelastseen date');
|
|
|
|
$schema->storage->txn_rollback;
|
|
};
|
|
|
|
subtest 'receive tests' => sub {
|
|
plan tests => 5;
|
|
|
|
$schema->storage->txn_begin;
|
|
|
|
my $library1 = $builder->build_object( { class => 'Koha::Libraries' } );
|
|
my $library2 = $builder->build_object( { class => 'Koha::Libraries' } );
|
|
my $item = $builder->build_sample_item(
|
|
{
|
|
homebranch => $library1->branchcode,
|
|
holdingbranch => $library2->branchcode,
|
|
datelastseen => undef
|
|
}
|
|
);
|
|
|
|
my $transfer = $builder->build_object(
|
|
{
|
|
class => 'Koha::Item::Transfers',
|
|
value => {
|
|
itemnumber => $item->itemnumber,
|
|
frombranch => $library2->branchcode,
|
|
tobranch => $library1->branchcode,
|
|
datearrived => undef,
|
|
reason => 'Manual'
|
|
}
|
|
}
|
|
);
|
|
is( ref($transfer), 'Koha::Item::Transfer', 'Mock transfer added' );
|
|
|
|
# Item checked out should result in failure
|
|
my $checkout = $builder->build_object(
|
|
{
|
|
class => 'Koha::Checkouts',
|
|
value => {
|
|
itemnumber => $item->itemnumber
|
|
}
|
|
}
|
|
);
|
|
is( ref($checkout), 'Koha::Checkout', 'Mock checkout added' );
|
|
|
|
throws_ok { $transfer->receive() }
|
|
'Koha::Exceptions::Item::Transfer::Out',
|
|
'Exception thrown if item is checked out';
|
|
|
|
$checkout->delete;
|
|
|
|
# Transit state set
|
|
$transfer->discard_changes;
|
|
$transfer->receive();
|
|
ok( $transfer->datearrived, 'Receipt set the datearrived for the transfer' );
|
|
|
|
# Last seen
|
|
ok( $item->datelastseen, 'Receipt set item datelastseen date' );
|
|
|
|
$schema->storage->txn_rollback;
|
|
};
|
|
|
|
subtest 'in_transit tests' => sub {
|
|
|
|
plan tests => 3;
|
|
|
|
$schema->storage->txn_begin;
|
|
|
|
my $library_from = $builder->build_object( { class => 'Koha::Libraries' } );
|
|
my $library_to = $builder->build_object( { class => 'Koha::Libraries' } );
|
|
my $item = $builder->build_sample_item(
|
|
{
|
|
homebranch => $library_to->branchcode,
|
|
holdingbranch => $library_from->branchcode,
|
|
}
|
|
);
|
|
|
|
my $transfer = Koha::Item::Transfer->new(
|
|
{
|
|
itemnumber => $item->itemnumber,
|
|
frombranch => $library_from->branchcode,
|
|
tobranch => $library_to->branchcode,
|
|
daterequested => dt_from_string,
|
|
}
|
|
)->store;
|
|
|
|
ok( !$transfer->in_transit, 'in_transit returns false when only daterequested is defined' );
|
|
|
|
$transfer->datesent(dt_from_string)->store;
|
|
ok( $transfer->in_transit, 'in_transit returns true when datesent is defined');
|
|
|
|
$transfer->datearrived(dt_from_string)->store;
|
|
ok( !$transfer->in_transit, 'in_transit returns false when datearrived is defined');
|
|
|
|
|
|
$schema->storage->txn_rollback;
|
|
};
|
|
|
|
subtest 'cancel tests' => sub {
|
|
plan tests => 6;
|
|
|
|
$schema->storage->txn_begin;
|
|
|
|
my $library1 = $builder->build_object( { class => 'Koha::Libraries' } );
|
|
my $library2 = $builder->build_object( { class => 'Koha::Libraries' } );
|
|
my $item = $builder->build_sample_item(
|
|
{
|
|
homebranch => $library1->branchcode,
|
|
holdingbranch => $library2->branchcode,
|
|
datelastseen => undef
|
|
}
|
|
);
|
|
my $cancellation_reason = 'Manual';
|
|
|
|
my $transfer = $builder->build_object(
|
|
{
|
|
class => 'Koha::Item::Transfers',
|
|
value => {
|
|
itemnumber => $item->itemnumber,
|
|
frombranch => $library2->branchcode,
|
|
tobranch => $library1->branchcode,
|
|
datesent => \'NOW()',
|
|
datearrived => undef,
|
|
datecancelled => undef,
|
|
reason => 'Manual',
|
|
cancellation_reason => undef
|
|
}
|
|
}
|
|
);
|
|
is( ref($transfer), 'Koha::Item::Transfer', 'Mock transfer added' );
|
|
|
|
# Missing mandatory parameter
|
|
throws_ok { $transfer->cancel() } 'Koha::Exceptions::MissingParameter',
|
|
'Exception thrown if a reason is not passed to cancel';
|
|
|
|
# Item in transit should result in failure
|
|
throws_ok { $transfer->cancel($cancellation_reason) }
|
|
'Koha::Exceptions::Item::Transfer::Transit',
|
|
'Exception thrown if item is in transit';
|
|
|
|
$transfer->datesent(undef)->store();
|
|
|
|
# Transit state unset
|
|
$transfer->discard_changes;
|
|
$transfer->cancel($cancellation_reason);
|
|
ok( $transfer->datecancelled, 'Cancellation date set upon call to cancel' );
|
|
is( $transfer->cancellation_reason, 'Manual', 'Cancellation reason is set');
|
|
is( $transfer->reason, 'Manual', 'Reason is not updated by cancelling the transfer' );
|
|
|
|
$schema->storage->txn_rollback;
|
|
};
|
|
|