| 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 | } |