Bug 12168: Add unit tests for GetBudgetHierarchySpent & GetBudgetHierarchyOrdered
authorJonathan Druart <jonathan.druart@biblibre.com>
Thu, 1 May 2014 12:23:51 +0000 (14:23 +0200)
committerGalen Charlton <gmc@esilibrary.com>
Mon, 19 May 2014 21:55:21 +0000 (21:55 +0000)
Test plan:
prove t/db_dependent/Budgets.t

Note: This addition may sound overkill but I found this bug developing
bug 12164 and I will reuse all of that.

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
t/db_dependent/Budgets.t

index efb07ce..56627ab 100755 (executable)
@@ -1,11 +1,12 @@
-use strict;
-use warnings;
-use Test::More tests => 22;
+use Modern::Perl;
+use Test::More tests => 25;
 
 BEGIN {use_ok('C4::Budgets') }
 use C4::Context;
+use C4::Biblio;
+use C4::Bookseller;
+use C4::Acquisition;
 use C4::Dates;
-use C4::Context;
 
 use YAML;
 my $dbh = C4::Context->dbh;
@@ -135,4 +136,187 @@ ok($budgets->[0]->{budget_name} lt $budgets->[1]->{budget_name}, 'default sort o
 ok($del_status=DelBudget($budget_id),
     "DelBudget returned $del_status");
 
-$dbh->rollback;
+# GetBudgetHierarchySpent and GetBudgetHierarchyOrdered
+my $budget_period_total = 10_000;
+my $budget_1_total = 1_000;
+my $budget_11_total = 100;
+my $budget_111_total = 50;
+my $budget_12_total = 100;
+my $budget_2_total = 2_000;
+
+my $budget_period_id = AddBudgetPeriod(
+    {
+        budget_period_startdate => '2013-01-01',
+        budget_period_enddate   => '2014-12-31',
+        budget_description      => 'Budget Period',
+        budget_period_active    => 1,
+        budget_period_total     => $budget_period_total,
+    }
+);
+my $budget_id1 = AddBudget(
+    {
+        budget_code      => 'budget_1',
+        budget_name      => 'budget_1',
+        budget_active    => 1,
+        budget_period_id => $budget_period_id,
+        budget_parent_id => undef,
+        budget_amount    => $budget_1_total,
+    }
+);
+my $budget_id2 = AddBudget(
+    {
+        budget_code      => 'budget_2',
+        budget_name      => 'budget_2',
+        budget_active    => 1,
+        budget_period_id => $budget_period_id,
+        budget_parent_id => undef,
+        budget_amount    => $budget_2_total,
+    }
+);
+my $budget_id11 = AddBudget(
+    {
+        budget_code      => 'budget_11',
+        budget_name      => 'budget_11',
+        budget_active    => 1,
+        budget_period_id => $budget_period_id,
+        budget_parent_id => $budget_id1,
+        budget_amount    => $budget_11_total,
+    }
+);
+my $budget_id12 = AddBudget(
+    {
+        budget_code      => 'budget_12',
+        budget_name      => 'budget_12',
+        budget_active    => 1,
+        budget_period_id => $budget_period_id,
+        budget_parent_id => $budget_id1,
+        budget_amount    => $budget_12_total,
+    }
+);
+my $budget_id111 = AddBudget(
+    {
+        budget_code      => 'budget_111',
+        budget_name      => 'budget_111',
+        budget_active    => 1,
+        budget_period_id => $budget_period_id,
+        budget_parent_id => $budget_id11,
+        owner_id         => 1,
+        budget_amount    => $budget_111_total,
+    }
+);
+my $budget_id21 = AddBudget(
+    {
+        budget_code      => 'budget_21',
+        budget_name      => 'budget_21',
+        budget_active    => 1,
+        budget_period_id => $budget_period_id,
+        budget_parent_id => $budget_id2,
+    }
+);
+
+my $booksellerid = C4::Bookseller::AddBookseller(
+    {
+        name         => "my vendor",
+        address1     => "bookseller's address",
+        phone        => "0123456",
+        active       => 1,
+        deliverytime => 5,
+    }
+);
+
+my $basketno = C4::Acquisition::NewBasket( $booksellerid, 1 );
+my ( $biblionumber, $biblioitemnumber ) =
+  C4::Biblio::AddBiblio( MARC::Record->new, '' );
+
+my @order_infos = (
+    {
+        budget_id => $budget_id1,
+        pending_quantity  => 1,
+        spent_quantity  => 0,
+    },
+    {
+        budget_id => $budget_id2,
+        pending_quantity  => 2,
+        spent_quantity  => 1,
+    },
+    {
+        budget_id => $budget_id11,
+        pending_quantity  => 3,
+        spent_quantity  => 4,
+    },
+    {
+        budget_id => $budget_id12,
+        pending_quantity  => 4,
+        spent_quantity  => 3,
+    },
+    {
+        budget_id => $budget_id111,
+        pending_quantity  => 2,
+        spent_quantity  => 1,
+    },
+
+    # No order for budget_21
+
+);
+
+my %budgets;
+my $invoiceid = AddInvoice(invoicenumber => 'invoice_test_clone', booksellerid => $booksellerid, unknown => "unknown");
+my $item_price = 10;
+my $item_quantity = 2;
+for my $infos (@order_infos) {
+    for ( 1 .. $infos->{pending_quantity} ) {
+        my ( undef, $ordernumber ) = C4::Acquisition::NewOrder(
+            {
+                basketno           => $basketno,
+                biblionumber       => $biblionumber,
+                budget_id          => $infos->{budget_id},
+                order_internalnote => "internal note",
+                order_vendornote   => "vendor note",
+                quantity           => 2,
+                cost               => $item_price,
+                rrp                => $item_price,
+                listprice          => $item_price,
+                ecost              => $item_price,
+                rrp                => $item_price,
+                discount           => 0,
+                uncertainprice     => 0,
+                gstrate            => 0,
+            }
+        );
+        push @{ $budgets{$infos->{budget_id}} }, $ordernumber;
+    }
+    for ( 1 .. $infos->{spent_quantity} ) {
+        my ( undef, $ordernumber ) = C4::Acquisition::NewOrder(
+            {
+                basketno           => $basketno,
+                biblionumber       => $biblionumber,
+                budget_id          => $infos->{budget_id},
+                order_internalnote => "internal note",
+                order_vendornote   => "vendor note",
+                quantity           => $item_quantity,
+                cost               => $item_price,
+                rrp                => $item_price,
+                listprice          => $item_price,
+                ecost              => $item_price,
+                rrp                => $item_price,
+                discount           => 0,
+                uncertainprice     => 0,
+                gstrate            => 0,
+            }
+        );
+        ModReceiveOrder({
+              biblionumber     => $biblionumber,
+              ordernumber      => $ordernumber,
+              budget_id        => $infos->{budget_id},
+              quantityreceived => $item_quantity,
+              cost             => $item_price,
+              ecost            => $item_price,
+              invoiceid        => $invoiceid,
+              rrp              => $item_price,
+              received_items   => [],
+        } );
+    }
+}
+is( GetBudgetHierarchySpent( $budget_id1 ), 160, "total spent for budget1 is 160" );
+is( GetBudgetHierarchySpent( $budget_id11 ), 100, "total spent for budget1 is 100" );
+is( GetBudgetHierarchySpent( $budget_id111 ), 20, "total spent for budget1 is 20" );