From 386515313eab00fe0a4c1e49edbf338b0ce8a09a Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 12 Dec 2024 11:27:30 +0000 Subject: [PATCH] Bug 38423: Add unit tests Sponsored-by: PTFS Europe --- Koha/EDI.pm | 2 +- t/db_dependent/Koha/EDI.t | 110 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 108 insertions(+), 4 deletions(-) diff --git a/Koha/EDI.pm b/Koha/EDI.pm index 9327b8a7692..499acedad0a 100644 --- a/Koha/EDI.pm +++ b/Koha/EDI.pm @@ -290,7 +290,7 @@ sub process_invoice { )->single; } if ( !$vendor_acct ) { - carp "Cannot find vendor with ean $vendor_ean for invoice $invoicenumber in $invoice_message->filename"; + carp "Cannot find vendor with ean $vendor_ean for invoice $invoicenumber in ".$invoice_message->filename; next; } $invoice_message->edi_acct( $vendor_acct->id ); diff --git a/t/db_dependent/Koha/EDI.t b/t/db_dependent/Koha/EDI.t index e298719456b..8ec69b5ed50 100755 --- a/t/db_dependent/Koha/EDI.t +++ b/t/db_dependent/Koha/EDI.t @@ -20,18 +20,20 @@ use Modern::Perl; use FindBin qw( $Bin ); -use Test::More tests => 2; +use Test::More tests => 3; use Test::Warn; use Test::MockModule; use t::lib::Mocks; +use t::lib::Mocks::Logger; use t::lib::TestBuilder; -use Koha::EDI qw(process_quote); +use Koha::EDI qw(process_quote process_invoice); use Koha::Edifact::Transport; my $schema = Koha::Database->new->schema; my $builder = t::lib::TestBuilder->new; +my $logger = t::lib::Mocks::Logger->new(); subtest 'process_quote' => sub { plan tests => 7; @@ -287,5 +289,107 @@ subtest '_handle_008_field' => sub { is( $record_field->{_data}, undef, 'Field has not been added' ); + $logger->clear(); $schema->storage->txn_rollback; - } +}; + +subtest 'process_invoice' => sub { + plan tests => 11; + + $schema->storage->txn_begin; + + # Add test EDI matching ean of test invoice file and ensure no plugins so we trigger core functions + my $account = $builder->build( + { + source => 'VendorEdiAccount', + value => { + description => 'test vendor', + transport => 'FILE', + plugin => '', + san => '5013546027173' + } + } + ); + + # Create a test basket and orders matching the invoice message + my $basket = $builder->build_object( + { + class => 'Koha::Acquisition::Baskets', + value => { + booksellerid => $account->{vendor_id}, + basketname => 'Test Basket', + } + } + ); + my $order1 = $builder->build_object( + { + class => 'Koha::Acquisition::Orders', + value => { + basketno => $basket->id, + orderstatus => 'new', + biblionumber => undef, + } + } + ); + my $ordernumber1 = $order1->ordernumber; + + my $order2 = $builder->build_object( + { + class => 'Koha::Acquisition::Orders', + value => { + basketno => $basket->id, + orderstatus => 'new', + } + } + ); + my $ordernumber2 = $order2->ordernumber; + + # Add test invoice file to the database for testing + my $dirname = ( $Bin =~ /^(.*\/t\/)/ ? $1 . 'edi_testfiles/' : q{} ); + my $filename = 'INVOICE_S.CEI'; + ok( -e $dirname . $filename, 'File INVOICE.CEI found' ); + + my $trans = Koha::Edifact::Transport->new( $account->{id} ); + $trans->working_directory($dirname); + + my $mhash = $trans->message_hash(); + $mhash->{message_type} = 'INVOICE'; + $trans->ingest( $mhash, $filename ); + + my $invoice_message = $schema->resultset('EdifactMessage')->find( { filename => $filename } ); + my $raw_msg = $invoice_message->raw_msg; + $raw_msg =~ s/P12345/$ordernumber1/g; + $raw_msg =~ s/P54321/$ordernumber2/g; + $invoice_message->update( { raw_msg => $raw_msg } ); + + # Process the test invoice file + warnings_exist { process_invoice($invoice_message) } + [ + { carped => qr/Cannot find vendor with ean.*/i }, + ], + 'Invoice processed, with warnings, without dieing'; + + $logger->trace_like( qr/Adding invoice:.*/, "Trace recorded adding invoice" ) + ->trace_like( qr/Added as invoiceno.*/, "Trace recorded invoice added" )->error_is( + 'Skipping invoice line, no associated ordernumber', + "Received expected log line for missing ordernumber line" + )->error_like( + qr/Skipping invoice line, no order found for.*/, + 'Received expected log line for unmatched ordernumber line' + )->error_like( + qr/Skipping invoice line, no bibliographic.*/, + 'Received expected log line for unmatched biblionumber line' + )->trace_like( + qr/Receipting order:.*/, + 'Trace recorded invoice receipted' + )->trace_like( + qr/Updating bib:.*/, + 'Trace recorded bib updated' + )->clear(); + + my $invoice3 = Koha::Acquisition::Invoices->search( { invoicenumber => 'INV00003' }, { rows => 1 } )->single; + ok( $invoice3, "Invoice added to database" ); + is( $invoice3->booksellerid, $account->{vendor_id}, 'Invoice has test booksellerid' ); + + $schema->storage->txn_rollback; +}; -- 2.47.1