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