| 
      
            Lines 20-37
          
      
      
        Link Here
      
     | 
  
        
          | 20 | 
          use Modern::Perl;  | 
          20 | 
          use Modern::Perl;  | 
        
        
          | 21 | 
          use FindBin qw( $Bin );  | 
          21 | 
          use FindBin qw( $Bin );  | 
        
        
          | 22 | 
           | 
          22 | 
           | 
        
          
            
              | 23 | 
              use Test::More tests => 2;  | 
              23 | 
              use Test::More tests => 3;  | 
            
        
          | 24 | 
          use Test::Warn;  | 
          24 | 
          use Test::Warn;  | 
        
        
          | 25 | 
          use Test::MockModule;  | 
          25 | 
          use Test::MockModule;  | 
        
        
          | 26 | 
           | 
          26 | 
           | 
        
        
          | 27 | 
          use t::lib::Mocks;  | 
          27 | 
          use t::lib::Mocks;  | 
        
            
               | 
               | 
              28 | 
              use t::lib::Mocks::Logger;  | 
            
        
          | 28 | 
          use t::lib::TestBuilder;  | 
          29 | 
          use t::lib::TestBuilder;  | 
        
        
          | 29 | 
           | 
          30 | 
           | 
        
          
            
              | 30 | 
              use Koha::EDI qw(process_quote);  | 
              31 | 
              use Koha::EDI qw(process_quote process_invoice);  | 
            
        
          | 31 | 
          use Koha::Edifact::Transport;  | 
          32 | 
          use Koha::Edifact::Transport;  | 
        
        
          | 32 | 
           | 
          33 | 
           | 
        
        
          | 33 | 
          my $schema  = Koha::Database->new->schema;  | 
          34 | 
          my $schema  = Koha::Database->new->schema;  | 
        
        
          | 34 | 
          my $builder = t::lib::TestBuilder->new;  | 
          35 | 
          my $builder = t::lib::TestBuilder->new;  | 
        
            
               | 
               | 
              36 | 
              my $logger  = t::lib::Mocks::Logger->new();  | 
            
        
          | 35 | 
           | 
          37 | 
           | 
        
        
          | 36 | 
          subtest 'process_quote' => sub { | 
          38 | 
          subtest 'process_quote' => sub { | 
        
        
          | 37 | 
              plan tests => 7;  | 
          39 | 
              plan tests => 7;  | 
        
  
    | 
      
            Lines 287-291
          subtest '_handle_008_field' => sub {
      
      
        Link Here
      
     | 
  
        
          | 287 | 
           | 
          289 | 
           | 
        
        
          | 288 | 
              is( $record_field->{_data}, undef, 'Field has not been added' ); | 
          290 | 
              is( $record_field->{_data}, undef, 'Field has not been added' ); | 
        
        
          | 289 | 
           | 
          291 | 
           | 
        
            
               | 
               | 
              292 | 
                  $logger->clear();  | 
            
        
          | 290 | 
              $schema->storage->txn_rollback;  | 
          293 | 
              $schema->storage->txn_rollback;  | 
        
          
            
              | 291 | 
                  }  | 
              294 | 
              };  | 
            
            
               | 
               | 
              295 | 
               | 
            
            
              | 296 | 
              subtest 'process_invoice' => sub { | 
            
            
              | 297 | 
                  plan tests => 11;  | 
            
            
              | 298 | 
               | 
            
            
              | 299 | 
                  $schema->storage->txn_begin;  | 
            
            
              | 300 | 
               | 
            
            
              | 301 | 
                  # Add test EDI matching ean of test invoice file and ensure no plugins so we trigger core functions  | 
            
            
              | 302 | 
                  my $account = $builder->build(  | 
            
            
              | 303 | 
                      { | 
            
            
              | 304 | 
                          source => 'VendorEdiAccount',  | 
            
            
              | 305 | 
                          value  => { | 
            
            
              | 306 | 
                              description => 'test vendor',  | 
            
            
              | 307 | 
                              transport   => 'FILE',  | 
            
            
              | 308 | 
                              plugin      => '',  | 
            
            
              | 309 | 
                              san         => '5013546027173'  | 
            
            
              | 310 | 
                          }  | 
            
            
              | 311 | 
                      }  | 
            
            
              | 312 | 
                  );  | 
            
            
              | 313 | 
               | 
            
            
              | 314 | 
                  # Create a test basket and orders matching the invoice message  | 
            
            
              | 315 | 
                  my $basket = $builder->build_object(  | 
            
            
              | 316 | 
                      { | 
            
            
              | 317 | 
                          class => 'Koha::Acquisition::Baskets',  | 
            
            
              | 318 | 
                          value => { | 
            
            
              | 319 | 
                              booksellerid => $account->{vendor_id}, | 
            
            
              | 320 | 
                              basketname   => 'Test Basket',  | 
            
            
              | 321 | 
                          }  | 
            
            
              | 322 | 
                      }  | 
            
            
              | 323 | 
                  );  | 
            
            
              | 324 | 
                  my $order1 = $builder->build_object(  | 
            
            
              | 325 | 
                      { | 
            
            
              | 326 | 
                          class => 'Koha::Acquisition::Orders',  | 
            
            
              | 327 | 
                          value => { | 
            
            
              | 328 | 
                              basketno     => $basket->id,  | 
            
            
              | 329 | 
                              orderstatus  => 'new',  | 
            
            
              | 330 | 
                              biblionumber => undef,  | 
            
            
              | 331 | 
                          }  | 
            
            
              | 332 | 
                      }  | 
            
            
              | 333 | 
                  );  | 
            
            
              | 334 | 
                  my $ordernumber1 = $order1->ordernumber;  | 
            
            
              | 335 | 
               | 
            
            
              | 336 | 
                  my $order2 = $builder->build_object(  | 
            
            
              | 337 | 
                      { | 
            
            
              | 338 | 
                          class => 'Koha::Acquisition::Orders',  | 
            
            
              | 339 | 
                          value => { | 
            
            
              | 340 | 
                              basketno    => $basket->id,  | 
            
            
              | 341 | 
                              orderstatus => 'new',  | 
            
            
              | 342 | 
                          }  | 
            
            
              | 343 | 
                      }  | 
            
            
              | 344 | 
                  );  | 
            
            
              | 345 | 
                  my $ordernumber2 = $order2->ordernumber;  | 
            
            
              | 346 | 
               | 
            
            
              | 347 | 
                  # Add test invoice file to the database for testing  | 
            
            
              | 348 | 
                  my $dirname  = ( $Bin =~ /^(.*\/t\/)/ ? $1 . 'edi_testfiles/' : q{} ); | 
            
            
              | 349 | 
                  my $filename = 'INVOICE.CEI';  | 
            
            
              | 350 | 
                  ok( -e $dirname . $filename, 'File INVOICE.CEI found' );  | 
            
            
              | 351 | 
               | 
            
            
              | 352 | 
                  my $trans = Koha::Edifact::Transport->new( $account->{id} ); | 
            
            
              | 353 | 
                  $trans->working_directory($dirname);  | 
            
            
              | 354 | 
               | 
            
            
              | 355 | 
                  my $mhash = $trans->message_hash();  | 
            
            
              | 356 | 
                  $mhash->{message_type} = 'INVOICE'; | 
            
            
              | 357 | 
                  $trans->ingest( $mhash, $filename );  | 
            
            
              | 358 | 
               | 
            
            
              | 359 | 
                  my $invoice_message = $schema->resultset('EdifactMessage')->find( { filename => $filename } ); | 
            
            
              | 360 | 
                  my $raw_msg         = $invoice_message->raw_msg;  | 
            
            
              | 361 | 
                  $raw_msg =~ s/P12345/$ordernumber1/g;  | 
            
            
              | 362 | 
                  $raw_msg =~ s/P54321/$ordernumber2/g;  | 
            
            
              | 363 | 
                  $invoice_message->update( { raw_msg => $raw_msg } ); | 
            
            
              | 364 | 
               | 
            
            
              | 365 | 
                  # Process the test invoice file  | 
            
            
              | 366 | 
                  warnings_exist { process_invoice($invoice_message) } | 
            
            
              | 367 | 
                  [  | 
            
            
              | 368 | 
                      { carped => qr/Cannot find vendor with ean.*/i }, | 
            
            
              | 369 | 
                  ],  | 
            
            
              | 370 | 
                      'Invoice processed, with warnings, without dieing';  | 
            
            
              | 371 | 
               | 
            
            
              | 372 | 
                  $logger->trace_like( qr/Adding invoice:.*/, "Trace recorded adding invoice" )  | 
            
            
              | 373 | 
                      ->trace_like( qr/Added as invoiceno.*/, "Trace recorded invoice added" )->error_is(  | 
            
            
              | 374 | 
                      'Skipping invoice line, no associated ordernumber',  | 
            
            
              | 375 | 
                      "Received expected log line for missing ordernumber line"  | 
            
            
              | 376 | 
                  )->error_like(  | 
            
            
              | 377 | 
                      qr/Skipping invoice line, no order found for.*/,  | 
            
            
              | 378 | 
                      'Received expected log line for unmatched ordernumber line'  | 
            
            
              | 379 | 
                  )->error_like(  | 
            
            
              | 380 | 
                      qr/Skipping invoice line, no bibliographic.*/,  | 
            
            
              | 381 | 
                      'Received expected log line for unmatched biblionumber line'  | 
            
            
              | 382 | 
                  )->trace_like(  | 
            
            
              | 383 | 
                      qr/Receipting order:.*/,  | 
            
            
              | 384 | 
                      'Trace recorded invoice receipted'  | 
            
            
              | 385 | 
                  )->trace_like(  | 
            
            
              | 386 | 
                      qr/Updating bib:.*/,  | 
            
            
              | 387 | 
                      'Trace recorded bib updated'  | 
            
            
              | 388 | 
                  )->clear();  | 
            
            
              | 389 | 
               | 
            
            
              | 390 | 
                  my $invoice3 = Koha::Acquisition::Invoices->search( { invoicenumber => 'INV00003' }, { rows => 1 } )->single; | 
            
            
              | 391 | 
                  ok( $invoice3, "Invoice added to database" );  | 
            
            
              | 392 | 
                  is( $invoice3->booksellerid, $account->{vendor_id}, 'Invoice has test booksellerid' ); | 
            
            
              | 393 | 
               | 
            
            
              | 394 | 
                  $schema->storage->txn_rollback;  | 
            
            
              | 395 | 
              };  |