View | Details | Raw Unified | Return to bug 13540
Collapse All | Expand All

(-)a/t/db_dependent/Circulation.t (-2 / +109 lines)
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 27-33 use C4::Overdues qw(UpdateFine); Link Here
27
use Koha::DateUtils;
28
use Koha::DateUtils;
28
use Koha::Database;
29
use Koha::Database;
29
30
30
use Test::More tests => 61;
31
use Test::More tests => 69;
31
32
32
BEGIN {
33
BEGIN {
33
    use_ok('C4::Circulation');
34
    use_ok('C4::Circulation');
Lines 594-599 C4::Context->dbh->do("DELETE FROM accountlines"); Link Here
594
    is ( $count, 0, "Calling UpdateFine on non-existant fine with an amount of 0 does not result in an empty fine" );
595
    is ( $count, 0, "Calling UpdateFine on non-existant fine with an amount of 0 does not result in an empty fine" );
595
}
596
}
596
597
598
##Preparing test Objects for the testReturnToShelvingCart() because none are available in this context.
599
##The test can be easily moved to another context.
600
#Create another record
601
my $biblio = MARC::Record->new();
602
$biblio->append_fields(
603
    MARC::Field->new('100', ' ', ' ', a => 'The Anonymous'),
604
    MARC::Field->new('245', ' ', ' ', a => 'Something is worng here')
605
);
606
my ($biblionumber, $biblioitemnumber, $itemnumber) = C4::Biblio::AddBiblio($biblio, '');
607
$biblio = C4::Biblio::GetBiblio($biblionumber);
608
#Create any circulable item
609
($biblionumber, $biblioitemnumber, $itemnumber) = C4::Items::AddItem(
610
    {
611
        homebranch       => 'CPL',
612
        holdingbranch    => 'CPL',
613
        barcode          => 'SauliNiinistö',
614
    },
615
    $biblionumber
616
);
617
$item = C4::Items::GetItem($itemnumber);
618
# Create a borrower
619
my $borrowernumber = C4::Members::AddMember(
620
    firstname =>  'Fridolyn',
621
    surname => 'SOMERS',
622
    categorycode => 'S',
623
    branchcode => 'CPL',
624
);
625
$borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
626
testReturnToShelvingCart($borrower, $item);
627
597
$dbh->rollback;
628
$dbh->rollback;
598
629
599
1;
630
1;
600
- 
631
632
=head1 testReturnToShelvingCart
633
634
    testReturnToShelvingCart($borrower, $item);
635
636
    Runs 8 tests for the ReturnToShelvingCart-feature.
637
638
@PARAM1, borrower-hash from koha.borrowers-table, can be any Borrower who can check-out/in
639
@PARAM2, item-hash from koha-items-table, can be any Item which can be circulated
640
641
=cut
642
643
sub testReturnToShelvingCart {
644
    my $borrower = shift; #Any borrower who can check-in-out will do.
645
    my $item = shift; #Any Item that can be circulated will do.
646
    my $originalIssues = C4::Circulation::GetIssues({borrowernumber => $borrower->{borrowernumber}});
647
    my $originalReturnToShelvingCart = C4::Context->preference('ReturnToShelvingCart'); #Store the original preference so we can rollback changes
648
    C4::Context->set_preference('ReturnToShelvingCart', 1) unless $originalReturnToShelvingCart; #Make sure it is 'Move'
649
650
    #TEST1: Make sure the Item has an intelligible location and permanent_location
651
    my $location = 'BOOK';
652
    my $anotherLocation = 'SHELF';
653
    C4::Items::ModItem({location => $location}, $item->{biblionumber}, $item->{itemnumber});
654
    $item = C4::Items::GetItem($item->{itemnumber}); #Update the DB changes.
655
    ok($item->{permanent_location} eq $location, "ReturnToShelvingCart: Setting a proper location succeeded.");
656
657
    #TEST2: It makes no difference in which state the Item is, when it is returned, the location changes to 'CART'
658
    C4::Circulation::AddReturn($item->{barcode}, $borrower->{branchcode});
659
    $item = C4::Items::GetItem($item->{itemnumber}); #Update the DB changes.
660
    ok($item->{permanent_location} eq $location && $item->{location} eq 'CART', "ReturnToShelvingCart: Item returned, location and permanent_location OK!");
661
662
    #TEST3: Editing the Item didn't screw up the permanent_location
663
    C4::Items::ModItem({price => 12}, $item->{biblionumber}, $item->{itemnumber});
664
    $item = C4::Items::GetItem($item->{itemnumber}); #Update the DB changes.
665
    ok($item->{permanent_location} eq $location && $item->{location} eq 'CART', "ReturnToShelvingCart: Minor modifying an Item doesn't overwrite permanent_location!");
666
667
    #TEST4: Checking an Item out to test another possible state.
668
    C4::Items::ModItem({location => $location}, $item->{biblionumber}, $item->{itemnumber}); #Reset the original location, as if the cart_to_Shelf.pl-script has been ran.
669
    C4::Circulation::AddIssue($borrower, $item->{barcode});
670
    my $issues = C4::Circulation::GetIssues({borrowernumber => $borrower->{borrowernumber}});
671
    ok(  scalar(@$originalIssues)+1 == scalar(@$issues)  ,"ReturnToShelvingCart: Adding an Issue succeeded!"  );
672
673
    #TEST5:
674
    C4::Circulation::AddReturn($item->{barcode}, $borrower->{branchcode});
675
    $item = C4::Items::GetItem($item->{itemnumber}); #Update the DB changes.
676
    ok($item->{permanent_location} eq $location && $item->{location} eq 'CART', "ReturnToShelvingCart: Item returned again, location and permanent_location OK!");
677
678
    #TEST6: Editing the Item without a permanent_location
679
    #  (like when Editing the item using the staff clients editing view @ additem.pl?biblionumber=469263)
680
    #  didn't screw up the permanent_location
681
    delete $item->{permanent_location};
682
    C4::Items::ModItem($item, $item->{biblionumber}, $item->{itemnumber});
683
    $item = C4::Items::GetItem($item->{itemnumber}); #Update the DB changes.
684
    ok($item->{permanent_location} eq $location && $item->{location} eq 'CART', "ReturnToShelvingCart: Modifying the whole Item doesn't overwrite permanent_location!");
685
686
    #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!
687
    C4::Items::ModItem({permanent_location => $anotherLocation}, $item->{biblionumber}, $item->{itemnumber});
688
    $item = C4::Items::GetItem($item->{itemnumber}); #Update the DB changes.
689
    ok($item->{permanent_location} eq $anotherLocation && $item->{location} eq 'CART', "ReturnToShelvingCart: Modifying the permanent_location while the location is 'CART'.");
690
691
    #TEST8: Adding an Item without a permanent_location defined... Justin Case
692
    my $yetAnotherLocation = 'STAFF';
693
    my ( $xyz4lol, $whysomany4, $addedItemnumber ) = C4::Items::AddItem(
694
        {
695
            location         => $yetAnotherLocation,
696
            homebranch       => 'CPL',
697
            holdingbranch    => 'MPL',
698
            barcode          => 'Hölökyn kölökyn',
699
            replacementprice => 16.00
700
        },
701
        $item->{biblionumber}
702
    );
703
    my $addedItem = C4::Items::GetItem($addedItemnumber);
704
    ok($item->{permanent_location} eq $yetAnotherLocation && $item->{location} eq $yetAnotherLocation, "ReturnToShelvingCart: Adding a new Item with location also sets the permanent_location.");
705
706
    C4::Context->set_preference('ReturnToShelvingCart', $originalReturnToShelvingCart) unless $originalReturnToShelvingCart; #Set it to the original value
707
}

Return to bug 13540