|
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(); |