Line 0
Link Here
|
0 |
- |
1 |
#!/usr/bin/perl |
|
|
2 |
|
3 |
# This file is part of Koha. |
4 |
# |
5 |
# Koha is free software; you can redistribute it and/or modify it |
6 |
# under the terms of the GNU General Public License as published by |
7 |
# the Free Software Foundation; either version 3 of the License, or |
8 |
# (at your option) any later version. |
9 |
# |
10 |
# Koha is distributed in the hope that it will be useful, but |
11 |
# WITHOUT ANY WARRANTY; without even the implied warranty of |
12 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 |
# GNU General Public License for more details. |
14 |
# |
15 |
# You should have received a copy of the GNU General Public License |
16 |
# along with Koha; if not, see <http://www.gnu.org/licenses>. |
17 |
|
18 |
use Modern::Perl; |
19 |
|
20 |
use MARC::Record; |
21 |
|
22 |
use C4::Context; |
23 |
use C4::Biblio; |
24 |
use Koha::Database; #?? |
25 |
|
26 |
use Test::More tests => 20; |
27 |
use Test::MockModule; |
28 |
|
29 |
use Koha::MarcMergeRules; |
30 |
use Koha::MarcMergeRulesModules; |
31 |
|
32 |
use t::lib::Mocks; |
33 |
|
34 |
my $schema = Koha::Database->schema; |
35 |
$schema->storage->txn_begin; |
36 |
|
37 |
t::lib::Mocks::mock_preference('MARCMergeRules', '1'); |
38 |
|
39 |
# Create a record |
40 |
my $orig_record = MARC::Record->new(); |
41 |
$orig_record->append_fields ( |
42 |
MARC::Field->new('250', '','', 'a' => '250 bottles of beer on the wall'), |
43 |
MARC::Field->new('250', '','', 'a' => '256 bottles of beer on the wall'), |
44 |
MARC::Field->new('500', '','', 'a' => 'One bottle of beer in the fridge'), |
45 |
); |
46 |
|
47 |
# Order modules by specificity and get first two |
48 |
my $modules_rs = Koha::MarcMergeRulesModules->search(undef, { order_by => { -desc => 'specificity' } }); |
49 |
my @modules; |
50 |
push @modules, $modules_rs->next; |
51 |
push @modules, $modules_rs->next; |
52 |
|
53 |
|
54 |
my $incoming_record = MARC::Record->new(); |
55 |
$incoming_record->append_fields( |
56 |
MARC::Field->new('250', '', '', 'a' => '256 bottles of beer on the wall'), # Unchanged |
57 |
MARC::Field->new('250', '', '', 'a' => '251 bottles of beer on the wall'), # Appended |
58 |
# MARC::Field->new('250', '', '', 'a' => '250 bottles of beer on the wall'), # Removed |
59 |
# MARC::Field->new('500', '', '', 'a' => 'One bottle of beer in the fridge'), # Deleted |
60 |
MARC::Field->new('501', '', '', 'a' => 'One cold bottle of beer in the fridge'), # Added |
61 |
MARC::Field->new('501', '', '', 'a' => 'Two cold bottles of beer in the fridge'), # Added |
62 |
); |
63 |
|
64 |
# Test default behavior when MARCMergeRules is enabled, but no rules defined (overwrite) |
65 |
subtest 'Record fields has been overwritten when no merge rules are defined' => sub { |
66 |
plan tests => 4; |
67 |
|
68 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
69 |
|
70 |
my @all_fields = $merged_record->fields(); |
71 |
|
72 |
cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields"); |
73 |
is_deeply( |
74 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
75 |
['256 bottles of beer on the wall', '251 bottles of beer on the wall'], |
76 |
'"250" fields has been appended and removed' |
77 |
); |
78 |
|
79 |
my @fields = $merged_record->field('500'); |
80 |
cmp_ok(scalar @fields, '==', 0, '"500" field has been deleted'); |
81 |
|
82 |
is_deeply( |
83 |
[map { $_->subfield('a') } $merged_record->field('501') ], |
84 |
['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'], |
85 |
'"501" fields has been added' |
86 |
); |
87 |
}; |
88 |
|
89 |
my $rule = Koha::MarcMergeRules->find_or_create({ |
90 |
tag => '*', |
91 |
module => $modules[0]->id, |
92 |
filter => '*', |
93 |
add => 0, |
94 |
append => 0, |
95 |
remove => 0, |
96 |
delete => 0 |
97 |
}); |
98 |
|
99 |
subtest 'Record fields has been protected when matched merge all rule operations are set to "0"' => sub { |
100 |
plan tests => 3; |
101 |
|
102 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
103 |
|
104 |
my @all_fields = $merged_record->fields(); |
105 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
106 |
|
107 |
is_deeply( |
108 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
109 |
['250 bottles of beer on the wall', '256 bottles of beer on the wall'], |
110 |
'"250" fields has retained their original value' |
111 |
); |
112 |
is_deeply( |
113 |
[map { $_->subfield('a') } $merged_record->field('500') ], |
114 |
['One bottle of beer in the fridge'], |
115 |
'"500" field has retained it\'s original value' |
116 |
); |
117 |
}; |
118 |
|
119 |
|
120 |
subtest 'Only new fields has been added when add = 1, append = 0, remove = 0, delete = 0' => sub { |
121 |
plan tests => 4; |
122 |
|
123 |
$rule->set( |
124 |
{ |
125 |
'add' => 1, |
126 |
'append' => 0, |
127 |
'remove' => 0, |
128 |
'delete' => 0, |
129 |
} |
130 |
); |
131 |
$rule->store(); |
132 |
|
133 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
134 |
|
135 |
my @all_fields = $merged_record->fields(); |
136 |
cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields"); |
137 |
|
138 |
is_deeply( |
139 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
140 |
['250 bottles of beer on the wall', '256 bottles of beer on the wall'], |
141 |
'"250" fields retain their original value' |
142 |
); |
143 |
|
144 |
is_deeply( |
145 |
[map { $_->subfield('a') } $merged_record->field('500') ], |
146 |
['One bottle of beer in the fridge'], |
147 |
'"500" field retain it\'s original value' |
148 |
); |
149 |
|
150 |
is_deeply( |
151 |
[map { $_->subfield('a') } $merged_record->field('501') ], |
152 |
['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'], |
153 |
'"501" fields has been added' |
154 |
); |
155 |
}; |
156 |
|
157 |
subtest 'Only appended fields has been added when add = 0, append = 1, remove = 0, delete = 0' => sub { |
158 |
plan tests => 3; |
159 |
|
160 |
$rule->set( |
161 |
{ |
162 |
'add' => 0, |
163 |
'append' => 1, |
164 |
'remove' => 0, |
165 |
'delete' => 0, |
166 |
} |
167 |
); |
168 |
$rule->store(); |
169 |
|
170 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
171 |
|
172 |
my @all_fields = $merged_record->fields(); |
173 |
cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields"); |
174 |
|
175 |
is_deeply( |
176 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
177 |
['250 bottles of beer on the wall', '256 bottles of beer on the wall', '251 bottles of beer on the wall'], |
178 |
'"251" field has been appended' |
179 |
); |
180 |
|
181 |
is_deeply( |
182 |
[map { $_->subfield('a') } $merged_record->field('500') ], |
183 |
['One bottle of beer in the fridge'], |
184 |
'"500" field has retained it\'s original value' |
185 |
); |
186 |
|
187 |
}; |
188 |
|
189 |
subtest 'Appended and added fields has been added when add = 1, append = 1, remove = 0, delete = 0' => sub { |
190 |
plan tests => 4; |
191 |
|
192 |
$rule->set( |
193 |
{ |
194 |
'add' => 1, |
195 |
'append' => 1, |
196 |
'remove' => 0, |
197 |
'delete' => 0, |
198 |
} |
199 |
); |
200 |
$rule->store(); |
201 |
|
202 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
203 |
|
204 |
my @all_fields = $merged_record->fields(); |
205 |
cmp_ok(scalar @all_fields, '==', 6, "Record has the expected number of fields"); |
206 |
|
207 |
is_deeply( |
208 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
209 |
['250 bottles of beer on the wall', '256 bottles of beer on the wall', '251 bottles of beer on the wall'], |
210 |
'"251" field has been appended' |
211 |
); |
212 |
|
213 |
is_deeply( |
214 |
[map { $_->subfield('a') } $merged_record->field('500') ], |
215 |
['One bottle of beer in the fridge'], |
216 |
'"500" field has retained it\'s original value' |
217 |
); |
218 |
|
219 |
is_deeply( |
220 |
[map { $_->subfield('a') } $merged_record->field('501') ], |
221 |
['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'], |
222 |
'"501" fields has been added' |
223 |
); |
224 |
}; |
225 |
|
226 |
subtest 'Record fields has been only removed when add = 0, append = 0, remove = 1, delete = 0' => sub { |
227 |
plan tests => 3; |
228 |
|
229 |
$rule->set( |
230 |
{ |
231 |
'add' => 0, |
232 |
'append' => 0, |
233 |
'remove' => 1, |
234 |
'delete' => 0, |
235 |
} |
236 |
); |
237 |
$rule->store(); |
238 |
|
239 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
240 |
|
241 |
my @all_fields = $merged_record->fields(); |
242 |
cmp_ok(scalar @all_fields, '==', 2, "Record has the expected number of fields"); |
243 |
|
244 |
is_deeply( |
245 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
246 |
['256 bottles of beer on the wall'], |
247 |
'"250" field has been removed' |
248 |
); |
249 |
is_deeply( |
250 |
[map { $_->subfield('a') } $merged_record->field('500') ], |
251 |
['One bottle of beer in the fridge'], |
252 |
'"500" field has retained it\'s original value' |
253 |
); |
254 |
}; |
255 |
|
256 |
subtest 'Record fields has been added and removed when add = 1, append = 0, remove = 1, delete = 0' => sub { |
257 |
plan tests => 4; |
258 |
|
259 |
$rule->set( |
260 |
{ |
261 |
'add' => 1, |
262 |
'append' => 0, |
263 |
'remove' => 1, |
264 |
'delete' => 0, |
265 |
} |
266 |
); |
267 |
$rule->store(); |
268 |
|
269 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
270 |
|
271 |
my @all_fields = $merged_record->fields(); |
272 |
cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields"); |
273 |
|
274 |
is_deeply( |
275 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
276 |
['256 bottles of beer on the wall'], |
277 |
'"250" field has been removed' |
278 |
); |
279 |
is_deeply( |
280 |
[map { $_->subfield('a') } $merged_record->field('500') ], |
281 |
['One bottle of beer in the fridge'], |
282 |
'"500" field has retained it\'s original value' |
283 |
); |
284 |
|
285 |
is_deeply( |
286 |
[map { $_->subfield('a') } $merged_record->field('501') ], |
287 |
['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'], |
288 |
'"501" fields has been added' |
289 |
); |
290 |
}; |
291 |
|
292 |
subtest 'Record fields has been appended and removed when add = 0, append = 1, remove = 1, delete = 0' => sub { |
293 |
plan tests => 3; |
294 |
|
295 |
$rule->set( |
296 |
{ |
297 |
'add' => 0, |
298 |
'append' => 1, |
299 |
'remove' => 1, |
300 |
'delete' => 0, |
301 |
} |
302 |
); |
303 |
$rule->store(); |
304 |
|
305 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
306 |
|
307 |
my @all_fields = $merged_record->fields(); |
308 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
309 |
|
310 |
is_deeply( |
311 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
312 |
['256 bottles of beer on the wall', '251 bottles of beer on the wall'], |
313 |
'"250" fields has been appended and removed' |
314 |
); |
315 |
is_deeply( |
316 |
[map { $_->subfield('a') } $merged_record->field('500') ], |
317 |
['One bottle of beer in the fridge'], |
318 |
'"500" field has retained it\'s original value' |
319 |
); |
320 |
}; |
321 |
|
322 |
subtest 'Record fields has been added, appended and removed when add = 0, append = 1, remove = 1, delete = 0' => sub { |
323 |
plan tests => 4; |
324 |
|
325 |
$rule->set( |
326 |
{ |
327 |
'add' => 1, |
328 |
'append' => 1, |
329 |
'remove' => 1, |
330 |
'delete' => 0, |
331 |
} |
332 |
); |
333 |
$rule->store(); |
334 |
|
335 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
336 |
|
337 |
my @all_fields = $merged_record->fields(); |
338 |
cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields"); |
339 |
|
340 |
is_deeply( |
341 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
342 |
['256 bottles of beer on the wall', '251 bottles of beer on the wall'], |
343 |
'"250" fields has been appended and removed' |
344 |
); |
345 |
|
346 |
is_deeply( |
347 |
[map { $_->subfield('a') } $merged_record->field('500') ], |
348 |
['One bottle of beer in the fridge'], |
349 |
'"500" field has retained it\'s original value' |
350 |
); |
351 |
|
352 |
is_deeply( |
353 |
[map { $_->subfield('a') } $merged_record->field('501') ], |
354 |
['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'], |
355 |
'"501" fields has been added' |
356 |
); |
357 |
}; |
358 |
|
359 |
subtest 'Record fields has been deleted when add = 0, append = 0, remove = 0, delete = 1' => sub { |
360 |
plan tests => 2; |
361 |
|
362 |
$rule->set( |
363 |
{ |
364 |
'add' => 0, |
365 |
'append' => 0, |
366 |
'remove' => 0, |
367 |
'delete' => 1, |
368 |
} |
369 |
); |
370 |
$rule->store(); |
371 |
|
372 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
373 |
|
374 |
my @all_fields = $merged_record->fields(); |
375 |
cmp_ok(scalar @all_fields, '==', 2, "Record has the expected number of fields"); |
376 |
|
377 |
is_deeply( |
378 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
379 |
['250 bottles of beer on the wall', '256 bottles of beer on the wall'], |
380 |
'"250" fields has retained their original value' |
381 |
); |
382 |
}; |
383 |
|
384 |
subtest 'Record fields has been added and deleted when add = 1, append = 0, remove = 0, delete = 1' => sub { |
385 |
plan tests => 3; |
386 |
|
387 |
$rule->set( |
388 |
{ |
389 |
'add' => 1, |
390 |
'append' => 0, |
391 |
'remove' => 0, |
392 |
'delete' => 1, |
393 |
} |
394 |
); |
395 |
$rule->store(); |
396 |
|
397 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
398 |
|
399 |
my @all_fields = $merged_record->fields(); |
400 |
cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields"); |
401 |
|
402 |
is_deeply( |
403 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
404 |
['250 bottles of beer on the wall', '256 bottles of beer on the wall'], |
405 |
'"250" fields has retained their original value' |
406 |
); |
407 |
|
408 |
is_deeply( |
409 |
[map { $_->subfield('a') } $merged_record->field('501') ], |
410 |
['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'], |
411 |
'"501" fields has been added' |
412 |
); |
413 |
}; |
414 |
|
415 |
subtest 'Record fields has been appended and deleted when add = 0, append = 1, remove = 0, delete = 1' => sub { |
416 |
plan tests => 2; |
417 |
|
418 |
$rule->set( |
419 |
{ |
420 |
'add' => 0, |
421 |
'append' => 1, |
422 |
'remove' => 0, |
423 |
'delete' => 1, |
424 |
} |
425 |
); |
426 |
$rule->store(); |
427 |
|
428 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
429 |
|
430 |
my @all_fields = $merged_record->fields(); |
431 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
432 |
|
433 |
is_deeply( |
434 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
435 |
['250 bottles of beer on the wall', '256 bottles of beer on the wall', '251 bottles of beer on the wall'], |
436 |
'"250" field has been appended' |
437 |
); |
438 |
}; |
439 |
|
440 |
subtest 'Record fields has been added, appended and deleted when add = 1, append = 1, remove = 0, delete = 1' => sub { |
441 |
plan tests => 3; |
442 |
|
443 |
$rule->set( |
444 |
{ |
445 |
'add' => 1, |
446 |
'append' => 1, |
447 |
'remove' => 0, |
448 |
'delete' => 1, |
449 |
} |
450 |
); |
451 |
$rule->store(); |
452 |
|
453 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
454 |
|
455 |
my @all_fields = $merged_record->fields(); |
456 |
cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields"); |
457 |
|
458 |
is_deeply( |
459 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
460 |
['250 bottles of beer on the wall', '256 bottles of beer on the wall', '251 bottles of beer on the wall'], |
461 |
'"250" field has been appended' |
462 |
); |
463 |
|
464 |
is_deeply( |
465 |
[map { $_->subfield('a') } $merged_record->field('501') ], |
466 |
['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'], |
467 |
'"501" fields has been added' |
468 |
); |
469 |
}; |
470 |
|
471 |
subtest 'Record fields has been removed and deleted when add = 0, append = 0, remove = 1, delete = 1' => sub { |
472 |
plan tests => 2; |
473 |
|
474 |
$rule->set( |
475 |
{ |
476 |
'add' => 0, |
477 |
'append' => 0, |
478 |
'remove' => 1, |
479 |
'delete' => 1, |
480 |
} |
481 |
); |
482 |
$rule->store(); |
483 |
|
484 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
485 |
|
486 |
my @all_fields = $merged_record->fields(); |
487 |
cmp_ok(scalar @all_fields, '==', 1, "Record has the expected number of fields"); |
488 |
|
489 |
is_deeply( |
490 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
491 |
['256 bottles of beer on the wall'], |
492 |
'"250" field has been removed' |
493 |
); |
494 |
}; |
495 |
|
496 |
subtest 'Record fields has been added, removed and deleted when add = 1, append = 0, remove = 1, delete = 1' => sub { |
497 |
plan tests => 3; |
498 |
|
499 |
$rule->set( |
500 |
{ |
501 |
'add' => 1, |
502 |
'append' => 0, |
503 |
'remove' => 1, |
504 |
'delete' => 1, |
505 |
} |
506 |
); |
507 |
$rule->store(); |
508 |
|
509 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
510 |
|
511 |
my @all_fields = $merged_record->fields(); |
512 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
513 |
|
514 |
is_deeply( |
515 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
516 |
['256 bottles of beer on the wall'], |
517 |
'"250" field has been removed' |
518 |
); |
519 |
|
520 |
is_deeply( |
521 |
[map { $_->subfield('a') } $merged_record->field('501') ], |
522 |
['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'], |
523 |
'"501" fields has been added' |
524 |
); |
525 |
}; |
526 |
|
527 |
subtest 'Record fields has been appended, removed and deleted when add = 0, append = 1, remove = 1, delete = 1' => sub { |
528 |
plan tests => 2; |
529 |
|
530 |
$rule->set( |
531 |
{ |
532 |
'add' => 0, |
533 |
'append' => 1, |
534 |
'remove' => 1, |
535 |
'delete' => 1, |
536 |
} |
537 |
); |
538 |
$rule->store(); |
539 |
|
540 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
541 |
|
542 |
my @all_fields = $merged_record->fields(); |
543 |
cmp_ok(scalar @all_fields, '==', 2, "Record has the expected number of fields"); |
544 |
|
545 |
is_deeply( |
546 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
547 |
['256 bottles of beer on the wall', '251 bottles of beer on the wall'], |
548 |
'"250" fields has been appended and removed' |
549 |
); |
550 |
}; |
551 |
|
552 |
subtest 'Record fields has been overwritten when add = 1, append = 1, remove = 1, delete = 1' => sub { |
553 |
plan tests => 4; |
554 |
|
555 |
$rule->set( |
556 |
{ |
557 |
'add' => 1, |
558 |
'append' => 1, |
559 |
'remove' => 1, |
560 |
'delete' => 1, |
561 |
} |
562 |
); |
563 |
$rule->store(); |
564 |
|
565 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
566 |
|
567 |
my @all_fields = $merged_record->fields(); |
568 |
|
569 |
cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields"); |
570 |
is_deeply( |
571 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
572 |
['256 bottles of beer on the wall', '251 bottles of beer on the wall'], |
573 |
'"250" fields has been appended and removed' |
574 |
); |
575 |
|
576 |
my @fields = $merged_record->field('500'); |
577 |
cmp_ok(scalar @fields, '==', 0, '"500" field has been deleted'); |
578 |
|
579 |
is_deeply( |
580 |
[map { $_->subfield('a') } $merged_record->field('501') ], |
581 |
['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'], |
582 |
'"501" fields has been added' |
583 |
); |
584 |
}; |
585 |
|
586 |
# Test rule tag specificity |
587 |
|
588 |
# Protect field 500 with more specific tag value |
589 |
my $skip_all_rule = Koha::MarcMergeRules->find_or_create({ |
590 |
tag => '500', |
591 |
module => $modules[0]->id, |
592 |
filter => '*', |
593 |
add => 0, |
594 |
append => 0, |
595 |
remove => 0, |
596 |
delete => 0 |
597 |
}); |
598 |
|
599 |
subtest '"500" field has been protected when rule matching on tag "500" is add = 0, append = 0, remove = 0, delete = 0' => sub { |
600 |
plan tests => 4; |
601 |
|
602 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
603 |
|
604 |
my @all_fields = $merged_record->fields(); |
605 |
|
606 |
cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields"); |
607 |
is_deeply( |
608 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
609 |
['256 bottles of beer on the wall', '251 bottles of beer on the wall'], |
610 |
'"250" fields has been appended and removed' |
611 |
); |
612 |
|
613 |
is_deeply( |
614 |
[map { $_->subfield('a') } $merged_record->field('500') ], |
615 |
['One bottle of beer in the fridge'], |
616 |
'"500" field has retained it\'s original value' |
617 |
); |
618 |
|
619 |
is_deeply( |
620 |
[map { $_->subfield('a') } $merged_record->field('501') ], |
621 |
['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'], |
622 |
'"501" fields has been added' |
623 |
); |
624 |
}; |
625 |
|
626 |
# Test regexp matching |
627 |
subtest '"5XX" fields has been protected when rule matching on regexp "5\d{2}" is add = 0, append = 0, remove = 0, delete = 0' => sub { |
628 |
plan tests => 3; |
629 |
|
630 |
$skip_all_rule->set( |
631 |
{ |
632 |
'tag' => '5\d{2}', |
633 |
} |
634 |
); |
635 |
$skip_all_rule->store(); |
636 |
|
637 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
638 |
|
639 |
my @all_fields = $merged_record->fields(); |
640 |
|
641 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
642 |
is_deeply( |
643 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
644 |
['256 bottles of beer on the wall', '251 bottles of beer on the wall'], |
645 |
'"250" fields has been appended and removed' |
646 |
); |
647 |
|
648 |
is_deeply( |
649 |
[map { $_->subfield('a') } $merged_record->field('500') ], |
650 |
['One bottle of beer in the fridge'], |
651 |
'"500" field has retained it\'s original value' |
652 |
); |
653 |
}; |
654 |
|
655 |
# Test module specificity, the 0 all rule should no longer be included in set of applied rules |
656 |
subtest 'Record fields has been overwritten when non wild card rule with filter match is add = 1, append = 1, remove = 1, delete = 1' => sub { |
657 |
plan tests => 4; |
658 |
|
659 |
$rule->set( |
660 |
{ |
661 |
'filter' => 'test', |
662 |
} |
663 |
); |
664 |
$rule->store(); |
665 |
|
666 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { $modules[0]->name => 'test' }); |
667 |
|
668 |
my @all_fields = $merged_record->fields(); |
669 |
|
670 |
cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields"); |
671 |
is_deeply( |
672 |
[map { $_->subfield('a') } $merged_record->field('250') ], |
673 |
['256 bottles of beer on the wall', '251 bottles of beer on the wall'], |
674 |
'"250" fields has been appended and removed' |
675 |
); |
676 |
|
677 |
my @fields = $merged_record->field('500'); |
678 |
cmp_ok(scalar @fields, '==', 0, '"500" field has been deleted'); |
679 |
|
680 |
is_deeply( |
681 |
[map { $_->subfield('a') } $merged_record->field('501') ], |
682 |
['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'], |
683 |
'"501" fields has been added' |
684 |
); |
685 |
}; |
686 |
|
687 |
$schema->storage->txn_rollback; |
688 |
|
689 |
1; |