Bug 10767: add unit tests for C4::Circulation routines that use issuingrules
authorKenza Zaki <kenza.zaki@biblibre.com>
Tue, 20 Aug 2013 08:18:04 +0000 (10:18 +0200)
committerGalen Charlton <gmc@esilibrary.com>
Wed, 28 Aug 2013 14:38:35 +0000 (14:38 +0000)
The test are wrap in a transaction.

To test:
prove t/db_dependent/Circulation_Issuingrule.t
t/db_dependent/Circulation_Issuingrule.t .. ok
All tests successful.
Files=1, Tests=9, 17 wallclock secs ( 0.02 usr  0.00 sys +  0.34 cusr  0.04 csys =  0.40 CPU)
Result: PASS

Signed-off-by: Bernardo Gonzalez Kriegel <bgkriegel@gmail.com>
Comment: No koha-qa errors
prove t/db_dependent/Circulation_Issuingrule.t run without errors

Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
t/db_dependent/Circulation_Issuingrule.t [new file with mode: 0644]

diff --git a/t/db_dependent/Circulation_Issuingrule.t b/t/db_dependent/Circulation_Issuingrule.t
new file mode 100644 (file)
index 0000000..a9f9fb5
--- /dev/null
@@ -0,0 +1,357 @@
+#!/usr/bin/perl
+
+use Modern::Perl;
+use C4::Context;
+use C4::Branch;
+use DateTime;
+use Koha::DateUtils;
+
+use Test::More tests => 9;
+
+BEGIN {
+    use_ok('C4::Circulation');
+}
+can_ok(
+    'C4::Circulation',
+    qw(
+      GetHardDueDate
+      GetIssuingRule
+      GetLoanLength
+      )
+);
+
+#Start transaction
+my $dbh = C4::Context->dbh;
+$dbh->{RaiseError} = 1;
+$dbh->{AutoCommit} = 0;
+
+$dbh->do(q|DELETE FROM issues|);
+$dbh->do(q|DELETE FROM items|);
+$dbh->do(q|DELETE FROM borrowers|);
+$dbh->do(q|DELETE FROM branches|);
+$dbh->do(q|DELETE FROM categories|);
+$dbh->do(q|DELETE FROM issuingrules|);
+
+#Add sample datas
+
+#Add branch and category
+my $samplebranch1 = {
+    add            => 1,
+    branchcode     => 'SAB1',
+    branchname     => 'Sample Branch',
+    branchaddress1 => 'sample adr1',
+    branchaddress2 => 'sample adr2',
+    branchaddress3 => 'sample adr3',
+    branchzip      => 'sample zip',
+    branchcity     => 'sample city',
+    branchstate    => 'sample state',
+    branchcountry  => 'sample country',
+    branchphone    => 'sample phone',
+    branchfax      => 'sample fax',
+    branchemail    => 'sample email',
+    branchurl      => 'sample url',
+    branchip       => 'sample ip',
+    branchprinter  => undef,
+    opac_info      => 'sample opac',
+};
+my $samplebranch2 = {
+    add            => 1,
+    branchcode     => 'SAB2',
+    branchname     => 'Sample Branch2',
+    branchaddress1 => 'sample adr1_2',
+    branchaddress2 => 'sample adr2_2',
+    branchaddress3 => 'sample adr3_2',
+    branchzip      => 'sample zip2',
+    branchcity     => 'sample city2',
+    branchstate    => 'sample state2',
+    branchcountry  => 'sample country2',
+    branchphone    => 'sample phone2',
+    branchfax      => 'sample fax2',
+    branchemail    => 'sample email2',
+    branchurl      => 'sample url2',
+    branchip       => 'sample ip2',
+    branchprinter  => undef,
+    opac_info      => 'sample opac2',
+};
+ModBranch($samplebranch1);
+ModBranch($samplebranch2);
+
+my $samplecat = {
+    categorycode          => 'CAT1',
+    description           => 'Description1',
+    enrolmentperiod       => 'Null',
+    enrolmentperioddate   => 'Null',
+    dateofbirthrequired   => 'Null',
+    finetype              => 'Null',
+    bulk                  => 'Null',
+    enrolmentfee          => 'Null',
+    overduenoticerequired => 'Null',
+    issuelimit            => 'Null',
+    reservefee            => 'Null',
+    hidelostitems         => 0,
+    category_type         => 'Null'
+};
+my $query =
+"INSERT INTO categories (categorycode,description,enrolmentperiod,enrolmentperioddate,dateofbirthrequired ,finetype,bulk,enrolmentfee,overduenoticerequired,issuelimit ,reservefee ,hidelostitems ,category_type) VALUES( ?,?,?,?,?,?,?,?,?,?,?,?,?)";
+$dbh->do(
+    $query, {},
+    $samplecat->{categorycode},          $samplecat->{description},
+    $samplecat->{enrolmentperiod},       $samplecat->{enrolmentperioddate},
+    $samplecat->{dateofbirthrequired},   $samplecat->{finetype},
+    $samplecat->{bulk},                  $samplecat->{enrolmentfee},
+    $samplecat->{overduenoticerequired}, $samplecat->{issuelimit},
+    $samplecat->{reservefee},            $samplecat->{hidelostitems},
+    $samplecat->{category_type}
+);
+
+#Begin Tests
+
+#Test GetIssuingRule
+my $sampleissuingrule1 = {
+    reservecharge      => '0.000000',
+    chargename         => 'Null',
+    restrictedtype     => 0,
+    accountsent        => 0,
+    maxissueqty        => 5,
+    finedays           => 0,
+    lengthunit         => 'Null',
+    renewalperiod      => 5,
+    issuelength        => 5,
+    chargeperiod       => 0,
+    rentaldiscount     => '2.000000',
+    reservesallowed    => 0,
+    hardduedate        => '2013-01-01',
+    branchcode         => $samplebranch1->{branchcode},
+    fine               => '0.000000',
+    hardduedatecompare => 5,
+    overduefinescap    => '0.000000',
+    renewalsallowed    => 0,
+    firstremind        => 0,
+    itemtype           => 'BOOK',
+    categorycode       => $samplecat->{categorycode}
+};
+my $sampleissuingrule2 = {
+    branchcode         => $samplebranch2->{branchcode},
+    categorycode       => $samplecat->{categorycode},
+    itemtype           => 'BOOK',
+    maxissueqty        => 2,
+    renewalsallowed    => 'Null',
+    renewalperiod      => 2,
+    reservesallowed    => 'Null',
+    issuelength        => 2,
+    lengthunit         => 'Null',
+    hardduedate        => 2,
+    hardduedatecompare => 'Null',
+    fine               => 'Null',
+    finedays           => 'Null',
+    firstremind        => 'Null',
+    chargeperiod       => 'Null',
+    rentaldiscount     => 2.00,
+    overduefinescap    => 'Null',
+    accountsent        => 'Null',
+    reservecharge      => 'Null',
+    chargename         => 'Null',
+    restrictedtype     => 'Null'
+};
+my $sampleissuingrule3 = {
+    branchcode         => $samplebranch1->{branchcode},
+    categorycode       => $samplecat->{categorycode},
+    itemtype           => 'DVD',
+    maxissueqty        => 3,
+    renewalsallowed    => 'Null',
+    renewalperiod      => 3,
+    reservesallowed    => 'Null',
+    issuelength        => 3,
+    lengthunit         => 'Null',
+    hardduedate        => 3,
+    hardduedatecompare => 'Null',
+    fine               => 'Null',
+    finedays           => 'Null',
+    firstremind        => 'Null',
+    chargeperiod       => 'Null',
+    rentaldiscount     => 3.00,
+    overduefinescap    => 'Null',
+    accountsent        => 'Null',
+    reservecharge      => 'Null',
+    chargename         => 'Null',
+    restrictedtype     => 'Null'
+};
+$query = 'INSERT INTO issuingrules (
+                branchcode,
+                categorycode,
+                itemtype,
+                maxissueqty,
+                renewalsallowed,
+                renewalperiod,
+                reservesallowed,
+                issuelength,
+                lengthunit,
+                hardduedate,
+                hardduedatecompare,
+                fine,
+                finedays,
+                firstremind,
+                chargeperiod,
+                rentaldiscount,
+                overduefinescap,
+                accountsent,
+                reservecharge,
+                chargename,
+                restrictedtype
+                ) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
+my $sth = $dbh->prepare($query);
+$sth->execute(
+    $sampleissuingrule1->{branchcode},
+    $sampleissuingrule1->{categorycode},
+    $sampleissuingrule1->{itemtype},
+    $sampleissuingrule1->{maxissueqty},
+    $sampleissuingrule1->{renewalsallowed},
+    $sampleissuingrule1->{renewalperiod},
+    $sampleissuingrule1->{reservesallowed},
+    $sampleissuingrule1->{issuelength},
+    $sampleissuingrule1->{lengthunit},
+    $sampleissuingrule1->{hardduedate},
+    $sampleissuingrule1->{hardduedatecompare},
+    $sampleissuingrule1->{fine},
+    $sampleissuingrule1->{finedays},
+    $sampleissuingrule1->{firstremind},
+    $sampleissuingrule1->{chargeperiod},
+    $sampleissuingrule1->{rentaldiscount},
+    $sampleissuingrule1->{overduefinescap},
+    $sampleissuingrule1->{accountsent},
+    $sampleissuingrule1->{reservecharge},
+    $sampleissuingrule1->{chargename},
+    $sampleissuingrule1->{restrictedtype}
+);
+$sth->execute(
+    $sampleissuingrule2->{branchcode},
+    $sampleissuingrule2->{categorycode},
+    $sampleissuingrule2->{itemtype},
+    $sampleissuingrule2->{maxissueqty},
+    $sampleissuingrule2->{renewalsallowed},
+    $sampleissuingrule2->{renewalperiod},
+    $sampleissuingrule2->{reservesallowed},
+    $sampleissuingrule2->{issuelength},
+    $sampleissuingrule2->{lengthunit},
+    $sampleissuingrule2->{hardduedate},
+    $sampleissuingrule2->{hardduedatecompare},
+    $sampleissuingrule2->{fine},
+    $sampleissuingrule2->{finedays},
+    $sampleissuingrule2->{firstremind},
+    $sampleissuingrule2->{chargeperiod},
+    $sampleissuingrule2->{rentaldiscount},
+    $sampleissuingrule2->{overduefinescap},
+    $sampleissuingrule2->{accountsent},
+    $sampleissuingrule2->{reservecharge},
+    $sampleissuingrule2->{chargename},
+    $sampleissuingrule2->{restrictedtype}
+);
+$sth->execute(
+    $sampleissuingrule3->{branchcode},
+    $sampleissuingrule3->{categorycode},
+    $sampleissuingrule3->{itemtype},
+    $sampleissuingrule3->{maxissueqty},
+    $sampleissuingrule3->{renewalsallowed},
+    $sampleissuingrule3->{renewalperiod},
+    $sampleissuingrule3->{reservesallowed},
+    $sampleissuingrule3->{issuelength},
+    $sampleissuingrule3->{lengthunit},
+    $sampleissuingrule3->{hardduedate},
+    $sampleissuingrule3->{hardduedatecompare},
+    $sampleissuingrule3->{fine},
+    $sampleissuingrule3->{finedays},
+    $sampleissuingrule3->{firstremind},
+    $sampleissuingrule3->{chargeperiod},
+    $sampleissuingrule3->{rentaldiscount},
+    $sampleissuingrule3->{overduefinescap},
+    $sampleissuingrule3->{accountsent},
+    $sampleissuingrule3->{reservecharge},
+    $sampleissuingrule3->{chargename},
+    $sampleissuingrule3->{restrictedtype}
+);
+
+is_deeply(
+    GetIssuingRule(
+        $samplecat->{categorycode},
+        'Book', $samplebranch1->{branchcode}
+    ),
+    $sampleissuingrule1,
+    "GetIssuingCharge returns issuingrule1's informations"
+);
+
+#FIX ME: Currently, GetIssuingRule without parameters returns an issuingrule with branchcode -> *,categorycode -> *, itemtype -> *
+#is_deeply ( GetIssuingRule(),{$sampleissuingrule1,$sampleissuingrule2,$sampleissuingrule3},"Without parameters, GetIssuingRule returns all the issuingrule");
+
+#FIX ME: Currently, GetIssuingRule with only one parameter returns an issuingrule with branchcode -> *,categorycode -> *, itemtype -> *
+#is_deeply(GetIssuingRule($samplecat->{categorycode}),{$sampleissuingrule1,$sampleissuingrule2,$sampleissuingrule3},"GetIssuingRule with a categorycode returns all the issuingrules of this category");
+
+#FIX ME: Currently, GetIssuingRule with only two parameters returns an issuingrule with branchcode -> *,categorycode -> *, itemtype -> *
+#is_deeply(GetIssuingRule($samplecat->{categorycode},'BOOK'),{$sampleissuingrule1,$sampleissuingrule2},"GetIssuingRule with a categorycode and'Book' returns all the issuingrules of this category and the itemtype = book");
+
+#Test GetLoanLength
+is_deeply(
+    C4::Circulation::GetLoanLength(
+        $samplecat->{categorycode},
+        'BOOK', $samplebranch1->{branchcode}
+    ),
+    { issuelength => 5, lengthunit => 'Null', renewalperiod => 5 },
+    "GetLoanLength"
+);
+is_deeply(
+    C4::Circulation::GetLoanLength(),
+    {
+        issuelength   => 21,
+        renewalperiod => 21,
+        lengthunit    => 'days',
+    },
+    "Without parameters, GetLoanLength returns hardcoded values"
+);
+is_deeply(
+    C4::Circulation::GetLoanLength( -1, -1 ),
+    {
+        issuelength   => 21,
+        renewalperiod => 21,
+        lengthunit    => 'days',
+    },
+    "With wrong parameters, GetLoanLength returns hardcoded values"
+);
+is_deeply(
+    C4::Circulation::GetLoanLength( $samplecat->{categorycode} ),
+    {
+        issuelength   => 21,
+        renewalperiod => 21,
+        lengthunit    => 'days',
+    },
+    "With only one parameter, GetLoanLength returns hardcoded values"
+);    #NOTE : is that really what is expected?
+is_deeply(
+    C4::Circulation::GetLoanLength( $samplecat->{categorycode}, 'BOOK' ),
+    {
+        issuelength   => 21,
+        renewalperiod => 21,
+        lengthunit    => 'days',
+    },
+    "With only one parameter, GetLoanLength returns hardcoded values"
+);    #NOTE : is that really what is expected?
+
+#Test GetHardDueDate
+my @hardduedate = C4::Circulation::GetHardDueDate( $samplecat->{categorycode},
+    'BOOK', $samplebranch1->{branchcode} );
+is_deeply(
+    \@hardduedate,
+    [
+        dt_from_string( $sampleissuingrule1->{hardduedate}, 'iso' ),
+        $sampleissuingrule1->{hardduedatecompare}
+    ],
+    "GetHardDueDate returns the duedate and the duedatecompare"
+);
+
+#FIXME: Currently, with wrong parameters GetHardDueDate returns '' because GetIssuingrule returns wrong value
+#@hardduedate = C4::Circulation::GetHardDueDate(-1,-1,-1);
+#is_deeply(\@hardduedate,[undef,undef],"GetHardDueDate with wrong parameters returns undef");
+#FIXME: Currently, without parameter GetHardDueDate returns '' because GetIssuingrule returns wrong value
+#@hardduedate = C4::Circulation::GetHardDueDate();
+#is_deeply(\@hardduedate,[undef,undef],"GetHardDueDate without parameter returns undef");
+
+#End transaction
+$dbh->rollback;