Bug 17600: Standardize our EXPORT_OK
[srvgit] / t / db_dependent / Circulation / GetHardDueDate.t
old mode 100644 (file)
new mode 100755 (executable)
index 77fd42f..f68b98c
@@ -3,14 +3,17 @@
 use Modern::Perl;
 use C4::Context;
 use DateTime;
+use Koha::Database;
 use Koha::DateUtils;
-use Koha::IssuingRules;
+use Koha::CirculationRules;
 use Koha::Library;
 
-use Test::More tests => 10;
+use t::lib::TestBuilder;
+
+use Test::More tests => 9;
 
 BEGIN {
-    use_ok('C4::Circulation');
+    use_ok('C4::Circulation', qw( GetHardDueDate GetLoanLength ));
 }
 can_ok(
     'C4::Circulation',
@@ -20,10 +23,9 @@ can_ok(
       )
 );
 
-#Start transaction
+my $schema = Koha::Database->new->schema;
+$schema->storage->txn_begin;
 my $dbh = C4::Context->dbh;
-$dbh->{RaiseError} = 1;
-$dbh->{AutoCommit} = 0;
 
 $dbh->do(q|DELETE FROM issues|);
 $dbh->do(q|DELETE FROM items|);
@@ -31,7 +33,7 @@ $dbh->do(q|DELETE FROM borrowers|);
 $dbh->do(q|DELETE FROM edifact_ean|);
 $dbh->do(q|DELETE FROM branches|);
 $dbh->do(q|DELETE FROM categories|);
-$dbh->do(q|DELETE FROM issuingrules|);
+$dbh->do(q|DELETE FROM circulation_rules|);
 
 #Add sample datas
 
@@ -51,7 +53,6 @@ my $samplebranch1 = {
     branchemail    => 'sample email',
     branchurl      => 'sample url',
     branchip       => 'sample ip',
-    branchprinter  => undef,
     opac_info      => 'sample opac',
 };
 my $samplebranch2 = {
@@ -69,7 +70,6 @@ my $samplebranch2 = {
     branchemail    => 'sample email2',
     branchurl      => 'sample url2',
     branchip       => 'sample ip2',
-    branchprinter  => undef,
     opac_info      => 'sample opac2',
 };
 Koha::Library->new($samplebranch1)->store;
@@ -78,17 +78,17 @@ Koha::Library->new($samplebranch2)->store;
 my $samplecat = {
     categorycode          => 'CAT1',
     description           => 'Description1',
-    enrolmentperiod       => 'Null',
-    enrolmentperioddate   => 'Null',
-    dateofbirthrequired   => 'Null',
-    finetype              => 'Null',
-    bulk                  => 'Null',
-    enrolmentfee          => 'Null',
-    overduenoticerequired => 'Null',
-    issuelimit            => 'Null',
-    reservefee            => 'Null',
+    enrolmentperiod       => undef,
+    enrolmentperioddate   => undef,
+    dateofbirthrequired   => undef,
+    finetype              => undef,
+    bulk                  => undef,
+    enrolmentfee          => undef,
+    overduenoticerequired => undef,
+    issuelimit            => undef,
+    reservefee            => undef,
     hidelostitems         => 0,
-    category_type         => 'Null'
+    category_type         => 'A',
 };
 my $query =
 "INSERT INTO categories (categorycode,description,enrolmentperiod,enrolmentperioddate,dateofbirthrequired ,finetype,bulk,enrolmentfee,overduenoticerequired,issuelimit ,reservefee ,hidelostitems ,category_type) VALUES( ?,?,?,?,?,?,?,?,?,?,?,?,?)";
@@ -103,6 +103,10 @@ $dbh->do(
     $samplecat->{category_type}
 );
 
+my $builder = t::lib::TestBuilder->new;
+my $sampleitemtype1 = $builder->build({ source => 'Itemtype' })->{itemtype};
+my $sampleitemtype2 = $builder->build({ source => 'Itemtype' })->{itemtype};
+
 #Begin Tests
 
 my $default = {
@@ -111,249 +115,108 @@ my $default = {
     lengthunit => 'days'
 };
 
-#Test GetIssuingRule
+#Test get_effective_rules
 my $sampleissuingrule1 = {
-    reservecharge      => '0.000000',
-    chargename         => 'Null',
-    restrictedtype     => 0,
-    accountsent        => 0,
-    maxissueqty        => 5,
-    maxonsiteissueqty  => 4,
-    finedays           => 0,
-    lengthunit         => 'days',
-    renewalperiod      => 5,
-    norenewalbefore    => 6,
-    auto_renew         => 0,
-    issuelength        => 5,
-    chargeperiod       => 0,
-    chargeperiod_charge_at => 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},
-    maxsuspensiondays  => 0,
-    onshelfholds       => 0,
-    opacitemholds      => 'N',
-    cap_fine_to_replacement_price => 0,
-    holds_per_record   => 1,
-    article_requests   => 'yes',
-    no_auto_renewal_after => undef,
+    branchcode   => $samplebranch1->{branchcode},
+    categorycode => $samplecat->{categorycode},
+    itemtype     => $sampleitemtype1,
+    rules        => {
+        finedays                         => 0,
+        lengthunit                       => 'days',
+        renewalperiod                    => 5,
+        norenewalbefore                  => 6,
+        auto_renew                       => 0,
+        issuelength                      => 5,
+        chargeperiod                     => 0,
+        chargeperiod_charge_at           => 0,
+        rentaldiscount                   => 2,
+        reservesallowed                  => 0,
+        hardduedate                      => '2013-01-01',
+        fine                             => 0,
+        hardduedatecompare               => 5,
+        overduefinescap                  => 0,
+        renewalsallowed                  => 0,
+        firstremind                      => 0,
+        maxsuspensiondays                => 0,
+        onshelfholds                     => 0,
+        opacitemholds                    => 'N',
+        cap_fine_to_replacement_price    => 0,
+        holds_per_record                 => 1,
+        article_requests                 => 'yes',
+        no_auto_renewal_after            => undef,
+        no_auto_renewal_after_hard_limit => undef,
+        suspension_chargeperiod          => 1,
+        holds_per_day                    => undef,
+    }
 };
 my $sampleissuingrule2 = {
-    branchcode         => $samplebranch2->{branchcode},
-    categorycode       => $samplecat->{categorycode},
-    itemtype           => 'BOOK',
-    maxissueqty        => 2,
-    maxonsiteissueqty  => 1,
-    renewalsallowed    => 'Null',
-    renewalperiod      => 2,
-    norenewalbefore    => 7,
-    auto_renew         => 0,
-    reservesallowed    => 'Null',
-    issuelength        => 2,
-    lengthunit         => 'days',
-    hardduedate        => 2,
-    hardduedatecompare => 'Null',
-    fine               => 'Null',
-    finedays           => 'Null',
-    firstremind        => 'Null',
-    chargeperiod       => 'Null',
-    chargeperiod_charge_at => 0,
-    rentaldiscount     => 2.00,
-    overduefinescap    => 'Null',
-    accountsent        => 'Null',
-    reservecharge      => 'Null',
-    chargename         => 'Null',
-    restrictedtype     => 'Null',
-    maxsuspensiondays  => 0,
-    onshelfholds       => 1,
-    opacitemholds      => 'Y',
-    cap_fine_to_replacement_price => 0,
-    holds_per_record   => 1,
-    article_requests   => 'yes',
+    branchcode   => $samplebranch2->{branchcode},
+    categorycode => $samplecat->{categorycode},
+    itemtype     => $sampleitemtype1,
+    rules        => {
+        renewalsallowed               => 0,
+        renewalperiod                 => 2,
+        norenewalbefore               => 7,
+        auto_renew                    => 0,
+        reservesallowed               => 0,
+        issuelength                   => 2,
+        lengthunit                    => 'days',
+        hardduedate                   => 2,
+        hardduedatecompare            => undef,
+        fine                          => undef,
+        finedays                      => undef,
+        firstremind                   => undef,
+        chargeperiod                  => undef,
+        chargeperiod_charge_at        => 0,
+        rentaldiscount                => 2.00,
+        overduefinescap               => undef,
+        maxsuspensiondays             => 0,
+        onshelfholds                  => 1,
+        opacitemholds                 => 'Y',
+        cap_fine_to_replacement_price => 0,
+        holds_per_record              => 1,
+        article_requests              => 'yes',
+    }
 };
 my $sampleissuingrule3 = {
-    branchcode         => $samplebranch1->{branchcode},
-    categorycode       => $samplecat->{categorycode},
-    itemtype           => 'DVD',
-    maxissueqty        => 3,
-    maxonsiteissueqty  => 2,
-    renewalsallowed    => 'Null',
-    renewalperiod      => 3,
-    norenewalbefore    => 8,
-    auto_renew         => 0,
-    reservesallowed    => 'Null',
-    issuelength        => 3,
-    lengthunit         => 'days',
-    hardduedate        => 3,
-    hardduedatecompare => 'Null',
-    fine               => 'Null',
-    finedays           => 'Null',
-    firstremind        => 'Null',
-    chargeperiod       => 'Null',
-    chargeperiod_charge_at => 0,
-    rentaldiscount     => 3.00,
-    overduefinescap    => 'Null',
-    accountsent        => 'Null',
-    reservecharge      => 'Null',
-    chargename         => 'Null',
-    restrictedtype     => 'Null',
-    maxsuspensiondays  => 0,
-    onshelfholds       => 1,
-    opacitemholds      => 'F',
-    cap_fine_to_replacement_price => 0,
-    holds_per_record   => 1,
-    article_requests   => 'yes',
+    branchcode   => $samplebranch1->{branchcode},
+    categorycode => $samplecat->{categorycode},
+    itemtype     => $sampleitemtype2,
+    rules        => {
+        renewalsallowed               => 0,
+        renewalperiod                 => 3,
+        norenewalbefore               => 8,
+        auto_renew                    => 0,
+        reservesallowed               => 0,
+        issuelength                   => 3,
+        lengthunit                    => 'days',
+        hardduedate                   => 3,
+        hardduedatecompare            => undef,
+        fine                          => undef,
+        finedays                      => undef,
+        firstremind                   => undef,
+        chargeperiod                  => undef,
+        chargeperiod_charge_at        => 0,
+        rentaldiscount                => 3.00,
+        overduefinescap               => undef,
+        maxsuspensiondays             => 0,
+        onshelfholds                  => 1,
+        opacitemholds                 => 'F',
+        cap_fine_to_replacement_price => 0,
+        holds_per_record              => 1,
+        article_requests              => 'yes',
+    }
 };
 
-$query = 'INSERT INTO issuingrules (
-                branchcode,
-                categorycode,
-                itemtype,
-                maxissueqty,
-                maxonsiteissueqty,
-                renewalsallowed,
-                renewalperiod,
-                norenewalbefore,
-                auto_renew,
-                reservesallowed,
-                issuelength,
-                lengthunit,
-                hardduedate,
-                hardduedatecompare,
-                fine,
-                finedays,
-                firstremind,
-                chargeperiod,
-                chargeperiod_charge_at,
-                rentaldiscount,
-                overduefinescap,
-                accountsent,
-                reservecharge,
-                chargename,
-                restrictedtype,
-                maxsuspensiondays,
-                onshelfholds,
-                opacitemholds,
-                cap_fine_to_replacement_price,
-                article_requests
-                ) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
-my $sth = $dbh->prepare($query);
-$sth->execute(
-    $sampleissuingrule1->{branchcode},
-    $sampleissuingrule1->{categorycode},
-    $sampleissuingrule1->{itemtype},
-    $sampleissuingrule1->{maxissueqty},
-    $sampleissuingrule1->{maxonsiteissueqty},
-    $sampleissuingrule1->{renewalsallowed},
-    $sampleissuingrule1->{renewalperiod},
-    $sampleissuingrule1->{norenewalbefore},
-    $sampleissuingrule1->{auto_renew},
-    $sampleissuingrule1->{reservesallowed},
-    $sampleissuingrule1->{issuelength},
-    $sampleissuingrule1->{lengthunit},
-    $sampleissuingrule1->{hardduedate},
-    $sampleissuingrule1->{hardduedatecompare},
-    $sampleissuingrule1->{fine},
-    $sampleissuingrule1->{finedays},
-    $sampleissuingrule1->{firstremind},
-    $sampleissuingrule1->{chargeperiod},
-    $sampleissuingrule1->{chargeperiod_charge_at},
-    $sampleissuingrule1->{rentaldiscount},
-    $sampleissuingrule1->{overduefinescap},
-    $sampleissuingrule1->{accountsent},
-    $sampleissuingrule1->{reservecharge},
-    $sampleissuingrule1->{chargename},
-    $sampleissuingrule1->{restrictedtype},
-    $sampleissuingrule1->{maxsuspensiondays},
-    $sampleissuingrule1->{onshelfholds},
-    $sampleissuingrule1->{opacitemholds},
-    $sampleissuingrule1->{cap_fine_to_replacement_price},
-    $sampleissuingrule1->{article_requests},
-);
-$sth->execute(
-    $sampleissuingrule2->{branchcode},
-    $sampleissuingrule2->{categorycode},
-    $sampleissuingrule2->{itemtype},
-    $sampleissuingrule2->{maxissueqty},
-    $sampleissuingrule2->{maxonsiteissueqty},
-    $sampleissuingrule2->{renewalsallowed},
-    $sampleissuingrule2->{renewalperiod},
-    $sampleissuingrule2->{norenewalbefore},
-    $sampleissuingrule2->{auto_renew},
-    $sampleissuingrule2->{reservesallowed},
-    $sampleissuingrule2->{issuelength},
-    $sampleissuingrule2->{lengthunit},
-    $sampleissuingrule2->{hardduedate},
-    $sampleissuingrule2->{hardduedatecompare},
-    $sampleissuingrule2->{fine},
-    $sampleissuingrule2->{finedays},
-    $sampleissuingrule2->{firstremind},
-    $sampleissuingrule2->{chargeperiod},
-    $sampleissuingrule2->{chargeperiod_charge_at},
-    $sampleissuingrule2->{rentaldiscount},
-    $sampleissuingrule2->{overduefinescap},
-    $sampleissuingrule2->{accountsent},
-    $sampleissuingrule2->{reservecharge},
-    $sampleissuingrule2->{chargename},
-    $sampleissuingrule2->{restrictedtype},
-    $sampleissuingrule2->{maxsuspensiondays},
-    $sampleissuingrule2->{onshelfholds},
-    $sampleissuingrule2->{opacitemholds},
-    $sampleissuingrule2->{cap_fine_to_replacement_price},
-    $sampleissuingrule2->{article_requests},
-);
-$sth->execute(
-    $sampleissuingrule3->{branchcode},
-    $sampleissuingrule3->{categorycode},
-    $sampleissuingrule3->{itemtype},
-    $sampleissuingrule3->{maxissueqty},
-    $sampleissuingrule3->{maxonsiteissueqty},
-    $sampleissuingrule3->{renewalsallowed},
-    $sampleissuingrule3->{renewalperiod},
-    $sampleissuingrule3->{norenewalbefore},
-    $sampleissuingrule3->{auto_renew},
-    $sampleissuingrule3->{reservesallowed},
-    $sampleissuingrule3->{issuelength},
-    $sampleissuingrule3->{lengthunit},
-    $sampleissuingrule3->{hardduedate},
-    $sampleissuingrule3->{hardduedatecompare},
-    $sampleissuingrule3->{fine},
-    $sampleissuingrule3->{finedays},
-    $sampleissuingrule3->{firstremind},
-    $sampleissuingrule3->{chargeperiod},
-    $sampleissuingrule3->{chargeperiod_charge_at},
-    $sampleissuingrule3->{rentaldiscount},
-    $sampleissuingrule3->{overduefinescap},
-    $sampleissuingrule3->{accountsent},
-    $sampleissuingrule3->{reservecharge},
-    $sampleissuingrule3->{chargename},
-    $sampleissuingrule3->{restrictedtype},
-    $sampleissuingrule3->{maxsuspensiondays},
-    $sampleissuingrule3->{onshelfholds},
-    $sampleissuingrule3->{opacitemholds},
-    $sampleissuingrule3->{cap_fine_to_replacement_price},
-    $sampleissuingrule3->{article_requests},
-);
-
-is_deeply(
-    Koha::IssuingRules->find({ categorycode => $samplecat->{categorycode}, itemtype => 'Book', branchcode => $samplebranch1->{branchcode} })->unblessed,
-    $sampleissuingrule1,
-    "GetIssuingCharge returns issuingrule1's informations"
-);
+Koha::CirculationRules->set_rules( $sampleissuingrule1 );
+Koha::CirculationRules->set_rules( $sampleissuingrule2 );
+Koha::CirculationRules->set_rules( $sampleissuingrule3 );
 
 #Test GetLoanLength
 is_deeply(
     C4::Circulation::GetLoanLength(
         $samplecat->{categorycode},
-        'BOOK', $samplebranch1->{branchcode}
+        $sampleitemtype1, $samplebranch1->{branchcode}
     ),
     { issuelength => 5, lengthunit => 'days', renewalperiod => 5 },
     "GetLoanLength"
@@ -375,12 +238,12 @@ is_deeply(
     "With only one parameter, GetLoanLength returns hardcoded values"
 );    #NOTE : is that really what is expected?
 is_deeply(
-    C4::Circulation::GetLoanLength( $samplecat->{categorycode}, 'BOOK' ),
+    C4::Circulation::GetLoanLength( $samplecat->{categorycode}, $sampleitemtype1 ),
     $default,
     "With only two parameters, GetLoanLength returns hardcoded values"
 );    #NOTE : is that really what is expected?
 is_deeply(
-    C4::Circulation::GetLoanLength( $samplecat->{categorycode}, 'BOOK', $samplebranch1->{branchcode} ),
+    C4::Circulation::GetLoanLength( $samplecat->{categorycode}, $sampleitemtype1, $samplebranch1->{branchcode} ),
     {
         issuelength   => 5,
         renewalperiod => 5,
@@ -391,15 +254,12 @@ is_deeply(
 
 #Test GetHardDueDate
 my @hardduedate = C4::Circulation::GetHardDueDate( $samplecat->{categorycode},
-    'BOOK', $samplebranch1->{branchcode} );
+    $sampleitemtype1, $samplebranch1->{branchcode} );
 is_deeply(
     \@hardduedate,
     [
-        dt_from_string( $sampleissuingrule1->{hardduedate}, 'iso' ),
-        $sampleissuingrule1->{hardduedatecompare}
+        dt_from_string( $sampleissuingrule1->{rules}->{hardduedate}, 'iso' ),
+        $sampleissuingrule1->{rules}->{hardduedatecompare}
     ],
     "GetHardDueDate returns the duedate and the duedatecompare"
 );
-
-#End transaction
-$dbh->rollback;