Lines 16-21
Link Here
|
16 |
# along with Koha; if not, see <http://www.gnu.org/licenses>. |
16 |
# along with Koha; if not, see <http://www.gnu.org/licenses>. |
17 |
|
17 |
|
18 |
use Modern::Perl; |
18 |
use Modern::Perl; |
|
|
19 |
use utf8; |
19 |
|
20 |
|
20 |
use DateTime; |
21 |
use DateTime; |
21 |
use C4::Biblio; |
22 |
use C4::Biblio; |
Lines 26-32
use C4::Reserves;
Link Here
|
26 |
use Koha::DateUtils; |
27 |
use Koha::DateUtils; |
27 |
use Koha::Database; |
28 |
use Koha::Database; |
28 |
|
29 |
|
29 |
use Test::More tests => 59; |
30 |
use Test::More tests => 67; |
30 |
|
31 |
|
31 |
BEGIN { |
32 |
BEGIN { |
32 |
use_ok('C4::Circulation'); |
33 |
use_ok('C4::Circulation'); |
Lines 539-544
C4::Context->dbh->do("DELETE FROM accountlines");
Link Here
|
539 |
|
540 |
|
540 |
} |
541 |
} |
541 |
|
542 |
|
|
|
543 |
##Preparing test Objects for the testReturnToShelvingCart() because none are available in this context. |
544 |
##The test can be easily moved to another context. |
545 |
#Create another record |
546 |
my $biblio = MARC::Record->new(); |
547 |
$biblio->append_fields( |
548 |
MARC::Field->new('100', ' ', ' ', a => 'The Anonymous'), |
549 |
MARC::Field->new('245', ' ', ' ', a => 'Something is worng here') |
550 |
); |
551 |
my ($biblionumber, $biblioitemnumber, $itemnumber) = C4::Biblio::AddBiblio($biblio, ''); |
552 |
$biblio = C4::Biblio::GetBiblio($biblionumber); |
553 |
#Create any circulable item |
554 |
($biblionumber, $biblioitemnumber, $itemnumber) = C4::Items::AddItem( |
555 |
{ |
556 |
homebranch => 'CPL', |
557 |
holdingbranch => 'CPL', |
558 |
barcode => 'SauliNiinistö', |
559 |
}, |
560 |
$biblionumber |
561 |
); |
562 |
$item = C4::Items::GetItem($itemnumber); |
563 |
# Create a borrower |
564 |
my $borrowernumber = C4::Members::AddMember( |
565 |
firstname => 'Fridolyn', |
566 |
surname => 'SOMERS', |
567 |
categorycode => 'S', |
568 |
branchcode => 'CPL', |
569 |
); |
570 |
$borrower = C4::Members::GetMember(borrowernumber => $borrowernumber); |
571 |
testReturnToShelvingCart($borrower, $item); |
572 |
|
542 |
$dbh->rollback; |
573 |
$dbh->rollback; |
543 |
|
574 |
|
544 |
1; |
575 |
1; |
545 |
- |
576 |
|
|
|
577 |
=head testReturnToShelvingCart |
578 |
|
579 |
testReturnToShelvingCart($borrower, $item); |
580 |
|
581 |
Runs 8 tests for the ReturnToShelvingCart-feature. |
582 |
|
583 |
@PARAM1, borrower-hash from koha.borrowers-table, can be any Borrower who can check-out/in |
584 |
@PARAM2, item-hash from koha-items-table, can be any Item which can be circulated |
585 |
|
586 |
=cut |
587 |
sub testReturnToShelvingCart { |
588 |
my $borrower = shift; #Any borrower who can check-in-out will do. |
589 |
my $item = shift; #Any Item that can be circulated will do. |
590 |
my $originalIssues = C4::Circulation::GetIssues({borrowernumber => $borrower->{borrowernumber}}); |
591 |
my $originalReturnToShelvingCart = C4::Context->preference('ReturnToShelvingCart'); #Store the original preference so we can rollback changes |
592 |
C4::Context->set_preference('ReturnToShelvingCart', 1) unless $originalReturnToShelvingCart; #Make sure it is 'Move' |
593 |
|
594 |
#TEST1: Make sure the Item has an intelligible location and permanent_location |
595 |
my $location = 'BOOK'; |
596 |
my $anotherLocation = 'SHELF'; |
597 |
C4::Items::ModItem({location => $location}, $item->{biblionumber}, $item->{itemnumber}); |
598 |
$item = C4::Items::GetItem($item->{itemnumber}); #Update the DB changes. |
599 |
ok($item->{permanent_location} eq $location, "ReturnToShelvingCart: Setting a proper location succeeded."); |
600 |
|
601 |
#TEST2: It makes no difference in which state the Item is, when it is returned, the location changes to 'CART' |
602 |
C4::Circulation::AddReturn($item->{barcode}, $borrower->{branchcode}); |
603 |
$item = C4::Items::GetItem($item->{itemnumber}); #Update the DB changes. |
604 |
ok($item->{permanent_location} eq $location && $item->{location} eq 'CART', "ReturnToShelvingCart: Item returned, location and permanent_location OK!"); |
605 |
|
606 |
#TEST3: Editing the Item didn't screw up the permanent_location |
607 |
C4::Items::ModItem({price => 12}, $item->{biblionumber}, $item->{itemnumber}); |
608 |
$item = C4::Items::GetItem($item->{itemnumber}); #Update the DB changes. |
609 |
ok($item->{permanent_location} eq $location && $item->{location} eq 'CART', "ReturnToShelvingCart: Minor modifying an Item doesn't overwrite permanent_location!"); |
610 |
|
611 |
#TEST4: Checking an Item out to test another possible state. |
612 |
C4::Items::ModItem({location => $location}, $item->{biblionumber}, $item->{itemnumber}); #Reset the original location, as if the cart_to_Shelf.pl-script has been ran. |
613 |
C4::Circulation::AddIssue($borrower, $item->{barcode}); |
614 |
my $issues = C4::Circulation::GetIssues({borrowernumber => $borrower->{borrowernumber}}); |
615 |
ok( scalar(@$originalIssues)+1 == scalar(@$issues) ,"ReturnToShelvingCart: Adding an Issue succeeded!" ); |
616 |
|
617 |
#TEST5: |
618 |
C4::Circulation::AddReturn($item->{barcode}, $borrower->{branchcode}); |
619 |
$item = C4::Items::GetItem($item->{itemnumber}); #Update the DB changes. |
620 |
ok($item->{permanent_location} eq $location && $item->{location} eq 'CART', "ReturnToShelvingCart: Item returned again, location and permanent_location OK!"); |
621 |
|
622 |
#TEST6: Editing the Item without a permanent_location |
623 |
# (like when Editing the item using the staff clients editing view @ additem.pl?biblionumber=469263) |
624 |
# didn't screw up the permanent_location |
625 |
delete $item->{permanent_location}; |
626 |
C4::Items::ModItem($item, $item->{biblionumber}, $item->{itemnumber}); |
627 |
$item = C4::Items::GetItem($item->{itemnumber}); #Update the DB changes. |
628 |
ok($item->{permanent_location} eq $location && $item->{location} eq 'CART', "ReturnToShelvingCart: Modifying the whole Item doesn't overwrite permanent_location!"); |
629 |
|
630 |
#TEST7: Modifying only the permanent_location is an interesting option! So our Item is in 'CART', but we want to keep it there (hypothetically) and change the real location! |
631 |
C4::Items::ModItem({permanent_location => $anotherLocation}, $item->{biblionumber}, $item->{itemnumber}); |
632 |
$item = C4::Items::GetItem($item->{itemnumber}); #Update the DB changes. |
633 |
ok($item->{permanent_location} eq $anotherLocation && $item->{location} eq 'CART', "ReturnToShelvingCart: Modifying the permanent_location while the location is 'CART'."); |
634 |
|
635 |
#TEST8: Adding an Item without a permanent_location defined... Justin Case |
636 |
my $yetAnotherLocation = 'STAFF'; |
637 |
my ( $xyz4lol, $whysomany4, $addedItemnumber ) = C4::Items::AddItem( |
638 |
{ |
639 |
location => $yetAnotherLocation, |
640 |
homebranch => 'CPL', |
641 |
holdingbranch => 'MPL', |
642 |
barcode => 'Hölökyn kölökyn', |
643 |
replacementprice => 16.00 |
644 |
}, |
645 |
$item->{biblionumber} |
646 |
); |
647 |
my $addedItem = C4::Items::GetItem($addedItemnumber); |
648 |
ok($item->{permanent_location} eq $yetAnotherLocation && $item->{location} eq $yetAnotherLocation, "ReturnToShelvingCart: Adding a new Item with location also sets the permanent_location."); |
649 |
|
650 |
C4::Context->set_preference('ReturnToShelvingCart', $originalReturnToShelvingCart) unless $originalReturnToShelvingCart; #Set it to the original value |
651 |
} |