| Lines 17-23
          
      
      
        Link Here | 
        
          | 17 |  | 17 |  | 
        
          | 18 | use Modern::Perl; | 18 | use Modern::Perl; | 
        
          | 19 |  | 19 |  | 
          
            
              | 20 | use Test::More tests => 69; | 20 | use Test::More tests => 68; | 
        
          | 21 | use Test::MockModule; | 21 | use Test::MockModule; | 
        
          | 22 | use Test::Warn; | 22 | use Test::Warn; | 
        
          | 23 |  | 23 |  | 
  
    | Lines 33-39
          use C4::Biblio qw( GetMarcFromKohaField ModBiblio );
      
      
        Link Here | 
        
          | 33 | use C4::HoldsQueue; | 33 | use C4::HoldsQueue; | 
        
          | 34 | use C4::Members; | 34 | use C4::Members; | 
        
          | 35 | use C4::Reserves | 35 | use C4::Reserves | 
          
            
              | 36 |     qw( AddReserve AlterPriority CheckReserves ModReserve ModReserveAffect ReserveSlip CalculatePriority CanBookBeReserved IsAvailableForItemLevelRequest MoveReserve ChargeReserveFee RevertWaitingStatus CanItemBeReserved MergeHolds ); | 36 |     qw( AddReserve AlterPriority CheckReserves ModReserve ModReserveAffect ReserveSlip CalculatePriority CanBookBeReserved IsAvailableForItemLevelRequest MoveReserve ChargeReserveFee CanItemBeReserved MergeHolds ); | 
        
          | 37 | use Koha::ActionLogs; | 37 | use Koha::ActionLogs; | 
        
          | 38 | use Koha::Biblios; | 38 | use Koha::Biblios; | 
        
          | 39 | use Koha::Caches; | 39 | use Koha::Caches; | 
  
    | Lines 1021-1138
          subtest 'ChargeReserveFee tests' => sub {
      
      
        Link Here | 
        
          | 1021 |     is( $line->branchcode,        $library->id, "Library id is picked from userenv and stored correctly" ); | 1021 |     is( $line->branchcode,        $library->id, "Library id is picked from userenv and stored correctly" ); | 
        
          | 1022 | }; | 1022 | }; | 
        
          | 1023 |  | 1023 |  | 
            
              | 1024 | subtest 'reserves.item_level_hold' => sub { |  |  | 
            
              | 1025 |     plan tests => 2; | 
            
              | 1026 |  | 
            
              | 1027 |     my $item   = $builder->build_sample_item; | 
            
              | 1028 |     my $patron = $builder->build_object( | 
            
              | 1029 |         { | 
            
              | 1030 |             class => 'Koha::Patrons', | 
            
              | 1031 |             value => { branchcode => $item->homebranch } | 
            
              | 1032 |         } | 
            
              | 1033 |     ); | 
            
              | 1034 |  | 
            
              | 1035 |     subtest 'item level hold' => sub { | 
            
              | 1036 |         plan tests => 5; | 
            
              | 1037 |         my $reserve_id = AddReserve( | 
            
              | 1038 |             { | 
            
              | 1039 |                 branchcode     => $item->homebranch, | 
            
              | 1040 |                 borrowernumber => $patron->borrowernumber, | 
            
              | 1041 |                 biblionumber   => $item->biblionumber, | 
            
              | 1042 |                 priority       => 1, | 
            
              | 1043 |                 itemnumber     => $item->itemnumber, | 
            
              | 1044 |             } | 
            
              | 1045 |         ); | 
            
              | 1046 |  | 
            
              | 1047 |         my $hold = Koha::Holds->find($reserve_id); | 
            
              | 1048 |         is( $hold->item_level_hold, 1, 'item_level_hold should be set when AddReserve is called with a specific item' ); | 
            
              | 1049 |  | 
            
              | 1050 |         # Mark it waiting | 
            
              | 1051 |         ModReserveAffect( $item->itemnumber, $patron->borrowernumber, 1 ); | 
            
              | 1052 |  | 
            
              | 1053 |         my $mock = Test::MockModule->new('Koha::BackgroundJob::BatchUpdateBiblioHoldsQueue'); | 
            
              | 1054 |         $mock->mock( | 
            
              | 1055 |             'enqueue', | 
            
              | 1056 |             sub { | 
            
              | 1057 |                 my ( $self, $args ) = @_; | 
            
              | 1058 |                 is_deeply( | 
            
              | 1059 |                     $args->{biblio_ids}, | 
            
              | 1060 |                     [ $hold->biblionumber ], | 
            
              | 1061 |                     "AlterPriority triggers a holds queue update for the related biblio" | 
            
              | 1062 |                 ); | 
            
              | 1063 |             } | 
            
              | 1064 |         ); | 
            
              | 1065 |  | 
            
              | 1066 |         t::lib::Mocks::mock_preference( 'RealTimeHoldsQueue', 1 ); | 
            
              | 1067 |         t::lib::Mocks::mock_preference( 'HoldsLog',           1 ); | 
            
              | 1068 |  | 
            
              | 1069 |         # Revert the waiting status | 
            
              | 1070 |         C4::Reserves::RevertWaitingStatus( { itemnumber => $item->itemnumber } ); | 
            
              | 1071 |  | 
            
              | 1072 |         $hold = Koha::Holds->find($reserve_id); | 
            
              | 1073 |  | 
            
              | 1074 |         is( | 
            
              | 1075 |             $hold->itemnumber, $item->itemnumber, | 
            
              | 1076 |             'Itemnumber should not be removed when the waiting status is revert' | 
            
              | 1077 |         ); | 
            
              | 1078 |  | 
            
              | 1079 |         my $log = | 
            
              | 1080 |             Koha::ActionLogs->search( { module => 'HOLDS', action => 'MODIFY', object => $hold->reserve_id } )->next; | 
            
              | 1081 |         my $expected = sprintf q{'timestamp' => '%s'}, $hold->timestamp; | 
            
              | 1082 |         like( $log->info, qr{$expected}, 'Timestamp logged is the current one' ); | 
            
              | 1083 |         my $log_count = | 
            
              | 1084 |             Koha::ActionLogs->search( { module => 'HOLDS', action => 'MODIFY', object => $hold->reserve_id } )->count; | 
            
              | 1085 |  | 
            
              | 1086 |         t::lib::Mocks::mock_preference( 'RealTimeHoldsQueue', 0 ); | 
            
              | 1087 |         t::lib::Mocks::mock_preference( 'HoldsLog',           0 ); | 
            
              | 1088 |  | 
            
              | 1089 |         $hold->set_waiting; | 
            
              | 1090 |  | 
            
              | 1091 |         # Revert the waiting status, RealTimeHoldsQueue => shouldn't add a test | 
            
              | 1092 |         C4::Reserves::RevertWaitingStatus( { itemnumber => $item->itemnumber } ); | 
            
              | 1093 |  | 
            
              | 1094 |         $hold->delete;    # cleanup | 
            
              | 1095 |  | 
            
              | 1096 |         my $log_count_after = | 
            
              | 1097 |             Koha::ActionLogs->search( { module => 'HOLDS', action => 'MODIFY', object => $hold->reserve_id } )->count; | 
            
              | 1098 |         is( $log_count, $log_count_after, "No logging is added for RevertWaitingStatus when HoldsLog is disabled" ); | 
            
              | 1099 |  | 
            
              | 1100 |     }; | 
            
              | 1101 |  | 
            
              | 1102 |     subtest 'biblio level hold' => sub { | 
            
              | 1103 |         plan tests => 3; | 
            
              | 1104 |         my $reserve_id = AddReserve( | 
            
              | 1105 |             { | 
            
              | 1106 |                 branchcode     => $item->homebranch, | 
            
              | 1107 |                 borrowernumber => $patron->borrowernumber, | 
            
              | 1108 |                 biblionumber   => $item->biblionumber, | 
            
              | 1109 |                 priority       => 1, | 
            
              | 1110 |             } | 
            
              | 1111 |         ); | 
            
              | 1112 |  | 
            
              | 1113 |         my $hold = Koha::Holds->find($reserve_id); | 
            
              | 1114 |         is( | 
            
              | 1115 |             $hold->item_level_hold, 0, | 
            
              | 1116 |             'item_level_hold should not be set when AddReserve is called without a specific item' | 
            
              | 1117 |         ); | 
            
              | 1118 |  | 
            
              | 1119 |         # Mark it waiting | 
            
              | 1120 |         ModReserveAffect( $item->itemnumber, $patron->borrowernumber, 1 ); | 
            
              | 1121 |  | 
            
              | 1122 |         $hold = Koha::Holds->find($reserve_id); | 
            
              | 1123 |         is( $hold->itemnumber, $item->itemnumber, 'Itemnumber should be set on hold confirmation' ); | 
            
              | 1124 |  | 
            
              | 1125 |         # Revert the waiting status | 
            
              | 1126 |         C4::Reserves::RevertWaitingStatus( { itemnumber => $item->itemnumber } ); | 
            
              | 1127 |  | 
            
              | 1128 |         $hold = Koha::Holds->find($reserve_id); | 
            
              | 1129 |         is( $hold->itemnumber, undef, 'Itemnumber should be removed when the waiting status is revert' ); | 
            
              | 1130 |  | 
            
              | 1131 |         $hold->delete; | 
            
              | 1132 |     }; | 
            
              | 1133 |  | 
            
              | 1134 | }; | 
            
              | 1135 |  | 
        
          | 1136 | subtest 'MoveReserve additional test' => sub { | 1024 | subtest 'MoveReserve additional test' => sub { | 
        
          | 1137 |  | 1025 |  | 
        
          | 1138 |     plan tests => 8; | 1026 |     plan tests => 8; | 
  
    | Lines 1208-1214
          subtest 'MoveReserve additional test' => sub {
      
      
        Link Here | 
        
          | 1208 |  | 1096 |  | 
        
          | 1209 | }; | 1097 | }; | 
        
          | 1210 |  | 1098 |  | 
          
            
              | 1211 | subtest 'RevertWaitingStatus' => sub { | 1099 | # FIXME: Should be in Circulation.t | 
            
              |  |  | 1100 | subtest 'AddIssue calls $hold->revert_waiting()' => sub { | 
        
          | 1212 |  | 1101 |  | 
        
          | 1213 |     plan tests => 2; | 1102 |     plan tests => 2; | 
        
          | 1214 |  | 1103 |  |