From e496d1c6a7c6d50a9efcd609447e22ae4e4d113d Mon Sep 17 00:00:00 2001 From: David Gustafsson Date: Thu, 16 Nov 2023 18:24:07 +0100 Subject: [PATCH] Bug 33268: Add tests for context module priority Signed-off-by: David Nind Signed-off-by: Tomas Cohen Arazi Edit: tidied inline (tcohen) Signed-off-by: Martin Renvoize Signed-off-by: Victor Grousset/tuxayo --- t/db_dependent/Biblio/MarcOverlayRules.t | 189 +++++++++++++++-------- 1 file changed, 123 insertions(+), 66 deletions(-) diff --git a/t/db_dependent/Biblio/MarcOverlayRules.t b/t/db_dependent/Biblio/MarcOverlayRules.t index 4156907645..1101a7e95d 100755 --- a/t/db_dependent/Biblio/MarcOverlayRules.t +++ b/t/db_dependent/Biblio/MarcOverlayRules.t @@ -66,14 +66,16 @@ my $orig_record = build_record([ [ '500', 'a', 'One bottle of beer in the fridge' ], ]); -my $incoming_record = build_record([ - ['250', 'a', '256 bottles of beer on the wall'], # Unchanged - ['250', 'a', '251 bottles of beer on the wall'], # Appended - #['250', 'a', '250 bottles of beer on the wall'], # Removed - #['500', 'a', 'One bottle of beer in the fridge'], # Deleted - ['501', 'a', 'One cold bottle of beer in the fridge'], # Added - ['501', 'a', 'Two cold bottles of beer in the fridge'], # Added -]); +my $incoming_record = build_record( + [ + [ '250', 'a', '256 bottles of beer on the wall' ], # Unchanged + [ '250', 'a', '251 bottles of beer on the wall' ], # Appended + # ['250', 'a', '250 bottles of beer on the wall'], # Removed + # ['500', 'a', 'One bottle of beer in the fridge'], # Deleted + [ '501', 'a', 'One cold bottle of beer in the fridge' ], # Added + [ '501', 'a', 'Two cold bottles of beer in the fridge' ], # Added + ] +); # Test default behavior when MARCOverlayRules is enabled, but no rules defined (overwrite) subtest 'No rule defined' => sub { @@ -684,14 +686,14 @@ $skip_all_rule->delete(); # Test module filter specificity subtest 'Module filter precedence tests' => sub { - plan tests => 7; + plan tests => 9; $rule->set( { - tag => '*', + tag => '*', module => 'source', filter => '*', - add => 0, + add => 0, append => 0, remove => 0, delete => 0, @@ -700,10 +702,10 @@ subtest 'Module filter precedence tests' => sub { my $matching_filter_rule_overwrite = Koha::MarcOverlayRules->find_or_create( { - tag => '*', + tag => '*', module => 'source', filter => 'test', - add => 1, + add => 1, append => 1, remove => 1, delete => 1 @@ -713,7 +715,7 @@ subtest 'Module filter precedence tests' => sub { # Current rules: # source: *, tag: *, add: 0, append: 0, remove: 0, delete: 0 # source: test, tag: *, add: 1, append: 1, remove: 1, delete: 1 - my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); + my $merged_record = Koha::MarcOverlayRules->merge_records( $orig_record, $incoming_record, { 'source' => 'test' } ); is( $merged_record->as_formatted, @@ -721,16 +723,12 @@ subtest 'Module filter precedence tests' => sub { 'Non wildcard rule with wildcard tag matches and overrides wildcard rule with wildcard tag' ); - $rule->set( - { - tag => '5\d{2}' - } - )->store(); + $rule->set( { tag => '5\d{2}' } )->store(); # Current rules: # source: *, tag: 5\d{2}, add: 0, append: 0, remove: 0, delete: 0 # source: test, tag: *, add: 1, append: 1, remove: 1, delete: 1 - $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); + $merged_record = Koha::MarcOverlayRules->merge_records( $orig_record, $incoming_record, { 'source' => 'test' } ); is( $merged_record->as_formatted, @@ -738,16 +736,12 @@ subtest 'Module filter precedence tests' => sub { 'Non wildcard rule with wildcard tag matches and overrides wildcard rules with regexp tags' ); - $rule->set( - { - tag => '501' - } - )->store(); + $rule->set( { tag => '501' } )->store(); # Current rules: # source: *, tag: 501, add: 0, append: 0, remove: 0, delete: 0 # source: test, tag: *, add: 1, append: 1, remove: 1, delete: 1 - $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); + $merged_record = Koha::MarcOverlayRules->merge_records( $orig_record, $incoming_record, { 'source' => 'test' } ); is( $merged_record->as_formatted, @@ -755,44 +749,38 @@ subtest 'Module filter precedence tests' => sub { 'Non wildcard rule with wildcard tag matches and overrides wildcard rules with specific tags' ); - $rule->set( - { - tag => '*' - } - )->store(); + $rule->set( { tag => '*' } )->store(); my $wildcard_filter_rule_overwrite = Koha::MarcOverlayRules->find_or_create( { - tag => '501', + tag => '501', module => 'source', filter => '*', - add => 1, + add => 1, append => 1, remove => 1, delete => 1, } ); - $matching_filter_rule_overwrite->set( - { - tag => '250' - } - )->store(); + $matching_filter_rule_overwrite->set( { tag => '250' } )->store(); # Current rules: # source: *, tag: *, add: 0, append: 0, remove: 0, delete: 0 # source: *, tag: 501, add: 1, append: 1, remove: 1, delete: 1 # source: test, tag: 250, add: 1, append: 1, remove: 1, delete: 1 - $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); + $merged_record = Koha::MarcOverlayRules->merge_records( $orig_record, $incoming_record, { 'source' => 'test' } ); - my $expected_record = build_record([ - ['250', 'a', '256 bottles of beer on the wall'], # Unchanged - ['250', 'a', '251 bottles of beer on the wall'], # Appended - #['250', 'a', '250 bottles of beer on the wall'], # Removed - ['500', 'a', 'One bottle of beer in the fridge'], # Protected - ['501', 'a', 'One cold bottle of beer in the fridge'], # Added - ['501', 'a', 'Two cold bottles of beer in the fridge'], # Added - ]); + my $expected_record = build_record( + [ + [ '250', 'a', '256 bottles of beer on the wall' ], # Unchanged + [ '250', 'a', '251 bottles of beer on the wall' ], # Appended + #['250', 'a', '250 bottles of beer on the wall'], # Removed + [ '500', 'a', 'One bottle of beer in the fridge' ], # Protected + [ '501', 'a', 'One cold bottle of beer in the fridge' ], # Added + [ '501', 'a', 'Two cold bottles of beer in the fridge' ], # Added + ] + ); is( $merged_record->as_formatted, @@ -802,10 +790,10 @@ subtest 'Module filter precedence tests' => sub { my $matching_filter_rule_protect = Koha::MarcOverlayRules->find_or_create( { - tag => '501', + tag => '501', module => 'source', filter => 'test', - add => 0, + add => 0, append => 0, remove => 0, delete => 0 @@ -817,16 +805,18 @@ subtest 'Module filter precedence tests' => sub { # source: *, tag: 501, add: 1, append: 1, remove: 1, delete: 1 # source: test, tag: 250, add: 1, append: 1, remove: 1, delete: 1 # source: test, tag: 501, add: 0, append: 0, remove: 0, delete: 0 - $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); + $merged_record = Koha::MarcOverlayRules->merge_records( $orig_record, $incoming_record, { 'source' => 'test' } ); - $expected_record = build_record([ - ['250', 'a', '256 bottles of beer on the wall'], # Unchanged - ['250', 'a', '251 bottles of beer on the wall'], # Appended - #['250', 'a', '250 bottles of beer on the wall'], # Removed - ['500', 'a', 'One bottle of beer in the fridge'], # Protected - #['501', 'a', 'One cold bottle of beer in the fridge'], # Protected - #['501', 'a', 'Two cold bottles of beer in the fridge'], # Protected - ]); + $expected_record = build_record( + [ + [ '250', 'a', '256 bottles of beer on the wall' ], # Unchanged + [ '250', 'a', '251 bottles of beer on the wall' ], # Appended + #['250', 'a', '250 bottles of beer on the wall'], # Removed + [ '500', 'a', 'One bottle of beer in the fridge' ], # Protected + #['501', 'a', 'One cold bottle of beer in the fridge'], # Protected + #['501', 'a', 'Two cold bottles of beer in the fridge'], # Protected + ] + ); is( $merged_record->as_formatted, @@ -834,16 +824,18 @@ subtest 'Module filter precedence tests' => sub { 'Wildcard filter rule has been overridden by non wildcard filter rule with same tag' ); - $matching_filter_rule_protect->set({ - tag => '5\d{2}', - })->store(); + $matching_filter_rule_protect->set( + { + tag => '5\d{2}', + } + )->store(); # Current rules: # source: *, tag: *, add: 0, append: 0, remove: 0, delete: 0 # source: *, tag: 501, add: 1, append: 1, remove: 1, delete: 1 # source: test, tag: 250, add: 1, append: 1, remove: 1, delete: 1 # source: test, tag: 5\d{2}, add: 0, append: 0, remove: 0, delete: 0 - $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); + $merged_record = Koha::MarcOverlayRules->merge_records( $orig_record, $incoming_record, { 'source' => 'test' } ); is( $merged_record->as_formatted, @@ -851,16 +843,18 @@ subtest 'Module filter precedence tests' => sub { 'Wildcard filter rules with tags that matches tag regexps for non wildcard filter rules has been overridden' ); - $wildcard_filter_rule_overwrite->set({ - tag => '5\d{2}', - })->store(); + $wildcard_filter_rule_overwrite->set( + { + tag => '5\d{2}', + } + )->store(); # Current rules: # source: *, tag: *, add: 0, append: 0, remove: 0, delete: 0 # source: *, tag: 5\d{2}, add: 1, append: 1, remove: 1, delete: 1 # source: test, tag: 250, add: 1, append: 1, remove: 1, delete: 1 # source: test, tag: 5\d{2}, add: 0, append: 0, remove: 0, delete: 0 - $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' }); + $merged_record = Koha::MarcOverlayRules->merge_records( $orig_record, $incoming_record, { 'source' => 'test' } ); is( $merged_record->as_formatted, @@ -868,6 +862,69 @@ subtest 'Module filter precedence tests' => sub { 'Wildcard filter rules with tags with tag regexps matching the same tag as regexps for non wildcard filter rules has been overridden' ); + my $categorycode_matching_filter_rule_protect = Koha::MarcOverlayRules->find_or_create( + { + tag => '*', + module => 'categorycode', + filter => 'C', + add => 0, + append => 0, + remove => 0, + delete => 0 + } + ); + + # Current rules: + # source: *, tag: *, add: 0, append: 0, remove: 0, delete: 0 + # source: *, tag: 5\d{2}, add: 1, append: 1, remove: 1, delete: 1 + # source: test, tag: 250, add: 1, append: 1, remove: 1, delete: 1 + # source: test, tag: 5\d{2}, add: 0, append: 0, remove: 0, delete: 0 + # categorycode: C, tag: *, add: 0, append: 0, remove: 0, delete: 0 + $merged_record = Koha::MarcOverlayRules->merge_records( + $orig_record, + $incoming_record, + { 'source' => 'test', 'categorycode' => 'C' } + ); + + is( + $merged_record->as_formatted, + $orig_record->as_formatted, + 'If both categorycode and source module contexts matches, rules from categorycode module context are used' + ); + + my $userid_matching_filter_rule_protect = Koha::MarcOverlayRules->find_or_create( + { + tag => '*', + module => 'userid', + filter => '123', + add => 1, + append => 1, + remove => 1, + delete => 1 + } + ); + + # Current rules: + # source: *, tag: *, add: 0, append: 0, remove: 0, delete: 0 + # source: *, tag: 5\d{2}, add: 1, append: 1, remove: 1, delete: 1 + # source: test, tag: 250, add: 1, append: 1, remove: 1, delete: 1 + # source: test, tag: 5\d{2}, add: 0, append: 0, remove: 0, delete: 0 + # categorycode: C, tag: *, add: 0, append: 0, remove: 0, delete: 0 + # userid: 123, tag: *, add: 1, append: 1, remove: 1, delete: 1 + $merged_record = Koha::MarcOverlayRules->merge_records( + $orig_record, + $incoming_record, + { 'source' => 'test', 'categorycode' => 'C', 'userid' => '123' } + ); + + is( + $merged_record->as_formatted, + $incoming_record->as_formatted, + 'If both userid, categorycode and source module contexts matches, rules from userid module context are used' + ); + + $categorycode_matching_filter_rule_protect->delete(); + $userid_matching_filter_rule_protect->delete(); $wildcard_filter_rule_overwrite->delete(); $matching_filter_rule_overwrite->delete(); $matching_filter_rule_protect->delete(); -- 2.44.0