Bug 7688: (follow-up) add unit tests for C4::Serials::Frequency
[koha.git] / t / db_dependent / Acquisition.t
index 4a5b31e..2b36068 100755 (executable)
 # This Koha test module is a stub!
 # Add more tests here!!!
 
-use strict;
-use warnings;
-use Data::Dumper;
+use Modern::Perl;
 use POSIX qw(strftime);
 
 use C4::Bookseller qw( GetBookSellerFromId );
 
-use Test::More tests => 38;
+use Test::More tests => 59;
 
 BEGIN {
     use_ok('C4::Acquisition');
+    use_ok('C4::Bookseller');
+    use_ok('C4::Biblio');
+    use_ok('C4::Budgets');
+    use_ok('C4::Bookseller');
 }
 
-my $booksellerid = 1;
-my $booksellerinfo = GetBookSellerFromId( $booksellerid );
-# diag( Data::Dumper->Dump( [ $booksellerinfo ], [ 'booksellerinfo' ] ) );
-SKIP: {
-    skip 'No booksellers in database, cannot test baskets', 2 unless $booksellerinfo;
-    my ($basket, $basketno);
-    ok($basketno = NewBasket(1,1),                     "NewBasket(  1 , 1  ) returns $basketno");
-    ok($basket   = GetBasket($basketno),       "GetBasket($basketno) returns $basket");
-}
+my $dbh = C4::Context->dbh;
+$dbh->{AutoCommit} = 0;
+$dbh->{RaiseError} = 1;
+
+my $booksellerid = C4::Bookseller::AddBookseller(
+    {
+        name => "my vendor",
+        address1 => "bookseller's address",
+        phone => "0123456",
+        active => 1,
+        deliverytime => 5,
+    }
+);
+
+my $booksellerinfo = C4::Bookseller::GetBookSellerFromId( $booksellerid );
 
+is($booksellerinfo->{deliverytime}, 5, 'set deliverytime when creating vendor (Bug 10556)');
+
+my ($basket, $basketno);
+ok($basketno = NewBasket($booksellerid, 1), "NewBasket(  $booksellerid , 1  ) returns $basketno");
+ok($basket   = GetBasket($basketno), "GetBasket($basketno) returns $basket");
+
+my $budgetid = C4::Budgets::AddBudget(
+    {
+        budget_code => "budget_code_test_getordersbybib",
+        budget_name => "budget_name_test_getordersbybib",
+    }
+);
+my $budget = C4::Budgets::GetBudget( $budgetid );
+
+my ($ordernumber1, $ordernumber2, $ordernumber3);
+my ($biblionumber1, $biblioitemnumber1) = AddBiblio(MARC::Record->new, '');
+my ($biblionumber2, $biblioitemnumber2) = AddBiblio(MARC::Record->new, '');
+( undef, $ordernumber1 ) = C4::Acquisition::NewOrder(
+    {
+        basketno => $basketno,
+        quantity => 24,
+        biblionumber => $biblionumber1,
+        budget_id => $budget->{budget_id},
+    }
+);
+
+( undef, $ordernumber2 ) = C4::Acquisition::NewOrder(
+    {
+        basketno => $basketno,
+        quantity => 42,
+        biblionumber => $biblionumber2,
+        budget_id => $budget->{budget_id},
+    }
+);
+
+( undef, $ordernumber3 ) = C4::Acquisition::NewOrder(
+    {
+        basketno => $basketno,
+        quantity => 4,
+        biblionumber => $biblionumber2,
+        budget_id => $budget->{budget_id},
+        ecost => 42,
+        rrp => 42,
+    }
+);
 
-my $supplierid = 1;
-my $grouped    = 0;
-my $orders = GetPendingOrders( $supplierid, $grouped );
+my $orders = SearchOrders({
+    booksellerid => $booksellerid,
+    pending => 1
+});
 isa_ok( $orders, 'ARRAY' );
+is(scalar(@$orders), 3, 'retrieved 3 pending orders');
 
+C4::Acquisition::CloseBasket( $basketno );
 my @lateorders = GetLateOrders(0);
-SKIP: {
-   skip 'No Late Orders, cannot test AddClaim', 1 unless @lateorders;
-   my $order = $lateorders[0];
-   AddClaim( $order->{ordernumber} );
-   my $neworder = GetOrder( $order->{ordernumber} );
-   is( $neworder->{claimed_date}, strftime( "%Y-%m-%d", localtime(time) ), "AddClaim : Check claimed_date" );
+my $order = $lateorders[0];
+AddClaim( $order->{ordernumber} );
+my $neworder = GetOrder( $order->{ordernumber} );
+is( $neworder->{claimed_date}, strftime( "%Y-%m-%d", localtime(time) ), "AddClaim : Check claimed_date" );
+
+my @expectedfields = qw( basketno
+                         biblionumber
+                         invoiceid
+                         budgetdate
+                         cancelledby
+                         closedate
+                         creationdate
+                         currency
+                         datecancellationprinted
+                         datereceived
+                         ecost
+                         entrydate
+                         firstname
+                         freight
+                         gstrate
+                         listprice
+                         notes
+                         ordernumber
+                         purchaseordernumber
+                         quantity
+                         quantityreceived
+                         rrp
+                         sort1
+                         sort2
+                         subscriptionid
+                         supplierreference
+                         surname
+                         timestamp
+                         title
+                         totalamount
+                         unitprice );
+my $firstorder = $orders->[0];
+for my $field ( @expectedfields ) {
+    ok( exists( $firstorder->{ $field } ), "This order has a $field field" );
 }
 
-SKIP: {
-    skip 'No relevant orders in database, cannot test baskets', 33 unless( scalar @$orders );
-    # diag( Data::Dumper->Dump( [ $orders ], [ 'orders' ] ) );
-    my @expectedfields = qw( basketno
-                             biblioitemnumber
-                             biblionumber
-                             invoiceid
-                             budgetdate
-                             cancelledby
-                             closedate
-                             creationdate
-                             currency
-                             datecancellationprinted
-                             datereceived
-                             ecost
-                             entrydate
-                             firstname
-                             freight
-                             gstrate
-                             listprice
-                             notes
-                             ordernumber
-                             purchaseordernumber
-                             quantity
-                             quantityreceived
-                             rrp
-                             serialid
-                             sort1
-                             sort2
-                             subscription
-                             supplierreference
-                             surname
-                             timestamp
-                             title
-                             totalamount
-                             unitprice );
-    my $firstorder = $orders->[0];
-    for my $field ( @expectedfields ) {
-        ok( exists( $firstorder->{ $field } ), "This order has a $field field" );
+# fake receiving the order
+ModOrder({
+    ordernumber      => $firstorder->{ordernumber},
+    biblionumber     => $firstorder->{biblionumber},
+    quantityreceived => $firstorder->{quantity},
+});
+my $pendingorders = SearchOrders({
+    booksellerid => $booksellerid,
+    pending => 1
+});
+is(scalar(@$pendingorders), 2, 'retrieved 2 pending orders after receiving on one (bug 10723)');
+my $allorders = SearchOrders({
+    booksellerid => $booksellerid,
+});
+is(scalar(@$allorders), 3, 'retrieved all 3 orders even after after receiving on one (bug 10723)');
+
+my $invoiceid = AddInvoice(invoicenumber => 'invoice', booksellerid => 1, unknown => "unknown");
+
+my ($datereceived, $new_ordernumber) = ModReceiveOrder(
+    $biblionumber2,
+    $ordernumber2,
+    2,
+    undef,
+    12,
+    12,
+    $invoiceid,
+    42,
+    );
+my $order2 = GetOrder( $ordernumber2 );
+is($order2->{'quantityreceived'}, 0, 'Splitting up order did not receive any on original order');
+is($order2->{'quantity'}, 40, '40 items on original order');
+is($order2->{'budget_id'}, $budgetid, 'Budget on original order is unchanged');
+
+$neworder = GetOrder( $new_ordernumber );
+is($neworder->{'quantity'}, 2, '2 items on new order');
+is($neworder->{'quantityreceived'}, 2, 'Splitting up order received items on new order');
+is($neworder->{'budget_id'}, $budgetid, 'Budget on new order is unchanged');
+
+my $budgetid2 = C4::Budgets::AddBudget(
+    {
+        budget_code => "budget_code_test_modrecv",
+        budget_name => "budget_name_test_modrecv",
     }
-}
+);
+
+($datereceived, $new_ordernumber) = ModReceiveOrder(
+    $biblionumber2,
+    $ordernumber3,
+    2,
+    undef,
+    12,
+    12,
+    $invoiceid,
+    42,
+    $budgetid2
+    );
+
+my $order3 = GetOrder( $ordernumber3 );
+is($order3->{'quantityreceived'}, 0, 'Splitting up order did not receive any on original order');
+is($order3->{'quantity'}, 2, '2 items on original order');
+is($order3->{'budget_id'}, $budgetid, 'Budget on original order is unchanged');
+
+$neworder = GetOrder( $new_ordernumber );
+is($neworder->{'quantity'}, 2, '2 items on new order');
+is($neworder->{'quantityreceived'}, 2, 'Splitting up order received items on new order');
+is($neworder->{'budget_id'}, $budgetid2, 'Budget on new order is changed');
+
+($datereceived, $new_ordernumber) = ModReceiveOrder(
+    $biblionumber2,
+    $ordernumber3,
+    2,
+    undef,
+    12,
+    12,
+    $invoiceid,
+    42,
+    $budgetid2
+    );
+
+$order3 = GetOrder( $ordernumber3 );
+is($order3->{'quantityreceived'}, 2, 'Order not split up');
+is($order3->{'quantity'}, 2, '2 items on order');
+is($order3->{'budget_id'}, $budgetid2, 'Budget has changed');
+
+$dbh->rollback;