Line 0
Link Here
|
0 |
- |
1 |
#!/usr/bin/perl |
|
|
2 |
use strict; |
3 |
use warnings; |
4 |
|
5 |
use C4::Context; |
6 |
use Test::More tests => 29; |
7 |
use Test::MockModule; |
8 |
use DBD::Mock; |
9 |
|
10 |
use_ok('C4::Housebound'); |
11 |
|
12 |
use C4::Housebound qw( GetHouseboundDetails CreateHouseboundDetails |
13 |
UpdateHouseboundDetails |
14 |
GetCurrentHouseboundInstanceList |
15 |
GetHouseboundInstanceDetails |
16 |
UpdateHouseboundInstanceDetails |
17 |
CreateHouseboundInstanceDetails |
18 |
DeleteHouseboundInstanceDetails |
19 |
GetVolunteerNameAndID GetVolunteerList |
20 |
GetChooserList GetDelivererList CheckPrevIssue |
21 |
); |
22 |
|
23 |
# Setup mock db |
24 |
my $module_context = new Test::MockModule('C4::Context'); |
25 |
$module_context->mock( |
26 |
'_new_dbh', |
27 |
sub { |
28 |
my $dbh = DBI->connect( 'DBI:Mock:', '', '' ) |
29 |
|| die "Cannot create handle: $DBI::errstr\n"; |
30 |
return $dbh; |
31 |
} |
32 |
); |
33 |
|
34 |
my $dbh = C4::Context->dbh(); |
35 |
|
36 |
# convenience variables |
37 |
my $name; |
38 |
# mock_add_resultset vars |
39 |
my ( $sql, $sql2, @bound_params, @keys, @values, %result ) = ( ); |
40 |
# mock_history_verification vars |
41 |
my ( $history, $params, $query ) = ( ); |
42 |
|
43 |
sub clean_vars { |
44 |
( $name, $sql, $sql2, @bound_params, @keys, @values, %result, |
45 |
$history, $params, $query ) = ( ); |
46 |
$dbh->{mock_clear_history} = 1; |
47 |
} |
48 |
|
49 |
# Tests |
50 |
## GetHouseboundDetails |
51 |
$name = 'GetHouseboundDetails'; |
52 |
$sql = 'select * from housebound where borrowernumber=?'; |
53 |
@bound_params = ( 101 ); |
54 |
@keys = qw< hbnumber day frequency borrowernumber Itype_quant |
55 |
Item_subject Item_authors referral notes >; |
56 |
@values = qw< 5 Monday Week-2/4 101 books dvd thrillers cooke |
57 |
alex none >; |
58 |
foreach my $i ( 0 .. $#keys) { |
59 |
$result{$keys[$i]} = $values[$i]; |
60 |
} |
61 |
|
62 |
is( GetHouseboundDetails('unknown'), undef, |
63 |
$name . ': Return value "undefined".' ); |
64 |
|
65 |
$dbh->{mock_add_resultset} = |
66 |
{ |
67 |
sql => $sql, |
68 |
bound_params => [ @bound_params ], |
69 |
results => [ [ @keys ], [ @values ] ], |
70 |
}; |
71 |
|
72 |
is_deeply( GetHouseboundDetails($bound_params[0]), \%result, |
73 |
$name . ': Return value "$result".' ); |
74 |
|
75 |
clean_vars(); |
76 |
|
77 |
## CreateHouseboundDetails |
78 |
$name = 'CreateHouseboundDetails'; |
79 |
$sql = 'insert into housebound' |
80 |
. ' (day, frequency, borrowernumber, Itype_quant, Item_subject,' |
81 |
. ' Item_authors, referral, notes) values (?,?,?,?,?,?,?,?)'; |
82 |
@keys = qw< day frequency borrowernumber Itype_quant Item_subject |
83 |
Item_authors referral notes >; |
84 |
@values = qw< Tuesday Week-3/4 103 journals psychology sam bob $name >; |
85 |
|
86 |
is( CreateHouseboundDetails($values[2], $values[0], $values[1], $values[3], |
87 |
$values[4], $values[5], $values[6], $values[7]), |
88 |
undef, $name . ': Return value "undefined".'); |
89 |
|
90 |
$history = $dbh->{mock_all_history}; |
91 |
$query = $history->[0]; |
92 |
$params = $query->bound_params; |
93 |
|
94 |
is($query->statement, $sql, $name . ': Correct statement generated' ); |
95 |
is(scalar(@{$params}), scalar(@values), |
96 |
$name . ': Correct number of parameters bound.' ); |
97 |
is_deeply( $params, \@values, |
98 |
$name . ': Correct parameter values passed.' ); |
99 |
|
100 |
clean_vars(); |
101 |
|
102 |
## UpdateHouseboundDetails |
103 |
$name = 'UpdateHouseboundDetails'; |
104 |
$sql = 'update housebound set day=?,frequency=?,borrowernumber=?,' |
105 |
. 'Itype_quant=?,Item_subject=?,Item_authors=?,referral=?,notes=?' |
106 |
. ' where hbnumber=?', |
107 |
@keys = qw< day frequency borrowernumber Itype_quant Item_subject |
108 |
Item_authors referral notes hbnumber>; |
109 |
@values = qw< Tuesday Week-3/4 103 journals psychology sam bob $name 1>; |
110 |
is( UpdateHouseboundDetails( $values[8], $values[2], $values[0], $values[1], |
111 |
$values[3], $values[4], $values[5], $values[6], |
112 |
$values[7] ), |
113 |
undef, $name . ': Return value "undefined".'); |
114 |
|
115 |
$history = $dbh->{mock_all_history}; |
116 |
$query = $history->[0]; |
117 |
$params = $query->bound_params; |
118 |
|
119 |
is($query->statement, $sql, $name . ': Correct statement generated' ); |
120 |
is(scalar(@{$params}), scalar(@values), |
121 |
$name . ': Correct number of parameters bound.'); |
122 |
is_deeply( $params, \@values, |
123 |
$name . ': Correct parameter values passed.'); |
124 |
|
125 |
clean_vars(); |
126 |
|
127 |
## GetCurrentHouseboundInstanceList |
128 |
### GetcurrentHouseboundInstanceList's Slice causes |
129 |
### mock dbd to fail |
130 |
### Cannot test. |
131 |
|
132 |
## GetVolunteerNameAndID |
133 |
$name = "GetVolunteerNameAndID"; |
134 |
$sql = 'select borrowernumber,title,firstname,surname' |
135 |
. ' from borrowers where borrowernumber=?'; |
136 |
@bound_params = ( 101 ); |
137 |
@keys = qw< borrowernumber title firstname surname >; |
138 |
@values = qw< 101 Mr John Doe >; |
139 |
foreach my $i ( 0 .. $#keys) { |
140 |
$result{$keys[$i]} = $values[$i]; |
141 |
} |
142 |
|
143 |
is( GetVolunteerNameAndID($bound_params[0]), undef, |
144 |
$name . ': Return value "undefined".' ); |
145 |
|
146 |
$dbh->{mock_add_resultset} = |
147 |
{ |
148 |
sql => $sql, |
149 |
bound_params => [ @bound_params ], |
150 |
results => [ [ @keys ], [ @values ] ], |
151 |
}; |
152 |
|
153 |
is_deeply( GetVolunteerNameAndID($bound_params[0]), |
154 |
\%result, $name . ': Return value "$result".' ); |
155 |
|
156 |
clean_vars(); |
157 |
|
158 |
## GetVolunteerList |
159 |
### GetVolunteerList's Slice causes mock dbd to fail |
160 |
### Cannot test. |
161 |
|
162 |
## GetHouseboundInstanceDetails |
163 |
$name = 'GetHouseboundInstanceDetails'; |
164 |
$sql = 'SELECT * from housebound_instance where instanceid=?'; |
165 |
@bound_params = ( 1 ); |
166 |
@keys = qw< instanceid hbnumber dmy time borrowernumber volunteer |
167 |
chooser deliverer >; |
168 |
@values = qw< 1 5 2014-03-31 am 101 102 103 104 >; |
169 |
foreach my $i ( 0 .. $#keys) { |
170 |
$result{$keys[$i]} = $values[$i]; |
171 |
} |
172 |
|
173 |
is( GetHouseboundInstanceDetails('1'), undef, |
174 |
$name . ': Return value "undefined".' ); |
175 |
|
176 |
$dbh->{mock_add_resultset} = |
177 |
{ |
178 |
sql => $sql, |
179 |
bound_params => [ @bound_params ], |
180 |
results => [ [ @keys ], [ @values ] ], |
181 |
}; |
182 |
|
183 |
is_deeply( GetHouseboundInstanceDetails('1'), \%result, |
184 |
$name . ': Return value "$result".' ); |
185 |
|
186 |
clean_vars(); |
187 |
|
188 |
## UpdateHouseboundInstanceDetails |
189 |
$name = "UpdateHouseboundInstanceDetails"; |
190 |
$sql = 'update housebound_instance set hbnumber=?, dmy=?,' |
191 |
. ' time=?, borrowernumber=?, volunteer=?, chooser=?, deliverer=?' |
192 |
. ' where instanceid=?'; |
193 |
@keys = qw< hbnumber dmy time borrowernumber volunteer chooser |
194 |
deliverer instanceid >; |
195 |
@values = qw< 5 2014-03-31 am 101 102 103 104 1 >; |
196 |
|
197 |
is( UpdateHouseboundInstanceDetails( $values[7], $values[0], $values[1], |
198 |
$values[2], $values[3], $values[4], |
199 |
$values[5], $values[6] ), undef, |
200 |
$name . ': Return value "undefined".' ); |
201 |
|
202 |
$history = $dbh->{mock_all_history}; |
203 |
$query = $history->[0]; |
204 |
$params = $query->bound_params; |
205 |
|
206 |
is($query->statement, $sql, $name . ': Correct statement generated' ); |
207 |
is(scalar(@{$params}), scalar(@values), |
208 |
$name . ': Correct number of parameters bound.'); |
209 |
is_deeply( $params, \@values, |
210 |
$name . ': Correct parameter values passed.'); |
211 |
|
212 |
clean_vars(); |
213 |
|
214 |
## CreateHouseboundInstanceDetails |
215 |
$name = "CreateHouseboundInstanceDetails"; |
216 |
$sql = 'insert into housebound_instance' |
217 |
. ' (hbnumber, dmy, time, borrowernumber, volunteer, chooser, deliverer)' |
218 |
. ' values (?,?,?,?,?,?,?)'; |
219 |
@keys = qw< hbnumber dmy time borrowernumber volunteer chooser |
220 |
deliverer >; |
221 |
@values = qw< 5 2014-03-31 am 101 102 103 104 >; |
222 |
|
223 |
is( CreateHouseboundInstanceDetails( @values ), undef, |
224 |
$name . ': Return value "undefined".'); |
225 |
|
226 |
$history = $dbh->{mock_all_history}; |
227 |
$query = $history->[0]; |
228 |
$params = $query->bound_params; |
229 |
|
230 |
is($query->statement, $sql, $name . ': Correct statement generated' ); |
231 |
is(scalar(@{$params}), scalar(@values), |
232 |
$name . ': Correct number of parameters bound.' ); |
233 |
is_deeply( $params, \@values, |
234 |
$name . ': Correct parameter values passed.' ); |
235 |
|
236 |
$dbh->{mock_clear_history} = 1; |
237 |
|
238 |
## DeleteHouseboundInstanceDetails |
239 |
$name = 'DeleteHouseboundInstanceDetails'; |
240 |
$sql = 'delete from housebound_instance where instanceid=?'; |
241 |
@keys = qw< instanceid >; |
242 |
@values = qw< 1 >; |
243 |
|
244 |
is( DeleteHouseboundInstanceDetails( @values ), undef, |
245 |
$name . ': Return value "undefined".'); |
246 |
|
247 |
$history = $dbh->{mock_all_history}; |
248 |
$query = $history->[0]; |
249 |
$params = $query->bound_params; |
250 |
|
251 |
is($query->statement, $sql, $name . ': Correct statement generated' ); |
252 |
is(scalar(@{$params}), scalar(@values), |
253 |
$name . ': Correct number of parameters bound.' ); |
254 |
is_deeply( $params, \@values, |
255 |
$name . ': Correct parameter values passed.' ); |
256 |
|
257 |
clean_vars(); |
258 |
|
259 |
## CheckPrevIssue |
260 |
$name = 'CheckPrevIssue'; |
261 |
$sql = 'select itemnumber from items where biblionumber=?'; |
262 |
$sql2 = 'select count(itemnumber) from old_issues' |
263 |
. ' where borrowernumber=? and itemnumber=?'; |
264 |
@keys = qw< borrowernumber biblionumber itemnumber >; |
265 |
@values = qw< 101 3576 5043 >; |
266 |
|
267 |
# 1) Prepop items with itemnumber for result |
268 |
$dbh->{mock_add_resultset} = { |
269 |
sql => $sql, |
270 |
bound_params => $keys[1], |
271 |
results => [ [ ( $keys[2] ) ], [ ( $values[2] ) ] ], |
272 |
}; |
273 |
# 2) Test if never issued before (expect 0) |
274 |
is( CheckPrevIssue( $keys[0], $keys[1] ), 0, |
275 |
$name . ': Return value "no matches".' ); |
276 |
# 3) Prepop old_issues with itemnumber and borrowernumber |
277 |
$dbh->{mock_add_resultset} = { |
278 |
sql => $sql2, |
279 |
bound_params => [ $keys[0], $keys[2] ], |
280 |
results => [ |
281 |
[ ( $keys[0], $keys[2] ) ], |
282 |
[ ( $values[0], $values[2] ) ], |
283 |
[ ( $values[0], $values[2] ) ], |
284 |
[ ( $values[0], $values[2] ) ], |
285 |
[ ( $values[0], $values[2] ) ], |
286 |
], |
287 |
}; |
288 |
# 4) Test if issued before (e.g. 7 times — expect 1) |
289 |
is( CheckPrevIssue( $keys[0], $keys[1] ), 1, |
290 |
$name . ': Return value "> 0 matches".' ); |
291 |
|
292 |
clean_vars(); |