5 use Test
::More tests
=> 3;
10 use Koha
::DateUtils
qw( dt_from_string );
12 use t
::lib
::TestBuilder
;
15 my $schema = Koha
::Database
->schema;
16 $schema->storage->txn_begin;
18 our $dbh = C4
::Context
->dbh;
19 $dbh->do(q
|DELETE FROM issues
|);
21 t
::lib
::Mocks
::mock_preference
('item-level_itypes', '1');
23 my $builder = t
::lib
::TestBuilder
->new();
25 my $branch = $builder->build(
31 my $category = $builder->build(
37 my $patron = $builder->build(
41 categorycode
=> $category->{categorycode
},
42 branchcode
=> $branch->{branchcode
},
47 my $biblio = $builder->build(
51 branchcode
=> $branch->{branchcode
},
56 my $itemtype = $builder->build(
60 defaultreplacecost
=> 6,
65 my $item = $builder->build(
69 biblionumber
=> $biblio->{biblionumber
},
70 homebranch
=> $branch->{branchcode
},
71 holdingbranch
=> $branch->{branchcode
},
72 replacementprice
=> '5.00',
73 itype
=> $itemtype->{itemtype
},
78 subtest
'Test basic functionality' => sub {
81 my $rule = $builder->schema->resultset('Issuingrule')->find({
86 $rule->delete if $rule;
87 my $issuingrule = $builder->build(
89 source
=> 'Issuingrule',
99 overduefinescap
=> undef,
100 cap_fine_to_replacement_price
=> 0,
105 my $start_dt = DateTime
->new(
111 my $end_dt = DateTime
->new(
117 my ($amount) = CalcFine
( $item, $patron->{categorycode
}, $branch->{branchcode
}, $start_dt, $end_dt );
119 is
( $amount, 29, 'Amount is calculated correctly' );
124 subtest
'Test cap_fine_to_replacement_price' => sub {
127 t
::lib
::Mocks
::mock_preference
('useDefaultReplacementCost', '1');
128 my $issuingrule = $builder->build(
130 source
=> 'Issuingrule',
136 lengthunit
=> 'days',
140 overduefinescap
=> undef,
141 cap_fine_to_replacement_price
=> 1,
146 my $start_dt = DateTime
->new(
152 my $end_dt = DateTime
->new(
158 my ($amount) = CalcFine
( $item, $patron->{categorycode
}, $branch->{branchcode
}, $start_dt, $end_dt );
160 is
( int($amount), 5, 'Amount is calculated correctly' );
163 # Use default replacement cost (useDefaultReplacementCost) is item's replacement price is 0
164 my $item_obj = Koha
::Items
->find($item->{itemnumber
});
165 $item_obj->replacementprice(0)->store;
166 ($amount) = CalcFine
( $item_obj->unblessed, $patron->{categorycode
}, $branch->{branchcode
}, $start_dt, $end_dt );
167 is
( int($amount), 6, 'Amount is calculated correctly' );
172 subtest
'Test cap_fine_to_replacement_pricew with overduefinescap' => sub {
175 t
::lib
::Mocks
::mock_preference
('useDefaultReplacementCost', '1');
176 my $issuingrule = $builder->build_object(
178 class => 'Koha::IssuingRules',
184 lengthunit
=> 'days',
188 overduefinescap
=> 3,
189 cap_fine_to_replacement_price
=> 1,
194 my $start_dt = DateTime
->new(
200 my $end_dt = DateTime
->new(
206 my ($amount) = CalcFine
( $item, $patron->{categorycode
}, $branch->{branchcode
}, $start_dt, $end_dt );
207 is
( int($amount), 3, 'Got the lesser of overduefinescap and replacement price where overduefinescap < replacement price' );
209 $issuingrule->overduefinescap(6)->store();
210 ($amount) = CalcFine
( $item, $patron->{categorycode
}, $branch->{branchcode
}, $start_dt, $end_dt );
211 is
( int($amount), 5, 'Get the lesser of overduefinescap and replacement price where overduefinescap > replacement price' );
217 $dbh->do(q
|DELETE FROM issuingrules
|);