Bug 35398: Unit test

This patch adds the begginings of unit tests for Koha::EDI.  Right now
we only test that a simple QUOTE message creates a basket, adds the item
to said basket and assigns that single item to a corresponding stock
rotation rota as defined by the LRP segment in the QUOTE message.

It lays the foundations for much more rigorous tests to be written to
cover the whole of EDI.pm however.

Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Martin Renvoize 2024-02-28 16:40:39 +00:00 committed by Katrin Fischer
parent 6744b9979a
commit de79e957ce
Signed by: kfischer
GPG key ID: 0EF6E2C03357A834
2 changed files with 124 additions and 0 deletions

123
t/db_dependent/Koha/EDI.t Executable file
View file

@ -0,0 +1,123 @@
#!/usr/bin/perl
# Copyright 2024 Martin Renvoize <martin.renvoize@ptfs-europe.com>
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use FindBin qw( $Bin );
use Test::More tests => 1;
use Test::Warn;
use t::lib::Mocks;
use t::lib::TestBuilder;
use Koha::EDI qw(process_quote);
use Koha::Edifact::Transport;
my $schema = Koha::Database->new->schema;
my $builder = t::lib::TestBuilder->new;
subtest 'process_quote' => sub {
plan tests => 7;
$schema->storage->txn_begin;
# Add our test quote file to the database for testing against
my $account = $builder->build(
{
source => 'VendorEdiAccount',
value => {
description => 'test vendor', transport => 'FILE',
}
}
);
my $dirname = ( $Bin =~ /^(.*\/t\/)/ ? $1 . 'edi_testfiles/' : q{} );
my $filename = 'QUOTES_SMALL.CEQ';
ok( -e $dirname . $filename, 'File QUOTES_SMALL.CEQ found' );
my $trans = Koha::Edifact::Transport->new( $account->{id} );
$trans->working_directory($dirname);
my $mhash = $trans->message_hash();
$mhash->{message_type} = 'QUOTE';
$trans->ingest( $mhash, $filename );
my $quote = $schema->resultset('EdifactMessage')->find( { filename => $filename } );
# Test quote expects REF to be a valid and active fund code
my $active_period = $builder->build(
{
source => 'Aqbudgetperiod',
value => { budget_period_active => 1 }
}
);
my $fund = $builder->build(
{
source => 'Aqbudget',
value => {
budget_code => 'REF',
budget_period_id => $active_period->{budget_period_id}
}
}
);
# The quote expects a ROT1 stock rotation roata to exist
my $rota = $builder->build_object(
{
class => 'Koha::StockRotationRotas',
value => { title => 'ROT1' }
}
);
$builder->build({
source => 'Stockrotationstage',
value => { rota_id => $rota->rota_id },
});
# Process the test quote file
process_quote($quote);
# Test for expected warnings for the passed quote file
#
# Test for quote status change
$quote->get_from_storage;
is( $quote->status, 'received', 'Quote status was set to received' );
# Tests for generated basket for passed quote file
my $baskets = Koha::Acquisition::Baskets->search( { booksellerid => $account->{vendor_id} } );
is( $baskets->count, 1, "1 basket created for a single quote file" );
my $basket = $baskets->next;
my $orders = $basket->orders;
is( $orders->count, 1, "1 order line attached to basket when only 1 order is in the edi message" );
my $order = $orders->next;
my $biblio = $order->biblio;
my $items = $order->items;
is( $items->count, 1, "1 item added when AcqCreateItem eq ordering and 1 item is in the EDI quote" );
my $item = $items->next;
# Test that item is added to rota appropriately
my $on_rota = Koha::StockRotationItems->search({ itemnumber_id => $item->itemnumber });
is($on_rota->count, 1, "Item added to stockrotation rota");
my $rota_item = $on_rota->next;
is($rota_item->stage->rota->id, $rota->id, "Item is on correct rota");
$schema->storage->txn_rollback;
};

View file

@ -0,0 +1 @@
UNA:+.? 'UNB+UNOC:3+5013546027173+5013546098818+240123:0945+1044416+ASKEDI:+QUOTES++++'UNH+1044416001+QUOTES:D:96A:UN:EAN002'BGM+31C::28+WO0800131+9'DTM+137:20240123:102'RFF+ON:orders 23/1'CUX+2:GBP:12'NAD+BY+5013546098818::9'NAD+SU+5013546027173::9'LIN+1++9781529923766:EN'PIA+5+152992376X:IB'IMD+L+010+:::Thompson'IMD+L+011+:::Louise'IMD+L+050+:::Lucky'IMD+L+060+:::learning to live again'IMD+L+120+:::Ebury Spotlight'IMD+L+170+:::2024'IMD+L+180+:::304'IMD+L+220+:::Hbk'IMD+L+230+:::791.45'IMD+L+250+:::AN'QTY+1:1'GIR+001+BOOK:LST+ANF:LSQ+CPL:LLO+REF:LFN+791.45:LCL'GIR+001+22.00:LCV'GIR+001+ROT1:LRP'PRI+AAE:22.00'RFF+QLI:WO0800131000001'UNS+S'CNT+2:1'UNT+27+1044416001'UNZ+1+1044416'