|
Line 0
Link Here
|
| 0 |
- |
1 |
#!/usr/bin/perl |
|
|
2 |
|
| 3 |
use Modern::Perl; |
| 4 |
use Test::More tests => 34; |
| 5 |
|
| 6 |
use C4::Context; |
| 7 |
use Koha::AdditionalField; |
| 8 |
|
| 9 |
my $dbh = C4::Context->dbh; |
| 10 |
$dbh->{AutoCommit} = 0; |
| 11 |
$dbh->{RaiseError} = 1; |
| 12 |
|
| 13 |
$dbh->do( q|DELETE FROM additional_fields| ); |
| 14 |
$dbh->do( q|DELETE FROM additional_field_values| ); |
| 15 |
|
| 16 |
my $afs = Koha::AdditionalField->all; |
| 17 |
is( scalar( @$afs ), 0, "all: there is no additional field" ); |
| 18 |
|
| 19 |
my $af1_name = q|af1|; |
| 20 |
my $af1 = Koha::AdditionalField->new({ |
| 21 |
tablename => 'subscription', |
| 22 |
name => $af1_name, |
| 23 |
authorised_values_category => '', |
| 24 |
marcfield => '', |
| 25 |
searchable => 1, |
| 26 |
}); |
| 27 |
is ( $af1->name, $af1_name, "new: name value is kept" ); |
| 28 |
|
| 29 |
$af1->insert; |
| 30 |
like ( $af1->id, qr|^\d+$|, "new: populate id value" ); |
| 31 |
|
| 32 |
my $af2_name = q|af2|; |
| 33 |
my $af2_marcfield = q|200$a|; |
| 34 |
my $af2_searchable = 1; |
| 35 |
my $af2_tablename = q|subscription|; |
| 36 |
my $af2_avc = q|LOST|; |
| 37 |
my $af2 = Koha::AdditionalField->new({ |
| 38 |
tablename => $af2_tablename, |
| 39 |
name => $af2_name, |
| 40 |
authorised_value_category => $af2_avc, |
| 41 |
marcfield => $af2_marcfield, |
| 42 |
searchable => $af2_searchable, |
| 43 |
}); |
| 44 |
$af2->insert; |
| 45 |
my $af2_id = $af2->id; |
| 46 |
$af2 = Koha::AdditionalField->new({ id => $af2_id })->fetch; |
| 47 |
is( ref($af2) , q|Koha::AdditionalField|, "fetch: return an object" ); |
| 48 |
is( $af2->id, $af2_id, "fetch: id for af2" ); |
| 49 |
is( $af2->tablename, $af2_tablename, "fetch: tablename for af2" ); |
| 50 |
is( $af2->name, $af2_name, "fetch: name for af2" ); |
| 51 |
is( $af2->authorised_value_category, $af2_avc, "fetch: authorised_value_category for af2" ); |
| 52 |
is( $af2->marcfield, $af2_marcfield, "fetch: marcfield for af2" ); |
| 53 |
is( $af2->searchable, $af2_searchable, "fetch: searchable for af2" ); |
| 54 |
|
| 55 |
my $af3 = Koha::AdditionalField->new({ |
| 56 |
tablename => 'a_table', |
| 57 |
name => q|af3|, |
| 58 |
authorised_value_category => '', |
| 59 |
marcfield => '', |
| 60 |
searchable => 1, |
| 61 |
}); |
| 62 |
$af3->insert; |
| 63 |
|
| 64 |
my $af_common = Koha::AdditionalField->new({ |
| 65 |
tablename => 'subscription', |
| 66 |
name => q|common|, |
| 67 |
authorised_value_category => '', |
| 68 |
marcfield => '', |
| 69 |
searchable => 1, |
| 70 |
}); |
| 71 |
$af_common->insert; |
| 72 |
|
| 73 |
# update |
| 74 |
$af3->{tablename} = q|another_table|; |
| 75 |
$af3->{name} = q|af3_mod|; |
| 76 |
$af3->{authorised_value_category} = q|LOST|; |
| 77 |
$af3->{marcfield} = q|200$a|; |
| 78 |
$af3->{searchable} = 0; |
| 79 |
my $updated = $af3->update; |
| 80 |
$af3 = Koha::AdditionalField->new({ id => $af3->id })->fetch; |
| 81 |
is( $updated, 1, "update: return number of affected rows" ); |
| 82 |
is( $af3->tablename, q|a_table|, "update: tablename is *not* updated, there is no sense to copy a field to another table" ); |
| 83 |
is( $af3->name, q|af3_mod|, "update: name" ); |
| 84 |
is( $af3->authorised_value_category, q|LOST|, "update: authorised_value_category" ); |
| 85 |
is( $af3->marcfield, q|200$a|, "update: marcfield" ); |
| 86 |
is( $af3->searchable, q|0|, "update: searchable" ); |
| 87 |
|
| 88 |
# fetch all |
| 89 |
$afs = Koha::AdditionalField->all; |
| 90 |
is( scalar( @$afs ), 4, "all: got 4 additional fields" ); |
| 91 |
$afs = Koha::AdditionalField->all({tablename => 'subscription'}); |
| 92 |
is( scalar( @$afs ), 3, "all: got 3 additional fields for the subscription table" ); |
| 93 |
$afs = Koha::AdditionalField->all({searchable => 1}); |
| 94 |
is( scalar( @$afs ), 3, "all: got 3 searchable additional fields" ); |
| 95 |
$af3->delete; |
| 96 |
$afs = Koha::AdditionalField->all; |
| 97 |
is( scalar( @$afs ), 3, "all: got 3 additional fields after deleting one" ); |
| 98 |
|
| 99 |
|
| 100 |
# Testing additional field values |
| 101 |
|
| 102 |
## Creating 2 subscriptions |
| 103 |
use C4::Acquisition; |
| 104 |
use C4::Biblio; |
| 105 |
use C4::Budgets; |
| 106 |
use C4::Serials; |
| 107 |
|
| 108 |
my $booksellerid = C4::Bookseller::AddBookseller( |
| 109 |
{ |
| 110 |
name => "my vendor", |
| 111 |
address1 => "bookseller's address", |
| 112 |
phone => "0123456", |
| 113 |
active => 1 |
| 114 |
} |
| 115 |
); |
| 116 |
|
| 117 |
my ($biblionumber, $biblioitemnumber) = AddBiblio(MARC::Record->new, ''); |
| 118 |
my $budgetid; |
| 119 |
my $bpid = AddBudgetPeriod({ |
| 120 |
budget_period_startdate => '01-01-2015', |
| 121 |
budget_period_enddate => '12-31-2015', |
| 122 |
budget_description => "budget desc" |
| 123 |
}); |
| 124 |
|
| 125 |
my $budget_id = AddBudget({ |
| 126 |
budget_code => "ABCD", |
| 127 |
budget_amount => "123.132", |
| 128 |
budget_name => "Périodiques", |
| 129 |
budget_notes => "This is a note", |
| 130 |
budget_description => "Serials", |
| 131 |
budget_active => 1, |
| 132 |
budget_period_id => $bpid |
| 133 |
}); |
| 134 |
|
| 135 |
my $subscriptionid1 = NewSubscription( |
| 136 |
undef, "", undef, undef, $budget_id, $biblionumber, '01-01-2013',undef, |
| 137 |
undef, undef, undef, undef, undef, undef, undef, undef, |
| 138 |
undef, undef, undef, undef, undef, undef, undef, undef, |
| 139 |
undef, undef, undef, undef, undef, undef, undef, 1, |
| 140 |
"notes", undef, undef, undef, undef, undef, undef, 0, |
| 141 |
"intnotes", 0, undef, undef, 0, undef, '31-12-2013', |
| 142 |
); |
| 143 |
|
| 144 |
my $subscriptionid2 = NewSubscription( |
| 145 |
undef, "", undef, undef, $budget_id, $biblionumber, '01-01-2013',undef, |
| 146 |
undef, undef, undef, undef, undef, undef, undef, undef, |
| 147 |
undef, undef, undef, undef, undef, undef, undef, undef, |
| 148 |
undef, undef, undef, undef, undef, undef, undef, 1, |
| 149 |
"notes", undef, undef, undef, undef, undef, undef, 0, |
| 150 |
"intnotes", 0, undef, undef, 0, undef, '31-12-2013', |
| 151 |
); |
| 152 |
|
| 153 |
# insert |
| 154 |
my $af1_values = { |
| 155 |
$subscriptionid1 => "value_for_af1_$subscriptionid1", |
| 156 |
$subscriptionid2 => "value_for_af1_$subscriptionid2", |
| 157 |
}; |
| 158 |
$af1->{values} = $af1_values; |
| 159 |
$af1->insert_values; |
| 160 |
|
| 161 |
my $af2_values = { |
| 162 |
$subscriptionid1 => "old_value_for_af2_$subscriptionid1", |
| 163 |
$subscriptionid2 => "old_value_for_af2_$subscriptionid2", |
| 164 |
}; |
| 165 |
$af2->{values} = $af2_values; |
| 166 |
$af2->insert_values; |
| 167 |
my $new_af2_values = { |
| 168 |
$subscriptionid1 => "value_for_af2_$subscriptionid1", |
| 169 |
$subscriptionid2 => "value_for_af2_$subscriptionid2", |
| 170 |
}; |
| 171 |
$af2->{values} = $new_af2_values; |
| 172 |
$af2->insert_values; # Insert should replace old values |
| 173 |
|
| 174 |
my $common_values = { |
| 175 |
$subscriptionid1 => 'common_value', |
| 176 |
$subscriptionid2 => 'common_value', |
| 177 |
}; |
| 178 |
|
| 179 |
$af_common->{values} = $common_values; |
| 180 |
$af_common->insert_values; |
| 181 |
|
| 182 |
# fetch_values |
| 183 |
$af1 = Koha::AdditionalField->new({ id => $af1->id })->fetch; |
| 184 |
$af2 = Koha::AdditionalField->new({ id => $af2->id })->fetch; |
| 185 |
|
| 186 |
$af1->fetch_values; |
| 187 |
is_deeply ( $af1->values, {$subscriptionid1 => qq|value_for_af1_$subscriptionid1|, $subscriptionid2 => qq|value_for_af1_$subscriptionid2| }, "fetch_values: without argument, returns 2 records" ); |
| 188 |
$af1->fetch_values({ record_id => $subscriptionid1 }); |
| 189 |
is_deeply ( $af1->values, {$subscriptionid1 => qq|value_for_af1_$subscriptionid1|}, "fetch_values: values for af1 and subscription1" ); |
| 190 |
$af2->fetch_values({ record_id => $subscriptionid2 }); |
| 191 |
is_deeply ( $af2->values, {$subscriptionid2 => qq|value_for_af2_$subscriptionid2|}, "fetch_values: values for af2 and subscription2" ); |
| 192 |
|
| 193 |
# fetch_all_values |
| 194 |
eval{ |
| 195 |
$af1->fetch_all_values; |
| 196 |
}; |
| 197 |
like ( $@, qr|^BAD CALL|, 'fetch_all_values: fail if called with a blessed object' ); |
| 198 |
|
| 199 |
my $fetched_values = Koha::AdditionalField->fetch_all_values({ tablename => 'subscription' }); |
| 200 |
my $expected_values = { |
| 201 |
$subscriptionid1 => { |
| 202 |
$af1_name => qq|value_for_af1_$subscriptionid1|, |
| 203 |
$af2_name => qq|value_for_af2_$subscriptionid1|, |
| 204 |
'common' => q|common_value|, |
| 205 |
}, |
| 206 |
$subscriptionid2 => { |
| 207 |
$af1_name => qq|value_for_af1_$subscriptionid2|, |
| 208 |
$af2_name => qq|value_for_af2_$subscriptionid2|, |
| 209 |
'common' => q|common_value|, |
| 210 |
} |
| 211 |
}; |
| 212 |
is_deeply ( $fetched_values, $expected_values, "fetch_all_values: values for table subscription" ); |
| 213 |
|
| 214 |
my $expected_values_1 = { |
| 215 |
$subscriptionid1 => { |
| 216 |
$af1_name => qq|value_for_af1_$subscriptionid1|, |
| 217 |
$af2_name => qq|value_for_af2_$subscriptionid1|, |
| 218 |
common => q|common_value|, |
| 219 |
} |
| 220 |
}; |
| 221 |
my $fetched_values_1 = Koha::AdditionalField->fetch_all_values({ tablename => 'subscription', record_id => $subscriptionid1 }); |
| 222 |
is_deeply ( $fetched_values_1, $expected_values_1, "fetch_all_values: values for subscription1" ); |
| 223 |
|
| 224 |
# get_matching_record_ids |
| 225 |
eval{ |
| 226 |
$af1->get_matching_record_ids; |
| 227 |
}; |
| 228 |
like ( $@, qr|^BAD CALL|, 'get_matching_record_ids: fail if called with a blessed object' ); |
| 229 |
|
| 230 |
my $matching_record_ids = Koha::AdditionalField->get_matching_record_ids; |
| 231 |
is_deeply ( $matching_record_ids, [], "get_matching_record_ids: return [] if no argument given" ); |
| 232 |
$matching_record_ids = Koha::AdditionalField->get_matching_record_ids({ tablename => 'subscription' }); |
| 233 |
is_deeply ( $matching_record_ids, [], "get_matching_record_ids: return [] if no field given" ); |
| 234 |
|
| 235 |
my $fields = [ |
| 236 |
{ |
| 237 |
name => $af1_name, |
| 238 |
value => qq|value_for_af1_$subscriptionid1| |
| 239 |
} |
| 240 |
]; |
| 241 |
$matching_record_ids = Koha::AdditionalField->get_matching_record_ids({ tablename => 'subscription', fields => $fields }); |
| 242 |
is_deeply ( $matching_record_ids, [ $subscriptionid1 ], "get_matching_record_ids: field $af1_name: value_for_af1_$subscriptionid1 matches subscription1" ); |
| 243 |
|
| 244 |
$fields = [ |
| 245 |
{ |
| 246 |
name => $af1_name, |
| 247 |
value => qq|value_for_af1_$subscriptionid1| |
| 248 |
}, |
| 249 |
{ |
| 250 |
name => $af2_name, |
| 251 |
value => qq|value_for_af2_$subscriptionid1|, |
| 252 |
} |
| 253 |
]; |
| 254 |
$matching_record_ids = Koha::AdditionalField->get_matching_record_ids({ tablename => 'subscription', fields => $fields }); |
| 255 |
is_deeply ( $matching_record_ids, [ $subscriptionid1 ], "get_matching_record_ids: fields $af1_name:value_for_af1_$subscriptionid1 and $af2_name:value_for_af2_$subscriptionid1 match subscription1" ); |
| 256 |
|
| 257 |
$fields = [ |
| 258 |
{ |
| 259 |
name => 'common', |
| 260 |
value => q|common_value|, |
| 261 |
} |
| 262 |
]; |
| 263 |
$matching_record_ids = Koha::AdditionalField->get_matching_record_ids({ tablename => 'subscription', fields => $fields }); |
| 264 |
my $exists = grep /$subscriptionid1/, @$matching_record_ids; |
| 265 |
is ( $exists, 1, "get_matching_record_ids: field common: common_value matches subscription1" ); |
| 266 |
$exists = grep /$subscriptionid2/, @$matching_record_ids; |
| 267 |
is ( $exists, 1, "get_matching_record_ids: field common: common_value matches subscription2 too" ); |
| 268 |
$exists = grep /not_existent_id/, @$matching_record_ids; |
| 269 |
is ( $exists, 0, "get_matching_record_ids: field common: common_value does not inexistent id" ); |
| 270 |
|
| 271 |
$dbh->rollback; |