Test skippen wenn nötige Pakete nicht installiert sind.
[kivitendo-erp.git] / t / wh / transfer.t
index 36ec0fe..9476752 100644 (file)
@@ -35,9 +35,19 @@ my $report = sub {
   return $result;
 };
 
-my $r1 = $report->();
+sub test (&@) {
+  my ($arg_sub, @transfers) = @_;
+  my $before = $report->();
 
-WH->transfer({
+  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' } {
    transfer_type    => 'transfer',
    parts_id         => $part->id,
    src_warehouse_id => $wh->id,
@@ -46,13 +56,11 @@ WH->transfer({
    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,
@@ -61,17 +69,75 @@ WH->transfer({
    dst_bin_id       => $bin1->id,
    qty              => 4,
    chargenumber     => '',
-});
+};
 
+##############################################
 
-my $r3 = $report->();
+use_ok 'SL::DB::TransferType';
 
-is $r2->{qty}, $r3->{qty} - 4, 'and back';
+# object interface test
 
-done_testing;
+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,
+};
 
 
+done_testing;
 
 1;