|
Lines 30-36
use Koha::CirculationRules;
Link Here
|
| 30 |
use t::lib::TestBuilder; |
30 |
use t::lib::TestBuilder; |
| 31 |
use t::lib::Mocks; |
31 |
use t::lib::Mocks; |
| 32 |
|
32 |
|
| 33 |
use Test::More tests => 26; |
33 |
use Test::More tests => 31; |
| 34 |
|
34 |
|
| 35 |
my $dbh = C4::Context->dbh; |
35 |
my $dbh = C4::Context->dbh; |
| 36 |
my $schema = Koha::Database->new()->schema(); |
36 |
my $schema = Koha::Database->new()->schema(); |
|
Lines 99-104
my $item = shift(@items);
Link Here
|
| 99 |
my $patron = shift(@patrons); |
99 |
my $patron = shift(@patrons); |
| 100 |
my $patron_hold = Koha::Holds->find({ borrowernumber => $patron->borrowernumber, biblionumber => $item->biblionumber }); |
100 |
my $patron_hold = Koha::Holds->find({ borrowernumber => $patron->borrowernumber, biblionumber => $item->biblionumber }); |
| 101 |
|
101 |
|
|
|
102 |
my $holds = Koha::Holds->search({ biblionumber => $item->biblionumber }); |
| 103 |
is( $holds->count, 6, "Should have 6 holds in total" ); |
| 104 |
|
| 102 |
Koha::CirculationRules->set_rules( |
105 |
Koha::CirculationRules->set_rules( |
| 103 |
{ |
106 |
{ |
| 104 |
branchcode => undef, |
107 |
branchcode => undef, |
|
Lines 165-173
is($duedate->min, $orig_due->min, 'New due minute is equal to original due minut
Link Here
|
| 165 |
is($duedate->sec, 0, 'New due date second is zero.'); |
168 |
is($duedate->sec, 0, 'New due date second is zero.'); |
| 166 |
|
169 |
|
| 167 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsControl', 'dynamic' ); |
170 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsControl', 'dynamic' ); |
|
|
171 |
|
| 172 |
# Note in counts below, patron's own hold is not counted ("outstanding holds" is |
| 173 |
# the total number of holds minus the hold for the patron we are looking at) |
| 174 |
# In the tests below, we have: |
| 175 |
# threshold = holdable items count + decreaseLoanHighHoldsValue; |
| 176 |
# If the number of outstanding holds is greater than or equal to the threshold, |
| 177 |
# decreaseLoanHighHolds will be activated |
| 178 |
|
| 179 |
# 10 items, 5 outstanding holds |
| 168 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
180 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 169 |
is( $data->{exceeded}, 0, "Should not exceed threshold" ); |
181 |
is( $data->{exceeded}, 0, "Should not exceed threshold" ); |
| 170 |
|
182 |
is( $data->{outstanding}, 5, "Should have 5 outstanding holds" ); |
| 171 |
|
183 |
|
| 172 |
# Place 7 more holds - patrons 5,6,7,8,9,10,11 |
184 |
# Place 7 more holds - patrons 5,6,7,8,9,10,11 |
| 173 |
for my $i ( 5 .. 11 ) { |
185 |
for my $i ( 5 .. 11 ) { |
|
Lines 180-203
for my $i ( 5 .. 11 ) {
Link Here
|
| 180 |
} |
192 |
} |
| 181 |
)->store(); |
193 |
)->store(); |
| 182 |
} |
194 |
} |
|
|
195 |
$holds = Koha::Holds->search({ biblionumber => $item->biblionumber }); |
| 196 |
is( $holds->count, 13, "Should have 13 holds in total" ); |
| 183 |
|
197 |
|
| 184 |
# Note in counts below, patron's own hold is not counted |
198 |
# 12 holds, threshold is 0 over 10 holdable items = 10 |
|
|
199 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsValue', 0 ); |
| 200 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 201 |
is( $data->{exceeded}, 1, "Should exceed decreaseLoanHighHoldsValue of 0" ); |
| 202 |
is( $data->{outstanding}, 12, "Should have 12 outstanding holds" ); |
| 185 |
|
203 |
|
| 186 |
# 12 holds, threshold is 1 over 10 holdable items = 11 |
204 |
# 12 holds, threshold is 1 over 10 holdable items = 11 |
|
|
205 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsValue', 1 ); |
| 187 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
206 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 188 |
is( $data->{exceeded}, 1, "Should exceed threshold of 1" ); |
207 |
is( $data->{exceeded}, 1, "Should exceed decreaseLoanHighHoldsValue of 1" ); |
| 189 |
is( $data->{outstanding}, 12, "Should exceed threshold of 1" ); |
|
|
| 190 |
|
208 |
|
| 191 |
# 12 holds, threshold is 2 over 10 holdable items = 12 (equal is okay) |
209 |
# 12 holds, threshold is 2 over 10 holdable items = 12 |
|
|
210 |
# The numbers are equal, so we should still exceed the threshold and trigger decreaseLoanHighHolds |
| 192 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsValue', 2 ); |
211 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsValue', 2 ); |
| 193 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
212 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 194 |
is( $data->{exceeded}, 0, "Should not exceed threshold of 2" ); |
213 |
is( $data->{exceeded}, 1, "Should exceed decreaseLoanHighHoldsValue of 2" ); |
|
|
214 |
|
| 215 |
# 12 holds, threshold is 3 over 10 holdable items = 13 |
| 216 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsValue', 3 ); |
| 217 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 218 |
is( $data->{exceeded}, 0, "Should not exceed decreaseLoanHighHoldsValue of 3" ); |
| 195 |
|
219 |
|
| 196 |
my $unholdable = pop(@items); |
220 |
my $unholdable = pop(@items); |
| 197 |
$unholdable->damaged(-1); |
221 |
$unholdable->damaged(-1); |
| 198 |
$unholdable->store(); |
222 |
$unholdable->store(); |
| 199 |
|
223 |
|
| 200 |
# 12 holds, threshold is 2 over 9 holdable items = 11 |
224 |
# 12 holds, threshold is 3 over 9 holdable items = 12 |
| 201 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
225 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 202 |
is( $data->{exceeded}, 1, "Should exceed threshold with one damaged item" ); |
226 |
is( $data->{exceeded}, 1, "Should exceed threshold with one damaged item" ); |
| 203 |
|
227 |
|
|
Lines 205-211
$unholdable->damaged(0);
Link Here
|
| 205 |
$unholdable->itemlost(-1); |
229 |
$unholdable->itemlost(-1); |
| 206 |
$unholdable->store(); |
230 |
$unholdable->store(); |
| 207 |
|
231 |
|
| 208 |
# 12 holds, threshold is 2 over 9 holdable items = 11 |
232 |
# 12 holds, threshold is 3 over 9 holdable items = 12 |
| 209 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
233 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 210 |
is( $data->{exceeded}, 1, "Should exceed threshold with one lost item" ); |
234 |
is( $data->{exceeded}, 1, "Should exceed threshold with one lost item" ); |
| 211 |
|
235 |
|
|
Lines 213-219
$unholdable->itemlost(0);
Link Here
|
| 213 |
$unholdable->notforloan(-1); |
237 |
$unholdable->notforloan(-1); |
| 214 |
$unholdable->store(); |
238 |
$unholdable->store(); |
| 215 |
|
239 |
|
| 216 |
# 12 holds, threshold is 2 over 9 holdable items = 11 |
240 |
# 12 holds, threshold is 3 over 9 holdable items = 12 |
| 217 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
241 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 218 |
is( $data->{exceeded}, 1, "Should exceed threshold with one notforloan item" ); |
242 |
is( $data->{exceeded}, 1, "Should exceed threshold with one notforloan item" ); |
| 219 |
|
243 |
|
|
Lines 221-234
$unholdable->notforloan(0);
Link Here
|
| 221 |
$unholdable->withdrawn(-1); |
245 |
$unholdable->withdrawn(-1); |
| 222 |
$unholdable->store(); |
246 |
$unholdable->store(); |
| 223 |
|
247 |
|
| 224 |
# 12 holds, threshold is 2 over 9 holdable items = 11 |
248 |
# 12 holds, threshold is 3 over 9 holdable items = 12 |
| 225 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
249 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 226 |
is( $data->{exceeded}, 1, "Should exceed threshold with one withdrawn item" ); |
250 |
is( $data->{exceeded}, 1, "Should exceed threshold with one withdrawn item" ); |
| 227 |
|
251 |
|
| 228 |
$patron_hold->found('F')->store; |
252 |
$patron_hold->found('F')->store; |
| 229 |
# 11 holds, threshold is 2 over 9 holdable items = 11 |
253 |
# 11 holds, threshold is 3 over 9 holdable items = 12 |
| 230 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
254 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 231 |
is( $data->{exceeded}, 1, "Should exceed threshold with one withdrawn item" ); |
255 |
is( $data->{exceeded}, 1, "Should exceed threshold with one found item" ); |
| 232 |
$patron_hold->found(undef)->store; |
256 |
$patron_hold->found(undef)->store; |
| 233 |
|
257 |
|
| 234 |
t::lib::Mocks::mock_preference('CircControl', 'PatronLibrary'); |
258 |
t::lib::Mocks::mock_preference('CircControl', 'PatronLibrary'); |
| 235 |
- |
|
|