kivitendo/t/wh/transfer.t @ 19bfd0f2
83bfd1e6 | Sven Schöling | use strict;
|
||
use Test::More;
|
||||
use lib 't';
|
||||
63410aa6 | Sven Schöling | use SL::Dev::Part qw(new_part);
|
||
b5eae4e1 | Geoffrey Richardson | |||
83bfd1e6 | Sven Schöling | use_ok 'Support::TestSetup';
|
||
e3b5a9ce | Moritz Bunkus | use_ok 'SL::DB::Bin';
|
||
83bfd1e6 | Sven Schöling | use_ok 'SL::DB::Part';
|
||
use_ok 'SL::DB::Warehouse';
|
||||
use_ok 'SL::WH';
|
||||
d04df165 | Thomas Heck | use_ok('SL::DB::Inventory');
|
||
e3b5a9ce | Moritz Bunkus | use constant NAME => 'UnitTestObject';
|
||
d04df165 | Thomas Heck | |||
83bfd1e6 | Sven Schöling | Support::TestSetup::login();
|
||
e3b5a9ce | Moritz Bunkus | # Clean up: remove test objects for part, warehouse, bin
|
||
my $part = SL::DB::Manager::Part->get_first(partnumber => NAME(), description => NAME());
|
||||
if ($part) {
|
||||
SL::DB::Manager::Inventory->delete_all(where => [ parts_id => $part->id ]);
|
||||
$part->delete;
|
||||
}
|
||||
SL::DB::Manager::Bin ->delete_all(where => [ or => [ description => NAME() . "1", description => NAME() . "2" ] ]);
|
||||
SL::DB::Manager::Warehouse->delete_all(where => [ description => NAME() ]);
|
||||
# Create test data
|
||||
63410aa6 | Sven Schöling | $part = new_part(unit => 'mg', description => NAME(), partnumber => NAME())->save();
|
||
d04df165 | Thomas Heck | |||
is(ref($part), 'SL::DB::Part', 'loading a part to test with id ' . $part->id);
|
||||
e3b5a9ce | Moritz Bunkus | my $wh = SL::DB::Warehouse->new(description => NAME(), invalid => 0);
|
||
$wh->save;
|
||||
83bfd1e6 | Sven Schöling | is(ref $wh, 'SL::DB::Warehouse', 'loading a warehouse to test with id ' . $wh->id);
|
||
e3b5a9ce | Moritz Bunkus | my $bin1 = SL::DB::Bin->new(description => NAME() . "1", warehouse_id => $wh->id);
|
||
$bin1->save;
|
||||
83bfd1e6 | Sven Schöling | is(ref $bin1, 'SL::DB::Bin', 'getting first bin to test with id ' . $bin1->id);
|
||
e3b5a9ce | Moritz Bunkus | my $bin2 = SL::DB::Bin->new(description => NAME() . "2", warehouse_id => $wh->id);
|
||
$bin2->save;
|
||||
83bfd1e6 | Sven Schöling | is(ref $bin2, 'SL::DB::Bin', 'getting another bin to test with id ' . $bin2->id);
|
||
my $report = sub {
|
||||
$::form->{l_warehouseid} = 'Y';
|
||||
$::form->{l_binid} = 'Y';
|
||||
my ($result) = WH->get_warehouse_report(
|
||||
warehouse_id => $wh->id,
|
||||
bin_id => $bin1->id,
|
||||
partsid => $part->id,
|
||||
chargenumber => '',
|
||||
);
|
||||
$result->{qty} ||= 0;
|
||||
return $result;
|
||||
};
|
||||
ed5ef25b | Sven Schöling | sub test (&@) {
|
||
my ($arg_sub, @transfers) = @_;
|
||||
my $before = $report->();
|
||||
83bfd1e6 | Sven Schöling | |||
ed5ef25b | Sven Schöling | WH->transfer(@transfers);
|
||
my $after = $report->();
|
||||
my @args = $arg_sub->($before, $after);
|
||||
is $args[0], $args[1], $args[2];
|
||||
}
|
||||
test { shift->{qty}, shift->{qty} + 4, 'transfer one way' } {
|
||||
83bfd1e6 | Sven Schöling | transfer_type => 'transfer',
|
||
parts_id => $part->id,
|
||||
src_warehouse_id => $wh->id,
|
||||
dst_warehouse_id => $wh->id,
|
||||
src_bin_id => $bin1->id,
|
||||
dst_bin_id => $bin2->id,
|
||||
qty => 4,
|
||||
chargenumber => '',
|
||||
ed5ef25b | Sven Schöling | };
|
||
83bfd1e6 | Sven Schöling | |||
c7cabbb2 | Sven Schöling | #################################################
|
||
ed5ef25b | Sven Schöling | test { shift->{qty}, shift->{qty} - 4, 'and back' } {
|
||
83bfd1e6 | Sven Schöling | transfer_type => 'transfer',
|
||
parts_id => $part->id,
|
||||
src_warehouse_id => $wh->id,
|
||||
dst_warehouse_id => $wh->id,
|
||||
src_bin_id => $bin2->id,
|
||||
dst_bin_id => $bin1->id,
|
||||
qty => 4,
|
||||
chargenumber => '',
|
||||
ed5ef25b | Sven Schöling | };
|
||
83bfd1e6 | Sven Schöling | |||
d04df165 | Thomas Heck | #################################################
|
||
test {shift->{qty}, shift->{qty} + 4000000000, 'transfer one way with unit'} {
|
||||
transfer_type => 'transfer',
|
||||
parts_id => $part->id,
|
||||
src_warehouse_id => $wh->id,
|
||||
dst_warehouse_id => $wh->id,
|
||||
src_bin_id => $bin1->id,
|
||||
dst_bin_id => $bin2->id,
|
||||
qty => 4,
|
||||
unit => 't',
|
||||
chargenumber => '',
|
||||
};
|
||||
c7cabbb2 | Sven Schöling | ##############################################
|
||
use_ok 'SL::DB::TransferType';
|
||||
# object interface test
|
||||
ed5ef25b | Sven Schöling | test { shift->{qty}, shift->{qty} + 6.2, 'object transfer one way' } {
|
||
c7cabbb2 | Sven Schöling | transfer_type => SL::DB::Manager::TransferType->find_by(description => 'transfer'),
|
||
parts => $part,
|
||||
src_bin => $bin1,
|
||||
dst_bin => $bin2,
|
||||
qty => 6.2,
|
||||
chargenumber => '',
|
||||
ed5ef25b | Sven Schöling | };
|
||
c7cabbb2 | Sven Schöling | |||
#############################################
|
||||
ed5ef25b | Sven Schöling | test { shift->{qty}, shift->{qty} - 6.2, 'full object transfer back' } {
|
||
c7cabbb2 | Sven Schöling | transfer_type => SL::DB::Manager::TransferType->find_by(description => 'transfer'),
|
||
parts => $part,
|
||||
src_bin => $bin2,
|
||||
src_warehouse => $wh,
|
||||
dst_bin => $bin1,
|
||||
dst_warehouse => $wh,
|
||||
qty => 6.2,
|
||||
chargenumber => '',
|
||||
ed5ef25b | Sven Schöling | };
|
||
c7cabbb2 | Sven Schöling | |||
4fcb6449 | Sven Schöling | #############################################
|
||
ed5ef25b | Sven Schöling | test { shift->{qty}, shift->{qty}, 'back and forth in one transaction' } {
|
||
4fcb6449 | Sven Schöling | transfer_type => SL::DB::Manager::TransferType->find_by(description => 'transfer'),
|
||
parts => $part,
|
||||
src_bin => $bin2,
|
||||
src_warehouse => $wh,
|
||||
dst_bin => $bin1,
|
||||
dst_warehouse => $wh,
|
||||
qty => 1,
|
||||
},
|
||||
{
|
||||
transfer_type => SL::DB::Manager::TransferType->find_by(description => 'transfer'),
|
||||
parts => $part,
|
||||
src_bin => $bin1,
|
||||
src_warehouse => $wh,
|
||||
dst_bin => $bin2,
|
||||
dst_warehouse => $wh,
|
||||
qty => 1,
|
||||
ed5ef25b | Sven Schöling | };
|
||
4fcb6449 | Sven Schöling | |||
e502a439 | Sven Schöling | #############################################
|
||
test { shift->{qty}, shift->{qty}, 'warehouse reduced interface' } {
|
||||
transfer_type => SL::DB::Manager::TransferType->find_by(description => 'transfer'),
|
||||
parts => $part,
|
||||
src_bin => $bin2,
|
||||
dst_bin => $bin1,
|
||||
qty => 1,
|
||||
},
|
||||
{
|
||||
transfer_type => SL::DB::Manager::TransferType->find_by(description => 'transfer'),
|
||||
parts => $part,
|
||||
src_bin => $bin1,
|
||||
dst_bin => $bin2,
|
||||
qty => 1,
|
||||
};
|
||||
4fcb6449 | Sven Schöling | |||
d04df165 | Thomas Heck | SL::DB::Manager::Inventory->delete_objects(where => [parts_id => $part->id]);
|
||
e3b5a9ce | Moritz Bunkus | $bin1->delete;
|
||
$bin2->delete;
|
||||
$wh->delete;
|
||||
$part->delete;
|
||||
d04df165 | Thomas Heck | |||
83bfd1e6 | Sven Schöling | done_testing;
|
||
1;
|