|
Lines 127-136
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsValue', 1 );
Link Here
|
| 127 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsControl', 'static' ); |
127 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsControl', 'static' ); |
| 128 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsIgnoreStatuses', 'damaged,itemlost,notforloan,withdrawn' ); |
128 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsIgnoreStatuses', 'damaged,itemlost,notforloan,withdrawn' ); |
| 129 |
|
129 |
|
| 130 |
my $item_hr = { itemnumber => $item->id, biblionumber => $biblio->id, homebranch => $library->{branchcode}, holdingbranch => $library->{branchcode}, barcode => $item->barcode }; |
130 |
my $data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 131 |
my $patron_hr = { borrowernumber => $patron->id, branchcode => $library->{branchcode} }; |
|
|
| 132 |
|
| 133 |
my $data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); |
| 134 |
is( $data->{exceeded}, 1, "Static mode should exceed threshold" ); |
131 |
is( $data->{exceeded}, 1, "Static mode should exceed threshold" ); |
| 135 |
is( $data->{outstanding}, 6, "Should have 6 outstanding holds" ); |
132 |
is( $data->{outstanding}, 6, "Should have 6 outstanding holds" ); |
| 136 |
is( $data->{duration}, 0, "Should have duration of 0 because of specific circulation rules" ); |
133 |
is( $data->{duration}, 0, "Should have duration of 0 because of specific circulation rules" ); |
|
Lines 151-157
Koha::CirculationRules->set_rules(
Link Here
|
| 151 |
} |
148 |
} |
| 152 |
); |
149 |
); |
| 153 |
|
150 |
|
| 154 |
$data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); |
151 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 155 |
is( $data->{duration}, 1, "Should have a duration of 1 because no specific circulation rules so defaults to system preference" ); |
152 |
is( $data->{duration}, 1, "Should have a duration of 1 because no specific circulation rules so defaults to system preference" ); |
| 156 |
|
153 |
|
| 157 |
my $duedate = $data->{due_date}; |
154 |
my $duedate = $data->{due_date}; |
|
Lines 160-166
is($duedate->min, $orig_due->min, 'New due minute is equal to original due minut
Link Here
|
| 160 |
is($duedate->sec, 0, 'New due date second is zero.'); |
157 |
is($duedate->sec, 0, 'New due date second is zero.'); |
| 161 |
|
158 |
|
| 162 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsControl', 'dynamic' ); |
159 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsControl', 'dynamic' ); |
| 163 |
$data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); |
160 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 164 |
is( $data->{exceeded}, 0, "Should not exceed threshold" ); |
161 |
is( $data->{exceeded}, 0, "Should not exceed threshold" ); |
| 165 |
|
162 |
|
| 166 |
|
163 |
|
|
Lines 177-189
for my $i ( 5 .. 10 ) {
Link Here
|
| 177 |
} |
174 |
} |
| 178 |
|
175 |
|
| 179 |
# 12 holds, threshold is 1 over 10 holdable items = 11 |
176 |
# 12 holds, threshold is 1 over 10 holdable items = 11 |
| 180 |
$data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); |
177 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 181 |
is( $data->{exceeded}, 1, "Should exceed threshold of 1" ); |
178 |
is( $data->{exceeded}, 1, "Should exceed threshold of 1" ); |
| 182 |
is( $data->{outstanding}, 12, "Should exceed threshold of 1" ); |
179 |
is( $data->{outstanding}, 12, "Should exceed threshold of 1" ); |
| 183 |
|
180 |
|
| 184 |
# 12 holds, threshold is 2 over 10 holdable items = 12 (equal is okay) |
181 |
# 12 holds, threshold is 2 over 10 holdable items = 12 (equal is okay) |
| 185 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsValue', 2 ); |
182 |
t::lib::Mocks::mock_preference( 'decreaseLoanHighHoldsValue', 2 ); |
| 186 |
$data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); |
183 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 187 |
is( $data->{exceeded}, 0, "Should not exceed threshold of 2" ); |
184 |
is( $data->{exceeded}, 0, "Should not exceed threshold of 2" ); |
| 188 |
|
185 |
|
| 189 |
my $unholdable = pop(@items); |
186 |
my $unholdable = pop(@items); |
|
Lines 191-197
$unholdable->damaged(-1);
Link Here
|
| 191 |
$unholdable->store(); |
188 |
$unholdable->store(); |
| 192 |
|
189 |
|
| 193 |
# 12 holds, threshold is 2 over 9 holdable items = 11 |
190 |
# 12 holds, threshold is 2 over 9 holdable items = 11 |
| 194 |
$data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); |
191 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 195 |
is( $data->{exceeded}, 1, "Should exceed threshold with one damaged item" ); |
192 |
is( $data->{exceeded}, 1, "Should exceed threshold with one damaged item" ); |
| 196 |
|
193 |
|
| 197 |
$unholdable->damaged(0); |
194 |
$unholdable->damaged(0); |
|
Lines 199-205
$unholdable->itemlost(-1);
Link Here
|
| 199 |
$unholdable->store(); |
196 |
$unholdable->store(); |
| 200 |
|
197 |
|
| 201 |
# 12 holds, threshold is 2 over 9 holdable items = 11 |
198 |
# 12 holds, threshold is 2 over 9 holdable items = 11 |
| 202 |
$data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); |
199 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 203 |
is( $data->{exceeded}, 1, "Should exceed threshold with one lost item" ); |
200 |
is( $data->{exceeded}, 1, "Should exceed threshold with one lost item" ); |
| 204 |
|
201 |
|
| 205 |
$unholdable->itemlost(0); |
202 |
$unholdable->itemlost(0); |
|
Lines 207-213
$unholdable->notforloan(-1);
Link Here
|
| 207 |
$unholdable->store(); |
204 |
$unholdable->store(); |
| 208 |
|
205 |
|
| 209 |
# 12 holds, threshold is 2 over 9 holdable items = 11 |
206 |
# 12 holds, threshold is 2 over 9 holdable items = 11 |
| 210 |
$data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); |
207 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 211 |
is( $data->{exceeded}, 1, "Should exceed threshold with one notforloan item" ); |
208 |
is( $data->{exceeded}, 1, "Should exceed threshold with one notforloan item" ); |
| 212 |
|
209 |
|
| 213 |
$unholdable->notforloan(0); |
210 |
$unholdable->notforloan(0); |
|
Lines 215-236
$unholdable->withdrawn(-1);
Link Here
|
| 215 |
$unholdable->store(); |
212 |
$unholdable->store(); |
| 216 |
|
213 |
|
| 217 |
# 12 holds, threshold is 2 over 9 holdable items = 11 |
214 |
# 12 holds, threshold is 2 over 9 holdable items = 11 |
| 218 |
$data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); |
215 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 219 |
is( $data->{exceeded}, 1, "Should exceed threshold with one withdrawn item" ); |
216 |
is( $data->{exceeded}, 1, "Should exceed threshold with one withdrawn item" ); |
| 220 |
|
217 |
|
| 221 |
$patron_hold->found('F')->store; |
218 |
$patron_hold->found('F')->store; |
| 222 |
# 11 holds, threshold is 2 over 9 holdable items = 11 |
219 |
# 11 holds, threshold is 2 over 9 holdable items = 11 |
| 223 |
$data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); |
220 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 224 |
is( $data->{exceeded}, 1, "Should exceed threshold with one withdrawn item" ); |
221 |
is( $data->{exceeded}, 1, "Should exceed threshold with one withdrawn item" ); |
| 225 |
$patron_hold->found(undef)->store; |
222 |
$patron_hold->found(undef)->store; |
| 226 |
|
223 |
|
| 227 |
t::lib::Mocks::mock_preference('CircControl', 'PatronLibrary'); |
224 |
t::lib::Mocks::mock_preference('CircControl', 'PatronLibrary'); |
| 228 |
|
225 |
|
| 229 |
my $patron_object = Koha::Patrons->find( $patron_hr->{borrowernumber} ); |
226 |
my ( undef, $needsconfirmation ) = CanBookBeIssued( $patron, $item->barcode ); |
| 230 |
my ( undef, $needsconfirmation ) = CanBookBeIssued( $patron_object, $item->barcode ); |
|
|
| 231 |
ok( $needsconfirmation->{HIGHHOLDS}, "High holds checkout needs confirmation" ); |
227 |
ok( $needsconfirmation->{HIGHHOLDS}, "High holds checkout needs confirmation" ); |
| 232 |
|
228 |
|
| 233 |
( undef, $needsconfirmation ) = CanBookBeIssued( $patron_object, $item->barcode, undef, undef, undef, { override_high_holds => 1 } ); |
229 |
( undef, $needsconfirmation ) = CanBookBeIssued( $patron, $item->barcode, undef, undef, undef, { override_high_holds => 1 } ); |
| 234 |
ok( !$needsconfirmation->{HIGHHOLDS}, "High holds checkout does not need confirmation" ); |
230 |
ok( !$needsconfirmation->{HIGHHOLDS}, "High holds checkout does not need confirmation" ); |
| 235 |
|
231 |
|
| 236 |
Koha::CirculationRules->set_rule( |
232 |
Koha::CirculationRules->set_rule( |
|
Lines 243-249
Koha::CirculationRules->set_rule(
Link Here
|
| 243 |
} |
239 |
} |
| 244 |
); |
240 |
); |
| 245 |
|
241 |
|
| 246 |
$data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); |
242 |
$data = C4::Circulation::checkHighHolds( $item, $patron ); |
| 247 |
is( $data->{duration}, 2, "Circulation rules override system preferences" ); |
243 |
is( $data->{duration}, 2, "Circulation rules override system preferences" ); |
| 248 |
|
244 |
|
| 249 |
$schema->storage->txn_rollback(); |
245 |
$schema->storage->txn_rollback(); |
| 250 |
- |
|
|