Bug 15685: DBIC Schema changes
[koha.git] / t / db_dependent / Holds / WaitingReserves.t
blob292061def3bf0390953f8add383f035b7c96dbff
1 #!/usr/bin/perl
3 use Modern::Perl;
5 use C4::Reserves;
6 use Koha::DateUtils;
8 use t::lib::Mocks;
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
26 $builder->build({
27 source => 'Category',
28 value => {
29 categorycode => 'XYZ1',
31 });
32 $builder->build({
33 source => 'Branch',
34 value => {
35 branchcode => 'LIB1',
37 });
39 $builder->build({
40 source => 'Branch',
41 value => {
42 branchcode => 'LIB2',
44 });
46 my $patron1 = $builder->build({
47 source => 'Borrower',
48 value => {
49 categorycode => 'XYZ1',
50 branchcode => 'LIB1',
52 });
54 my $patron2 = $builder->build({
55 source => 'Borrower',
56 value => {
57 categorycode => 'XYZ1',
58 branchcode => 'LIB2',
60 });
62 my $biblio = $builder->build({
63 source => 'Biblio',
64 value => {
65 title => 'Title 1', },
66 });
68 my $biblio2 = $builder->build({
69 source => 'Biblio',
70 value => {
71 title => 'Title 2', },
72 });
74 my $biblio3 = $builder->build({
75 source => 'Biblio',
76 value => {
77 title => 'Title 3', },
78 });
80 my $biblio4 = $builder->build({
81 source => 'Biblio',
82 value => {
83 title => 'Title 4', },
84 });
86 my $item1 = $builder->build({
87 source => 'Item',
88 value => {
89 biblionumber => $biblio->{biblionumber},
91 });
93 my $item2 = $builder->build({
94 source => 'Item',
95 value => {
96 biblionumber => $biblio2->{biblionumber},
98 });
100 my $item3 = $builder->build({
101 source => 'Item',
102 value => {
103 biblionumber => $biblio3->{biblionumber},
107 my $item4 = $builder->build({
108 source => 'Item',
109 value => {
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({
123 source => 'Reserve',
124 value => {
125 borrowernumber => $patron1->{borrowernumber},
126 reservedate => $reserve1_reservedate->ymd,
127 expirationdate => undef,
128 biblionumber => $biblio->{biblionumber},
129 branchcode => 'LIB1',
130 priority => 1,
131 found => '',
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({
148 source => 'Reserve',
149 value => {
150 borrowernumber => $patron2->{borrowernumber},
151 reservedate => $reserve1_reservedate->ymd,
152 expirationdate => undef,
153 biblionumber => $biblio2->{biblionumber},
154 branchcode => 'LIB1',
155 priority => 1,
156 found => '',
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({
168 source => 'Reserve',
169 value => {
170 borrowernumber => $patron2->{borrowernumber},
171 reservedate => $reserve1_reservedate->ymd,
172 expirationdate => undef,
173 biblionumber => $biblio3->{biblionumber},
174 branchcode => 'LIB1',
175 priority => 1,
176 found => '',
180 my $special_holiday1_dt = $today->clone;
181 $special_holiday1_dt->add(days => 2);
183 my $holiday = $builder->build({
184 source => 'SpecialHoliday',
185 value => {
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',
191 isexception => 0
195 my $special_holiday2_dt = $today->clone;
196 $special_holiday2_dt->add(days => 4);
198 my $holiday2 = $builder->build({
199 source => 'SpecialHoliday',
200 value => {
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',
206 isexception => 0
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({
226 source => 'Reserve',
227 value => {
228 borrowernumber => $patron2->{borrowernumber},
229 reservedate => $reserve4_reservedate->ymd,
230 expirationdate => $requested_expiredate->ymd,
231 biblionumber => $biblio4->{biblionumber},
232 branchcode => 'LIB1',
233 priority => 1,
234 found => '',
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;