3 # Copyright 2019 Koha Development team
5 # This file is part of Koha
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
22 use Test
::More tests
=> 6;
26 use Koha
::DateUtils
qw(dt_from_string);
28 use Koha
::Patron
::Relationships
;
30 use t
::lib
::TestBuilder
;
33 my $schema = Koha
::Database
->new->schema;
34 my $builder = t
::lib
::TestBuilder
->new;
36 subtest
'add_guarantor() tests' => sub {
40 $schema->storage->txn_begin;
42 t
::lib
::Mocks
::mock_preference
( 'borrowerRelationship', 'father1|father2' );
44 my $patron_1 = $builder->build_object({ class => 'Koha::Patrons' });
45 my $patron_2 = $builder->build_object({ class => 'Koha::Patrons' });
48 { $patron_1->add_guarantor({ guarantor_id
=> $patron_2->borrowernumber }); }
49 'Koha::Exceptions::Patron::Relationship::InvalidRelationship',
50 'Exception is thrown as no relationship passed';
52 is
( $patron_1->guarantee_relationships->count, 0, 'No guarantors added' );
55 { $patron_1->add_guarantor({ guarantor_id
=> $patron_2->borrowernumber, relationship
=> 'father' }); }
56 'Koha::Exceptions::Patron::Relationship::InvalidRelationship',
57 'Exception is thrown as a wrong relationship was passed';
59 is
( $patron_1->guarantee_relationships->count, 0, 'No guarantors added' );
61 $patron_1->add_guarantor({ guarantor_id
=> $patron_2->borrowernumber, relationship
=> 'father1' });
63 my $guarantors = $patron_1->guarantor_relationships;
65 is
( $guarantors->count, 1, 'No guarantors added' );
69 open STDERR
, '>', '/dev/null';
71 { $patron_1->add_guarantor({ guarantor_id
=> $patron_2->borrowernumber, relationship
=> 'father2' }); }
72 'Koha::Exceptions::Patron::Relationship::DuplicateRelationship',
73 'Exception is thrown for duplicated relationship';
77 $schema->storage->txn_rollback;
80 subtest
'relationships_debt() tests' => sub {
84 $schema->storage->txn_begin;
86 t
::lib
::Mocks
::mock_preference
( 'borrowerRelationship', 'parent' );
88 my $parent_1 = $builder->build_object({ class => 'Koha::Patrons' });
89 my $parent_2 = $builder->build_object({ class => 'Koha::Patrons' });
90 my $child_1 = $builder->build_object({ class => 'Koha::Patrons' });
91 my $child_2 = $builder->build_object({ class => 'Koha::Patrons' });
93 $child_1->add_guarantor({ guarantor_id
=> $parent_1->borrowernumber, relationship
=> 'parent' });
94 $child_1->add_guarantor({ guarantor_id
=> $parent_2->borrowernumber, relationship
=> 'parent' });
95 $child_2->add_guarantor({ guarantor_id
=> $parent_1->borrowernumber, relationship
=> 'parent' });
96 $child_2->add_guarantor({ guarantor_id
=> $parent_2->borrowernumber, relationship
=> 'parent' });
98 is
( $child_1->guarantor_relationships->guarantors->count, 2, 'Child 1 has correct number of guarantors' );
99 is
( $child_2->guarantor_relationships->guarantors->count, 2, 'Child 2 has correct number of guarantors' );
100 is
( $parent_1->guarantee_relationships->guarantees->count, 2, 'Parent 1 has correct number of guarantors' );
101 is
( $parent_2->guarantee_relationships->guarantees->count, 2, 'Parent 2 has correct number of guarantors' );
103 # 3 params, count from 0 to 6 in binary ( 3 places ) to get the set of switches, then do that 4 times, one for each parent and child
104 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
105 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
106 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
107 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
108 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
109 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
110 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
111 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
112 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
113 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
114 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
115 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
116 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
117 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
118 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
119 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
120 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
121 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
122 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
123 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
126 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
127 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
129 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
130 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
132 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
133 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
135 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
136 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
138 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
139 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
140 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
141 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
144 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
145 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
147 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
148 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
150 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
151 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
153 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
154 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
156 $child_2->account->add_debit({ type
=> 'ACCOUNT', amount
=> 10, interface
=> 'commandline' });
157 is
( $child_2->account->non_issues_charges, 10, 'Child 2 owes correct amount' );
159 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
160 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
161 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
162 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
163 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
164 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
165 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
166 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
167 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
168 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
169 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
170 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
171 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
172 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
173 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
174 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
175 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
176 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
177 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
178 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
181 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
182 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
184 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
185 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
187 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
188 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
190 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
191 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
193 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
194 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
195 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
196 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
199 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
200 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
202 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
203 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
205 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
206 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
208 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
209 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
211 $parent_1->account->add_debit({ type
=> 'ACCOUNT', amount
=> 10, interface
=> 'commandline' });
212 is
( $parent_1->account->non_issues_charges, 10, 'Parent 1 owes correct amount' );
214 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
215 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
216 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
217 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
218 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
219 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
220 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
221 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
222 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
223 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
224 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 20, 'Family debt is correct' );
225 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
226 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
227 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
228 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
229 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
230 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
231 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
232 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 20, 'Family debt is correct' );
233 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
236 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
237 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
239 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
240 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
242 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
243 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
245 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
246 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
248 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
249 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
250 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
251 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
254 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
255 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
257 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
258 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
260 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
261 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
263 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
264 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
266 $parent_2->account->add_debit({ type
=> 'ACCOUNT', amount
=> 10, interface
=> 'commandline' });
267 is
( $parent_2->account->non_issues_charges, 10, 'Parent 2 owes correct amount' );
269 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
270 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
271 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 20, 'Family debt is correct' );
272 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 30, 'Family debt is correct' );
273 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
274 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
275 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
276 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
277 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
278 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
279 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 20, 'Family debt is correct' );
280 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 30, 'Family debt is correct' );
281 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
282 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
283 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
284 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
285 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
286 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
287 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 30, 'Family debt is correct' );
288 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 30, 'Family debt is correct' );
291 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
292 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
294 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
295 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
297 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
298 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
300 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
301 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
303 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
304 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
305 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 20, 'Family debt is correct' );
306 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 30, 'Family debt is correct' );
309 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
310 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
312 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
313 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
315 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
316 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
318 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
319 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
321 $child_1->account->add_debit({ type
=> 'ACCOUNT', amount
=> 10, interface
=> 'commandline' });
322 is
( $child_1->account->non_issues_charges, 10, 'Child 1 owes correct amount' );
324 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 20, 'Family debt is correct' );
325 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
326 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 30, 'Family debt is correct' );
327 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 40, 'Family debt is correct' );
328 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 20, 'Family debt is correct' );
329 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
330 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 20, 'Family debt is correct' );
331 is
( $parent_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 30, 'Family debt is correct' );
332 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 20, 'Family debt is correct' );
333 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
334 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 30, 'Family debt is correct' );
335 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 40, 'Family debt is correct' );
336 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 20, 'Family debt is correct' );
337 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
338 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 20, 'Family debt is correct' );
339 is
( $parent_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 30, 'Family debt is correct' );
340 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
341 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
342 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 30, 'Family debt is correct' );
343 is
( $child_1->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 40, 'Family debt is correct' );
346 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
347 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
349 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
350 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
352 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
353 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
355 is
( $child_1->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
356 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
358 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 0 }), 10, 'Family debt is correct' );
359 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 0, include_this_patron
=> 1 }), 20, 'Family debt is correct' );
360 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 0 }), 30, 'Family debt is correct' );
361 is
( $child_2->relationships_debt({ only_this_guarantor
=> 0, include_guarantors
=> 1, include_this_patron
=> 1 }), 40, 'Family debt is correct' );
364 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
365 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
367 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 0, include_this_patron
=> 1 }), 0, 'Family debt is correct' );
368 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
370 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 0 }), 0, 'Family debt is correct' );
371 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
373 is
( $child_2->relationships_debt({ only_this_guarantor
=> 1, include_guarantors
=> 1, include_this_patron
=> 1 }), 10, 'Family debt is correct' );
374 } 'Koha::Exceptions::BadParameter', 'Exception is thrown as patron is not a guarantor';
376 $schema->storage->txn_rollback;
379 subtest
'add_enrolment_fee_if_needed() tests' => sub {
383 subtest
'category has enrolment fee' => sub {
386 $schema->storage->txn_begin;
388 my $category = $builder->build_object(
390 class => 'Koha::Patron::Categories',
397 my $patron = $builder->build_object(
399 class => 'Koha::Patrons',
401 categorycode
=> $category->categorycode
406 my $enrollment_fee = $patron->add_enrolment_fee_if_needed();
407 is
( $enrollment_fee * 1, 20, 'Enrolment fee amount is correct' );
408 my $account = $patron->account;
409 is
( $patron->account->balance * 1, 20, 'Patron charged the enrolment fee' );
410 # second enrolment fee, new
411 $enrollment_fee = $patron->add_enrolment_fee_if_needed(0);
412 # third enrolment fee, renewal
413 $enrollment_fee = $patron->add_enrolment_fee_if_needed(1);
414 is
( $patron->account->balance * 1, 60, 'Patron charged the enrolment fees' );
416 my @debits = $account->outstanding_debits;
417 is
( scalar @debits, 3, '3 enrolment fees' );
418 is
( $debits[0]->debit_type_code, 'ACCOUNT', 'Account type set correctly' );
419 is
( $debits[1]->debit_type_code, 'ACCOUNT', 'Account type set correctly' );
420 is
( $debits[2]->debit_type_code, 'ACCOUNT_RENEW', 'Account type set correctly' );
422 $schema->storage->txn_rollback;
425 subtest
'no enrolment fee' => sub {
429 $schema->storage->txn_begin;
431 my $category = $builder->build_object(
433 class => 'Koha::Patron::Categories',
440 my $patron = $builder->build_object(
442 class => 'Koha::Patrons',
444 categorycode
=> $category->categorycode
449 my $enrollment_fee = $patron->add_enrolment_fee_if_needed();
450 is
( $enrollment_fee * 1, 0, 'No enrolment fee' );
451 my $account = $patron->account;
452 is
( $patron->account->balance, 0, 'Patron not charged anything' );
454 my @debits = $account->outstanding_debits;
455 is
( scalar @debits, 0, 'no debits' );
457 $schema->storage->txn_rollback;
461 subtest
'to_api() tests' => sub {
465 $schema->storage->txn_begin;
467 my $patron_class = Test
::MockModule
->new('Koha::Patron');
470 sub { return 'algo' }
473 my $patron = $builder->build_object(
475 class => 'Koha::Patrons',
482 my $restricted = $patron->to_api->{restricted
};
483 ok
( defined $restricted, 'restricted is defined' );
484 ok
( !$restricted, 'debarred is undef, restricted evaluates to false' );
486 $patron->debarred( dt_from_string
->add( days
=> 1 ) )->store->discard_changes;
487 $restricted = $patron->to_api->{restricted
};
488 ok
( defined $restricted, 'restricted is defined' );
489 ok
( $restricted, 'debarred is defined, restricted evaluates to true' );
491 my $patron_json = $patron->to_api({ embed
=> { algo
=> {} } });
492 ok
( exists $patron_json->{algo
} );
493 is
( $patron_json->{algo
}, 'algo' );
495 $schema->storage->txn_rollback;
498 subtest
'login_attempts tests' => sub {
501 $schema->storage->txn_begin;
503 my $patron = $builder->build_object(
505 class => 'Koha::Patrons',
508 my $patron_info = $patron->unblessed;
510 delete $patron_info->{login_attempts
};
511 my $new_patron = Koha
::Patron
->new($patron_info)->store;
512 is
( $new_patron->discard_changes->login_attempts, 0, "login_attempts defaults to 0 as expected");
514 $schema->storage->txn_rollback;
517 subtest
'is_superlibrarian() tests' => sub {
521 $schema->storage->txn_begin;
523 my $patron = $builder->build_object(
525 class => 'Koha::Patrons',
533 is
( $patron->is_superlibrarian, 0, 'Patron is not a superlibrarian and the method returns the correct value' );
535 $patron->flags(1)->store->discard_changes;
536 is
( $patron->is_superlibrarian, 1, 'Patron is a superlibrarian and the method returns the correct value' );
538 $patron->flags(0)->store->discard_changes;
539 is
( $patron->is_superlibrarian, 0, 'Patron is not a superlibrarian and the method returns the correct value' );
541 $schema->storage->txn_rollback;