|
Lines 22-40
use MARC::Record;
Link Here
|
| 22 |
|
22 |
|
| 23 |
use C4::Context; |
23 |
use C4::Context; |
| 24 |
use C4::Biblio; |
24 |
use C4::Biblio; |
| 25 |
use Koha::Database; #?? |
25 |
use Koha::Database; |
| 26 |
|
26 |
|
| 27 |
use Test::More tests => 23; |
27 |
use Test::More tests => 23; |
| 28 |
use Test::MockModule; |
28 |
use Test::MockModule; |
| 29 |
|
29 |
|
| 30 |
use Koha::MarcMergeRules; |
30 |
use Koha::MarcOverlayRules; |
| 31 |
|
31 |
|
| 32 |
use t::lib::Mocks; |
32 |
use t::lib::Mocks; |
| 33 |
|
33 |
|
| 34 |
my $schema = Koha::Database->schema; |
34 |
my $schema = Koha::Database->schema; |
| 35 |
$schema->storage->txn_begin; |
35 |
$schema->storage->txn_begin; |
| 36 |
|
36 |
|
| 37 |
t::lib::Mocks::mock_preference('MARCMergeRules', '1'); |
37 |
t::lib::Mocks::mock_preference('MARCOverlayRules', '1'); |
| 38 |
|
38 |
|
| 39 |
# Create a record |
39 |
# Create a record |
| 40 |
my $orig_record = MARC::Record->new(); |
40 |
my $orig_record = MARC::Record->new(); |
|
Lines 54-64
$incoming_record->append_fields(
Link Here
|
| 54 |
MARC::Field->new('501', '', '', 'a' => 'Two cold bottles of beer in the fridge'), # Added |
54 |
MARC::Field->new('501', '', '', 'a' => 'Two cold bottles of beer in the fridge'), # Added |
| 55 |
); |
55 |
); |
| 56 |
|
56 |
|
| 57 |
# Test default behavior when MARCMergeRules is enabled, but no rules defined (overwrite) |
57 |
# Test default behavior when MARCOverlayRules is enabled, but no rules defined (overwrite) |
| 58 |
subtest 'Record fields has been overwritten when no merge rules are defined' => sub { |
58 |
subtest 'Record fields has been overwritten when no merge rules are defined' => sub { |
| 59 |
plan tests => 4; |
59 |
plan tests => 4; |
| 60 |
|
60 |
|
| 61 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
61 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 62 |
|
62 |
|
| 63 |
my @all_fields = $merged_record->fields(); |
63 |
my @all_fields = $merged_record->fields(); |
| 64 |
|
64 |
|
|
Lines 79-85
subtest 'Record fields has been overwritten when no merge rules are defined' =>
Link Here
|
| 79 |
); |
79 |
); |
| 80 |
}; |
80 |
}; |
| 81 |
|
81 |
|
| 82 |
my $rule = Koha::MarcMergeRules->find_or_create({ |
82 |
my $rule = Koha::MarcOverlayRules->find_or_create({ |
| 83 |
tag => '*', |
83 |
tag => '*', |
| 84 |
module => 'source', |
84 |
module => 'source', |
| 85 |
filter => '*', |
85 |
filter => '*', |
|
Lines 92-98
my $rule = Koha::MarcMergeRules->find_or_create({
Link Here
|
| 92 |
subtest 'Record fields has been protected when matched merge all rule operations are set to "0"' => sub { |
92 |
subtest 'Record fields has been protected when matched merge all rule operations are set to "0"' => sub { |
| 93 |
plan tests => 3; |
93 |
plan tests => 3; |
| 94 |
|
94 |
|
| 95 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
95 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 96 |
|
96 |
|
| 97 |
my @all_fields = $merged_record->fields(); |
97 |
my @all_fields = $merged_record->fields(); |
| 98 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
98 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
|
Lines 122-128
subtest 'Only new fields has been added when add = 1, append = 0, remove = 0, de
Link Here
|
| 122 |
); |
122 |
); |
| 123 |
$rule->store(); |
123 |
$rule->store(); |
| 124 |
|
124 |
|
| 125 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
125 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 126 |
|
126 |
|
| 127 |
my @all_fields = $merged_record->fields(); |
127 |
my @all_fields = $merged_record->fields(); |
| 128 |
cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields"); |
128 |
cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields"); |
|
Lines 159-165
subtest 'Only appended fields has been added when add = 0, append = 1, remove =
Link Here
|
| 159 |
); |
159 |
); |
| 160 |
$rule->store(); |
160 |
$rule->store(); |
| 161 |
|
161 |
|
| 162 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
162 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 163 |
|
163 |
|
| 164 |
my @all_fields = $merged_record->fields(); |
164 |
my @all_fields = $merged_record->fields(); |
| 165 |
cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields"); |
165 |
cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields"); |
|
Lines 191-197
subtest 'Appended and added fields has been added when add = 1, append = 1, remo
Link Here
|
| 191 |
); |
191 |
); |
| 192 |
$rule->store(); |
192 |
$rule->store(); |
| 193 |
|
193 |
|
| 194 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
194 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 195 |
|
195 |
|
| 196 |
my @all_fields = $merged_record->fields(); |
196 |
my @all_fields = $merged_record->fields(); |
| 197 |
cmp_ok(scalar @all_fields, '==', 6, "Record has the expected number of fields"); |
197 |
cmp_ok(scalar @all_fields, '==', 6, "Record has the expected number of fields"); |
|
Lines 228-234
subtest 'Record fields has been only removed when add = 0, append = 0, remove =
Link Here
|
| 228 |
); |
228 |
); |
| 229 |
$rule->store(); |
229 |
$rule->store(); |
| 230 |
|
230 |
|
| 231 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
231 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 232 |
|
232 |
|
| 233 |
my @all_fields = $merged_record->fields(); |
233 |
my @all_fields = $merged_record->fields(); |
| 234 |
cmp_ok(scalar @all_fields, '==', 2, "Record has the expected number of fields"); |
234 |
cmp_ok(scalar @all_fields, '==', 2, "Record has the expected number of fields"); |
|
Lines 258-264
subtest 'Record fields has been added and removed when add = 1, append = 0, remo
Link Here
|
| 258 |
); |
258 |
); |
| 259 |
$rule->store(); |
259 |
$rule->store(); |
| 260 |
|
260 |
|
| 261 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
261 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 262 |
|
262 |
|
| 263 |
my @all_fields = $merged_record->fields(); |
263 |
my @all_fields = $merged_record->fields(); |
| 264 |
cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields"); |
264 |
cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields"); |
|
Lines 294-300
subtest 'Record fields has been appended and removed when add = 0, append = 1, r
Link Here
|
| 294 |
); |
294 |
); |
| 295 |
$rule->store(); |
295 |
$rule->store(); |
| 296 |
|
296 |
|
| 297 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
297 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 298 |
|
298 |
|
| 299 |
my @all_fields = $merged_record->fields(); |
299 |
my @all_fields = $merged_record->fields(); |
| 300 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
300 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
|
Lines 324-330
subtest 'Record fields has been added, appended and removed when add = 0, append
Link Here
|
| 324 |
); |
324 |
); |
| 325 |
$rule->store(); |
325 |
$rule->store(); |
| 326 |
|
326 |
|
| 327 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
327 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 328 |
|
328 |
|
| 329 |
my @all_fields = $merged_record->fields(); |
329 |
my @all_fields = $merged_record->fields(); |
| 330 |
cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields"); |
330 |
cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields"); |
|
Lines 361-367
subtest 'Record fields has been deleted when add = 0, append = 0, remove = 0, de
Link Here
|
| 361 |
); |
361 |
); |
| 362 |
$rule->store(); |
362 |
$rule->store(); |
| 363 |
|
363 |
|
| 364 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
364 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 365 |
|
365 |
|
| 366 |
my @all_fields = $merged_record->fields(); |
366 |
my @all_fields = $merged_record->fields(); |
| 367 |
cmp_ok(scalar @all_fields, '==', 2, "Record has the expected number of fields"); |
367 |
cmp_ok(scalar @all_fields, '==', 2, "Record has the expected number of fields"); |
|
Lines 386-392
subtest 'Record fields has been added and deleted when add = 1, append = 0, remo
Link Here
|
| 386 |
); |
386 |
); |
| 387 |
$rule->store(); |
387 |
$rule->store(); |
| 388 |
|
388 |
|
| 389 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
389 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 390 |
|
390 |
|
| 391 |
my @all_fields = $merged_record->fields(); |
391 |
my @all_fields = $merged_record->fields(); |
| 392 |
cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields"); |
392 |
cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields"); |
|
Lines 417-423
subtest 'Record fields has been appended and deleted when add = 0, append = 1, r
Link Here
|
| 417 |
); |
417 |
); |
| 418 |
$rule->store(); |
418 |
$rule->store(); |
| 419 |
|
419 |
|
| 420 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
420 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 421 |
|
421 |
|
| 422 |
my @all_fields = $merged_record->fields(); |
422 |
my @all_fields = $merged_record->fields(); |
| 423 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
423 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
|
Lines 442-448
subtest 'Record fields has been added, appended and deleted when add = 1, append
Link Here
|
| 442 |
); |
442 |
); |
| 443 |
$rule->store(); |
443 |
$rule->store(); |
| 444 |
|
444 |
|
| 445 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
445 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 446 |
|
446 |
|
| 447 |
my @all_fields = $merged_record->fields(); |
447 |
my @all_fields = $merged_record->fields(); |
| 448 |
cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields"); |
448 |
cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields"); |
|
Lines 473-479
subtest 'Record fields has been removed and deleted when add = 0, append = 0, re
Link Here
|
| 473 |
); |
473 |
); |
| 474 |
$rule->store(); |
474 |
$rule->store(); |
| 475 |
|
475 |
|
| 476 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
476 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 477 |
|
477 |
|
| 478 |
my @all_fields = $merged_record->fields(); |
478 |
my @all_fields = $merged_record->fields(); |
| 479 |
cmp_ok(scalar @all_fields, '==', 1, "Record has the expected number of fields"); |
479 |
cmp_ok(scalar @all_fields, '==', 1, "Record has the expected number of fields"); |
|
Lines 498-504
subtest 'Record fields has been added, removed and deleted when add = 1, append
Link Here
|
| 498 |
); |
498 |
); |
| 499 |
$rule->store(); |
499 |
$rule->store(); |
| 500 |
|
500 |
|
| 501 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
501 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 502 |
|
502 |
|
| 503 |
my @all_fields = $merged_record->fields(); |
503 |
my @all_fields = $merged_record->fields(); |
| 504 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
504 |
cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields"); |
|
Lines 529-535
subtest 'Record fields has been appended, removed and deleted when add = 0, appe
Link Here
|
| 529 |
); |
529 |
); |
| 530 |
$rule->store(); |
530 |
$rule->store(); |
| 531 |
|
531 |
|
| 532 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
532 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 533 |
|
533 |
|
| 534 |
my @all_fields = $merged_record->fields(); |
534 |
my @all_fields = $merged_record->fields(); |
| 535 |
cmp_ok(scalar @all_fields, '==', 2, "Record has the expected number of fields"); |
535 |
cmp_ok(scalar @all_fields, '==', 2, "Record has the expected number of fields"); |
|
Lines 554-560
subtest 'Record fields has been overwritten when add = 1, append = 1, remove = 1
Link Here
|
| 554 |
); |
554 |
); |
| 555 |
$rule->store(); |
555 |
$rule->store(); |
| 556 |
|
556 |
|
| 557 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
557 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 558 |
|
558 |
|
| 559 |
my @all_fields = $merged_record->fields(); |
559 |
my @all_fields = $merged_record->fields(); |
| 560 |
|
560 |
|
|
Lines 578-584
subtest 'Record fields has been overwritten when add = 1, append = 1, remove = 1
Link Here
|
| 578 |
# Test rule tag specificity |
578 |
# Test rule tag specificity |
| 579 |
|
579 |
|
| 580 |
# Protect field 500 with more specific tag value |
580 |
# Protect field 500 with more specific tag value |
| 581 |
my $skip_all_rule = Koha::MarcMergeRules->find_or_create({ |
581 |
my $skip_all_rule = Koha::MarcOverlayRules->find_or_create({ |
| 582 |
tag => '500', |
582 |
tag => '500', |
| 583 |
module => 'source', |
583 |
module => 'source', |
| 584 |
filter => '*', |
584 |
filter => '*', |
|
Lines 591-597
my $skip_all_rule = Koha::MarcMergeRules->find_or_create({
Link Here
|
| 591 |
subtest '"500" field has been protected when rule matching on tag "500" is add = 0, append = 0, remove = 0, delete = 0' => sub { |
591 |
subtest '"500" field has been protected when rule matching on tag "500" is add = 0, append = 0, remove = 0, delete = 0' => sub { |
| 592 |
plan tests => 4; |
592 |
plan tests => 4; |
| 593 |
|
593 |
|
| 594 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
594 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 595 |
|
595 |
|
| 596 |
my @all_fields = $merged_record->fields(); |
596 |
my @all_fields = $merged_record->fields(); |
| 597 |
|
597 |
|
|
Lines 626-632
subtest '"5XX" fields has been protected when rule matching on regexp "5\d{2}" i
Link Here
|
| 626 |
); |
626 |
); |
| 627 |
$skip_all_rule->store(); |
627 |
$skip_all_rule->store(); |
| 628 |
|
628 |
|
| 629 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
629 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 630 |
|
630 |
|
| 631 |
my @all_fields = $merged_record->fields(); |
631 |
my @all_fields = $merged_record->fields(); |
| 632 |
|
632 |
|
|
Lines 655-661
subtest 'Record fields has been overwritten when non wild card rule with filter
Link Here
|
| 655 |
); |
655 |
); |
| 656 |
$rule->store(); |
656 |
$rule->store(); |
| 657 |
|
657 |
|
| 658 |
my $merged_record = Koha::MarcMergeRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
658 |
my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); |
| 659 |
|
659 |
|
| 660 |
my @all_fields = $merged_record->fields(); |
660 |
my @all_fields = $merged_record->fields(); |
| 661 |
|
661 |
|
|
Lines 679-685
subtest 'Record fields has been overwritten when non wild card rule with filter
Link Here
|
| 679 |
subtest 'An exception is thrown when append = 1, remove = 0 is set for control field rule' => sub { |
679 |
subtest 'An exception is thrown when append = 1, remove = 0 is set for control field rule' => sub { |
| 680 |
plan tests => 2; |
680 |
plan tests => 2; |
| 681 |
my $exception = try { |
681 |
my $exception = try { |
| 682 |
Koha::MarcMergeRules->validate({ |
682 |
Koha::MarcOverlayRules->validate({ |
| 683 |
'tag' => '008', |
683 |
'tag' => '008', |
| 684 |
'append' => 1, |
684 |
'append' => 1, |
| 685 |
'remove' => 0, |
685 |
'remove' => 0, |
|
Lines 689-702
subtest 'An exception is thrown when append = 1, remove = 0 is set for control f
Link Here
|
| 689 |
return $_; |
689 |
return $_; |
| 690 |
}; |
690 |
}; |
| 691 |
ok(defined $exception, "Exception was caught"); |
691 |
ok(defined $exception, "Exception was caught"); |
| 692 |
ok($exception->isa('Koha::Exceptions::MarcMergeRule::InvalidControlFieldActions'), "Exception is of correct class"); |
692 |
ok($exception->isa('Koha::Exceptions::MarcOverlayRule::InvalidControlFieldActions'), "Exception is of correct class"); |
| 693 |
}; |
693 |
}; |
| 694 |
|
694 |
|
| 695 |
subtest 'An exception is thrown when rule tag is set to invalid regexp' => sub { |
695 |
subtest 'An exception is thrown when rule tag is set to invalid regexp' => sub { |
| 696 |
plan tests => 2; |
696 |
plan tests => 2; |
| 697 |
|
697 |
|
| 698 |
my $exception = try { |
698 |
my $exception = try { |
| 699 |
Koha::MarcMergeRules->validate({ |
699 |
Koha::MarcOverlayRules->validate({ |
| 700 |
'tag' => '**' |
700 |
'tag' => '**' |
| 701 |
}); |
701 |
}); |
| 702 |
} |
702 |
} |
|
Lines 704-710
subtest 'An exception is thrown when rule tag is set to invalid regexp' => sub {
Link Here
|
| 704 |
return $_; |
704 |
return $_; |
| 705 |
}; |
705 |
}; |
| 706 |
ok(defined $exception, "Exception was caught"); |
706 |
ok(defined $exception, "Exception was caught"); |
| 707 |
ok($exception->isa('Koha::Exceptions::MarcMergeRule::InvalidTagRegExp'), "Exception is of correct class"); |
707 |
ok($exception->isa('Koha::Exceptions::MarcOverlayRule::InvalidTagRegExp'), "Exception is of correct class"); |
| 708 |
}; |
708 |
}; |
| 709 |
|
709 |
|
| 710 |
$skip_all_rule->delete(); |
710 |
$skip_all_rule->delete(); |
|
Lines 775-779
subtest 'context option in ModBiblio is handled correctly' => sub {
Link Here
|
| 775 |
$rule->delete(); |
775 |
$rule->delete(); |
| 776 |
|
776 |
|
| 777 |
$schema->storage->txn_rollback; |
777 |
$schema->storage->txn_rollback; |
| 778 |
|
|
|
| 779 |
1; |
| 780 |
- |