9 use t
::lib
::TestBuilder
;
11 use Test
::More tests
=> 11;
13 use_ok
('C4::Reserves');
15 my $schema = Koha
::Database
->new->schema;
16 $schema->storage->txn_begin;
18 my $dbh = C4
::Context
->dbh;
19 $dbh->do(q{DELETE FROM special_holidays});
20 $dbh->do(q{DELETE FROM repeatable_holidays});
21 $dbh->do("DELETE FROM reserves");
23 my $builder = t
::lib
::TestBuilder
->new();
25 # Category, branch and patrons
29 categorycode
=> 'XYZ1',
46 my $patron1 = $builder->build({
49 categorycode
=> 'XYZ1',
54 my $patron2 = $builder->build({
57 categorycode
=> 'XYZ1',
62 my $biblio = $builder->build({
65 title
=> 'Title 1', },
68 my $biblio2 = $builder->build({
71 title
=> 'Title 2', },
74 my $biblio3 = $builder->build({
77 title
=> 'Title 3', },
80 my $biblio4 = $builder->build({
83 title
=> 'Title 4', },
86 my $item1 = $builder->build({
89 biblionumber
=> $biblio->{biblionumber
},
93 my $item2 = $builder->build({
96 biblionumber
=> $biblio2->{biblionumber
},
100 my $item3 = $builder->build({
103 biblionumber
=> $biblio3->{biblionumber
},
107 my $item4 = $builder->build({
110 biblionumber
=> $biblio4->{biblionumber
},
114 my $today = dt_from_string
();
116 my $reserve1_reservedate = $today->clone;
117 $reserve1_reservedate->subtract(days
=> 20);
119 my $reserve1_expirationdate = $today->clone;
120 $reserve1_expirationdate->add(days
=> 6);
122 my $reserve1 = $builder->build({
125 borrowernumber
=> $patron1->{borrowernumber
},
126 reservedate
=> $reserve1_reservedate->ymd,
127 expirationdate
=> undef,
128 biblionumber
=> $biblio->{biblionumber
},
129 branchcode
=> 'LIB1',
135 t
::lib
::Mocks
::mock_preference
('ExpireReservesMaxPickUpDelay', 1);
136 t
::lib
::Mocks
::mock_preference
('ReservesMaxPickUpDelay', 6);
138 ModReserveAffect
( $item1->{itemnumber
}, $patron1->{borrowernumber
});
139 my $r = Koha
::Holds
->find($reserve1->{reserve_id
});
141 is
($r->waitingdate, $today->ymd, 'Waiting date should be set to today' );
142 is
($r->expirationdate, $reserve1_expirationdate->ymd, 'Expiration date should be set to today + 6' );
143 is
($r->found, 'W', 'Reserve status is now "waiting"' );
144 is
($r->priority, 0, 'Priority should be 0' );
145 is
($r->itemnumber, $item1->{itemnumber
}, 'Item number should be set correctly' );
147 my $reserve2 = $builder->build({
150 borrowernumber
=> $patron2->{borrowernumber
},
151 reservedate
=> $reserve1_reservedate->ymd,
152 expirationdate
=> undef,
153 biblionumber
=> $biblio2->{biblionumber
},
154 branchcode
=> 'LIB1',
160 ModReserveAffect
( $item2->{itemnumber
}, $patron2->{borrowernumber
}, 1);
161 my $r2 = Koha
::Holds
->find($reserve2->{reserve_id
});
163 is
($r2->found, 'T', '2nd reserve - Reserve status is now "To transfer"' );
164 is
($r2->priority, 0, '2nd reserve - Priority should be 0' );
165 is
($r2->itemnumber, $item2->{itemnumber
}, '2nd reserve - Item number should be set correctly' );
167 my $reserve3 = $builder->build({
170 borrowernumber
=> $patron2->{borrowernumber
},
171 reservedate
=> $reserve1_reservedate->ymd,
172 expirationdate
=> undef,
173 biblionumber
=> $biblio3->{biblionumber
},
174 branchcode
=> 'LIB1',
180 my $special_holiday1_dt = $today->clone;
181 $special_holiday1_dt->add(days
=> 2);
183 my $holiday = $builder->build({
184 source
=> 'SpecialHoliday',
186 branchcode
=> 'LIB1',
187 day
=> $special_holiday1_dt->day,
188 month
=> $special_holiday1_dt->month,
189 year
=> $special_holiday1_dt->year,
190 title
=> 'My special holiday',
195 my $special_holiday2_dt = $today->clone;
196 $special_holiday2_dt->add(days
=> 4);
198 my $holiday2 = $builder->build({
199 source
=> 'SpecialHoliday',
201 branchcode
=> 'LIB1',
202 day
=> $special_holiday2_dt->day,
203 month
=> $special_holiday2_dt->month,
204 year
=> $special_holiday2_dt->year,
205 title
=> 'My special holiday 2',
210 Koha
::Caches
->get_instance->flush_all;
212 t
::lib
::Mocks
::mock_preference
('ExcludeHolidaysFromMaxPickUpDelay', 1);
213 ModReserveAffect
( $item3->{itemnumber
}, $patron2->{borrowernumber
});
215 # Add 6 days of pickup delay + 1 day of holiday.
216 my $expected_expiration = $today->clone;
217 $expected_expiration->add(days
=> 8);
219 my $r3 = Koha
::Holds
->find($reserve3->{reserve_id
});
220 is
($r3->expirationdate, $expected_expiration->ymd, 'Expiration date should be set to today + 7' );
222 my $reserve4_reservedate = $today->clone;
223 my $requested_expiredate = $today->clone()->add(days
=> 6);
225 my $reserve4 = $builder->build({
228 borrowernumber
=> $patron2->{borrowernumber
},
229 reservedate
=> $reserve4_reservedate->ymd,
230 expirationdate
=> $requested_expiredate->ymd,
231 biblionumber
=> $biblio4->{biblionumber
},
232 branchcode
=> 'LIB1',
238 t
::lib
::Mocks
::mock_preference
('ReservesMaxPickUpDelay', 10);
239 ModReserveAffect
( $item4->{itemnumber
}, $patron2->{borrowernumber
}, 0, $reserve4->{reserve_id
});
241 my $r4 = Koha
::Holds
->find($reserve4->{reserve_id
});
242 is
($r4->expirationdate, $requested_expiredate->ymd, 'Requested expiration date should be kept' );
244 $schema->storage->txn_rollback;