Bug 7317: Handle backend absense more gracefuly
[koha.git] / t / db_dependent / Accounts.t
index 41256fb..51c094a 100644 (file)
 
 use Modern::Perl;
 
-use Test::More tests => 22;
+use Test::More tests => 23;
 use Test::MockModule;
 use Test::Warn;
 
 use t::lib::TestBuilder;
+use t::lib::Mocks;
 
 use Koha::Account;
 use Koha::Account::Lines;
@@ -487,3 +488,143 @@ subtest 'balance' => sub {
     $patron->delete;
 };
 
+subtest "Koha::Account::chargelostitem tests" => sub {
+    plan tests => 32;
+
+    my $lostfine;
+    my $procfee;
+
+    my $itype_no_replace_no_fee = $builder->build({ source => 'Itemtype', value => {
+            rentalcharge => 0,
+            defaultreplacecost => undef,
+            processfee => undef,
+    }});
+    my $itype_replace_no_fee = $builder->build({ source => 'Itemtype', value => {
+            rentalcharge => 0,
+            defaultreplacecost => 16.32,
+            processfee => undef,
+    }});
+    my $itype_no_replace_fee = $builder->build({ source => 'Itemtype', value => {
+            rentalcharge => 0,
+            defaultreplacecost => undef,
+            processfee => 8.16,
+    }});
+    my $itype_replace_fee = $builder->build({ source => 'Itemtype', value => {
+            rentalcharge => 0,
+            defaultreplacecost => 4.08,
+            processfee => 2.04,
+    }});
+    my $cli_borrowernumber = $builder->build({ source => 'Borrower' })->{'borrowernumber'};
+    my $cli_itemnumber1 = $builder->build({ source => 'Item', value => { itype => $itype_no_replace_no_fee->{itemtype} } })->{'itemnumber'};
+    my $cli_itemnumber2 = $builder->build({ source => 'Item', value => { itype => $itype_replace_no_fee->{itemtype} } })->{'itemnumber'};
+    my $cli_itemnumber3 = $builder->build({ source => 'Item', value => { itype => $itype_no_replace_fee->{itemtype} } })->{'itemnumber'};
+    my $cli_itemnumber4 = $builder->build({ source => 'Item', value => { itype => $itype_replace_fee->{itemtype} } })->{'itemnumber'};
+    my $duck = Koha::Items->find({itemnumber=>$cli_itemnumber1});
+
+    t::lib::Mocks::mock_preference('item-level_itypes', '1');
+    t::lib::Mocks::mock_preference('useDefaultReplacementCost', '0');
+
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber1, 0, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'PF' });
+    ok( !$lostfine, "No lost fine if no replacementcost or default when pref off");
+    ok( !$procfee,  "No processing fee if no processing fee");
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber1, 6.12, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'PF' });
+    ok( $lostfine->amount == 6.12, "Lost fine equals replacementcost when pref off and no default set");
+    ok( !$procfee,  "No processing fee if no processing fee");
+    $lostfine->delete();
+
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber2, 0, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'PF' });
+    ok( !$lostfine, "No lost fine if no replacementcost but default set when pref off");
+    ok( !$procfee,  "No processing fee if no processing fee");
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber2, 6.12, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'PF' });
+    ok( $lostfine->amount == 6.12 , "Lost fine equals replacementcost when pref off and default set");
+    ok( !$procfee,  "No processing fee if no processing fee");
+    $lostfine->delete();
+
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber3, 0, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'PF' });
+    ok( !$lostfine, "No lost fine if no replacementcost and no default set when pref off");
+    ok( $procfee->amount == 8.16,  "Processing fee if processing fee");
+    $procfee->delete();
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber3, 6.12, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'PF' });
+    ok( $lostfine->amount == 6.12 , "Lost fine equals replacementcost when pref off and no default set");
+    ok( $procfee->amount == 8.16,  "Processing fee if processing fee");
+    $lostfine->delete();
+    $procfee->delete();
+
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber4, 0, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'PF' });
+    ok( !$lostfine, "No lost fine if no replacementcost but default set when pref off");
+    ok( $procfee->amount == 2.04,  "Processing fee if processing fee");
+    $procfee->delete();
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber4, 6.12, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'PF' });
+    ok( $lostfine->amount == 6.12 , "Lost fine equals replacementcost when pref off and default set");
+    ok( $procfee->amount == 2.04,  "Processing fee if processing fee");
+    $lostfine->delete();
+    $procfee->delete();
+
+    t::lib::Mocks::mock_preference('useDefaultReplacementCost', '1');
+
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber1, 0, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'PF' });
+    ok( !$lostfine, "No lost fine if no replacementcost or default when pref on");
+    ok( !$procfee,  "No processing fee if no processing fee");
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber1, 6.12, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'PF' });
+    is( $lostfine->amount, "6.120000", "Lost fine equals replacementcost when pref on and no default set");
+    ok( !$procfee,  "No processing fee if no processing fee");
+
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber2, 0, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'PF' });
+    is( $lostfine->amount(), "16.320000", "Lost fine is default if no replacementcost but default set when pref on");
+    ok( !$procfee,  "No processing fee if no processing fee");
+    $lostfine->delete();
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber2, 6.12, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'PF' });
+    is( $lostfine->amount, "6.120000" , "Lost fine equals replacementcost when pref on and default set");
+    ok( !$procfee,  "No processing fee if no processing fee");
+
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber3, 0, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'PF' });
+    ok( !$lostfine, "No lost fine if no replacementcost and default not set when pref on");
+    is( $procfee->amount, "8.160000",  "Processing fee if processing fee");
+    $procfee->delete();
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber3, 6.12, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'PF' });
+    is( $lostfine->amount, "6.120000", "Lost fine equals replacementcost when pref on and no default set");
+    is( $procfee->amount, "8.160000",  "Processing fee if processing fee");
+
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber4, 0, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'PF' });
+    is( $lostfine->amount, "4.080000", "Lost fine is default if no replacementcost but default set when pref on");
+    is( $procfee->amount, "2.040000",  "Processing fee if processing fee");
+    $lostfine->delete();
+    $procfee->delete();
+    C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber4, 6.12, "Perdedor");
+    $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'L' });
+    $procfee  = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'PF' });
+    is( $lostfine->amount, "6.120000", "Lost fine equals replacementcost when pref on and default set");
+    is( $procfee->amount, "2.040000",  "Processing fee if processing fee");
+};
+
+1;