| Lines 277-283
          subtest "AddReturn logging on statistics table (item-level_itypes=0)" => sub {
      
      
        Link Here | 
        
          | 277 | }; | 277 | }; | 
        
          | 278 |  | 278 |  | 
        
          | 279 | subtest 'Handle ids duplication' => sub { | 279 | subtest 'Handle ids duplication' => sub { | 
          
            
              | 280 |     plan tests => 4; | 280 |     plan tests => 6; | 
        
          | 281 |  | 281 |  | 
        
          | 282 |     t::lib::Mocks::mock_preference( 'item-level_itypes', 1 ); | 282 |     t::lib::Mocks::mock_preference( 'item-level_itypes', 1 ); | 
        
          | 283 |     t::lib::Mocks::mock_preference( 'CalculateFinesOnReturn', 1 ); | 283 |     t::lib::Mocks::mock_preference( 'CalculateFinesOnReturn', 1 ); | 
  
    | Lines 302-322
          subtest 'Handle ids duplication' => sub {
      
      
        Link Here | 
        
          | 302 |     $patron = Koha::Patrons->find( $patron->{borrowernumber} ); | 302 |     $patron = Koha::Patrons->find( $patron->{borrowernumber} ); | 
        
          | 303 |  | 303 |  | 
        
          | 304 |     my $original_checkout = AddIssue( $patron->unblessed, $item->{barcode}, dt_from_string->subtract( days => 50 ) ); | 304 |     my $original_checkout = AddIssue( $patron->unblessed, $item->{barcode}, dt_from_string->subtract( days => 50 ) ); | 
            
              | 305 |     $builder->build({ source => 'OldIssue', value => { issue_id => $original_checkout->issue_id } }); |  |  | 
            
              | 306 |     my $old_checkout = Koha::Old::Checkouts->find( $original_checkout->issue_id ); | 
        
          | 307 |  | 305 |  | 
          
            
              | 308 |     AddRenewal( $patron->borrowernumber, $item->{itemnumber} ); | 306 |     my $issue_id = $original_checkout->issue_id; | 
            
              |  |  | 307 |     # Create an existing entry in old_issue | 
            
              | 308 |     $builder->build({ source => 'OldIssue', value => { issue_id => $issue_id } }); | 
            
              | 309 |  | 
            
              | 310 |     my $old_checkout = Koha::Old::Checkouts->find( $issue_id ); | 
        
          | 309 |  | 311 |  | 
          
            
              | 310 |     my ($doreturn, $messages, $new_checkout, $borrower) = AddReturn( $item->{barcode}, undef, undef, undef, dt_from_string ); | 312 |     my ($doreturn, $messages, $new_checkout, $borrower); | 
            
              |  |  | 313 |     warning_like { | 
            
              | 314 |         ( $doreturn, $messages, $new_checkout, $borrower ) = | 
            
              | 315 |           AddReturn( $item->{barcode}, undef, undef, undef, dt_from_string ); | 
            
              | 316 |     } | 
            
              | 317 |     [ | 
            
              | 318 |         qr{.*DBD::mysql::st execute failed: Duplicate entry.*}, | 
            
              | 319 |         { carped => qr{The checkin for the following issue failed.*DBIx::Class::Storage::DBI::_dbh_execute.*} } | 
            
              | 320 |     ], | 
            
              | 321 |     'DBD should have raised an error about dup primary key'; | 
        
          | 311 |  | 322 |  | 
          
            
              | 312 |     my $account_lines = Koha::Account::Lines->search({ borrowernumber => $patron->borrowernumber, issue_id => $original_checkout->issue_id }); | 323 |     is( $doreturn, 0, 'Return should not have been done' ); | 
            
              | 313 |     is( $account_lines->count, 0, 'No account lines should exist on old issue_id' ); | 324 |     is( $messages->{WasReturned}, 0, 'messages should have the WasReturned flag set to 0' ); | 
            
              |  |  | 325 |     is( $messages->{DataCorrupted}, 1, 'messages should have the DataCorrupted flag set to 1' ); | 
        
          | 314 |  | 326 |  | 
          
            
              | 315 |     $account_lines = Koha::Account::Lines->search({ borrowernumber => $patron->borrowernumber, issue_id => $new_checkout->{issue_id} }); | 327 |     my $account_lines = Koha::Account::Lines->search({ borrowernumber => $patron->borrowernumber, issue_id => $issue_id }); | 
            
              | 316 |     is( $account_lines->count, 2, 'Two account lines should exist on new issue_id' ); | 328 |     is( $account_lines->count, 0, 'No account lines should exist for this issue_id, patron should not have been charged' ); | 
        
          | 317 |  | 329 |  | 
          
            
              | 318 |     isnt( $original_checkout->issue_id, $new_checkout->{issue_id}, 'AddReturn should return the issue with the new issue_id' ); | 330 |     is( Koha::Checkouts->find( $issue_id )->issue_id, $issue_id, 'The issues entry should not have been removed' ); | 
            
              | 319 |     isnt( $old_checkout->itemnumber, $item->{itemnumber}, 'If an item is checked-in, it should be moved to old_issues even if the issue_id already existed in the table' ); |  |  | 
        
          | 320 | }; | 331 | }; | 
        
          | 321 |  | 332 |  | 
        
          | 322 | 1; | 333 | 1; | 
            
              | 323 | -  |  |  |