use_ok 'SL::DB::Warehouse';
use_ok 'SL::WH';
+use_ok('SL::DB::Inventory');
+
+
Support::TestSetup::login();
-my $part = SL::DB::Manager::Part->get_first;
-is(ref $part, 'SL::DB::Part', 'loading a part to test with id ' . $part->id);
+my $part = SL::DB::Part->new(unit => 'mg', description => 'TestObject');
+$part->save();
+
+is(ref($part), 'SL::DB::Part', 'loading a part to test with id ' . $part->id);
+
my $wh = SL::DB::Manager::Warehouse->get_first;
is(ref $wh, 'SL::DB::Warehouse', 'loading a warehouse to test with id ' . $wh->id);
return $result;
};
-my $r1 = $report->();
+sub test (&@) {
+ my ($arg_sub, @transfers) = @_;
+ my $before = $report->();
+
+ WH->transfer(@transfers);
-WH->transfer({
+ 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' } {
transfer_type => 'transfer',
parts_id => $part->id,
src_warehouse_id => $wh->id,
dst_bin_id => $bin2->id,
qty => 4,
chargenumber => '',
-});
-
-my $r2 = $report->();
+};
-is $r1->{qty}, $r2->{qty} + 4, 'transfer one way';
+#################################################
-WH->transfer({
+test { shift->{qty}, shift->{qty} - 4, 'and back' } {
transfer_type => 'transfer',
parts_id => $part->id,
src_warehouse_id => $wh->id,
dst_bin_id => $bin1->id,
qty => 4,
chargenumber => '',
-});
+};
+#################################################
-my $r3 = $report->();
+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 => '',
+};
-is $r2->{qty}, $r3->{qty} - 4, 'and back';
+##############################################
-done_testing;
+use_ok 'SL::DB::TransferType';
+
+# object interface test
+
+test { shift->{qty}, shift->{qty} + 6.2, 'object transfer one way' } {
+ transfer_type => SL::DB::Manager::TransferType->find_by(description => 'transfer'),
+ parts => $part,
+ src_bin => $bin1,
+ dst_bin => $bin2,
+ qty => 6.2,
+ chargenumber => '',
+};
+
+#############################################
+test { shift->{qty}, shift->{qty} - 6.2, 'full object transfer back' } {
+ 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 => '',
+};
+
+#############################################
+
+test { shift->{qty}, shift->{qty}, 'back and forth in one transaction' } {
+ 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,
+};
+
+#############################################
+
+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,
+};
+SL::DB::Manager::Inventory->delete_objects(where => [parts_id => $part->id]);
+$part->delete();
+
+done_testing;
1;