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>
(cherry picked from commit de79e957ce)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
parent
425bc1240b
commit
4bd1aca6a7
|
|
@ -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;
|
||||
};
|
||||
|
|
@ -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'
|
||||
Loading…
Reference in New Issue