Bug 38423: Add unit tests

Sponsored-by: PTFS Europe <https://ptfs-europe.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Martin Renvoize 2024-12-12 11:27:30 +00:00 committed by Katrin Fischer
parent af19a0f553
commit 210e0cb18b
No known key found for this signature in database
GPG Key ID: 0EF6E2C03357A834
3 changed files with 110 additions and 4 deletions

View File

@ -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 );

View File

@ -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.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;
};

View File

@ -0,0 +1,2 @@
UNA:+.? 'UNB+UNOC:3+5013546027173+5013546098818+230101:0000+0000000002'UNH+00003+INVOIC:D:96A:UN'BGM+380+INV00003+9'DTM+137:20231210:102'NAD+BY+12345::9'NAD+SU+5013546027173::9'LIN+1++987654321:EN'QTY+47:5'PRI+AAA:9.99'MOA+203:49.95'LIN+2++987654321:EN'QTY+47:5'PRI+AAA:9.99'MOA+203:49.95'RFF+LI:P28837'LIN+3++999999999:EN'QTY+47:10'PRI+AAA:15.00'MOA+203:150.00'RFF+LI:P12345'LIN+4++123456789:EN'QTY+47:1'PRI+AAA:30.00'MOA+203:600.00'RFF+LI:P54321'LIN+5++987654123:EN'QTY+47:1'PRI+AAA:5.00'MOA+203:5.00'RFF+LI:P54321'UNS+S'CNT+4:4'UNT+15+00003'UNZ+1+0000000002'
UNA:+.? 'UNB+UNOC:3+9999999999999+5013546098818+230101:0000+0000000001'UNH+00002+INVOIC:D:96A:UN'BGM+380+INV00002+9'DTM+137:20231210:102'NAD+BY+54321::9'NAD+SU+9999999999999::9'UNS+S'CNT+1:1'UNT+11+00002'