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

(-)a/t/db_dependent/Circulation.t (-2 / +108 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 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
}

Return to bug 13540