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