Koha/t/db_dependent/MarcModificationTemplates.t
Jonathan Druart 9d6d641d1f Bug 17600: Standardize our EXPORT_OK
On bug 17591 we discovered that there was something weird going on with
the way we export and use subroutines/modules.
This patch tries to standardize our EXPORT to use EXPORT_OK only.

That way we will need to explicitely define the subroutine we want to
use from a module.

This patch is a squashed version of:
Bug 17600: After export.pl
Bug 17600: After perlimport
Bug 17600: Manual changes
Bug 17600: Other manual changes after second perlimports run
Bug 17600: Fix tests

And a lot of other manual changes.

export.pl is a dirty script that can be found on bug 17600.

"perlimport" is:
git clone https://github.com/oalders/App-perlimports.git
cd App-perlimports/
cpanm --installdeps .
export PERL5LIB="$PERL5LIB:/kohadevbox/koha/App-perlimports/lib"
find . \( -name "*.pl" -o -name "*.pm" \) -exec perl App-perlimports/script/perlimports --inplace-edit --no-preserve-unused --filename {} \;

The ideas of this patch are to:
* use EXPORT_OK instead of EXPORT
* perltidy the EXPORT_OK list
* remove '&' before the subroutine names
* remove some uneeded use statements
* explicitely import the subroutines we need within the controllers or
modules

Note that the private subroutines (starting with _) should not be
exported (and not used from outside of the module except from tests).

EXPORT vs EXPORT_OK (from
https://www.thegeekstuff.com/2010/06/perl-exporter-examples/)
"""
Export allows to export the functions and variables of modules to user’s namespace using the standard import method. This way, we don’t need to create the objects for the modules to access it’s members.

@EXPORT and @EXPORT_OK are the two main variables used during export operation.

@EXPORT contains list of symbols (subroutines and variables) of the module to be exported into the caller namespace.

@EXPORT_OK does export of symbols on demand basis.
"""

If this patch caused a conflict with a patch you wrote prior to its
push:
* Make sure you are not reintroducing a "use" statement that has been
removed
* "$subroutine" is not exported by the C4::$MODULE module
means that you need to add the subroutine to the @EXPORT_OK list
* Bareword "$subroutine" not allowed while "strict subs"
means that you didn't imported the subroutine from the module:
  - use $MODULE qw( $subroutine list );
You can also use the fully qualified namespace: C4::$MODULE::$subroutine

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
2021-07-16 08:58:47 +02:00

810 lines
29 KiB
Perl
Executable file

use Modern::Perl;
use Test::More tests => 126;
use Koha::Database;
use Koha::SimpleMARC;
use t::lib::Mocks;
use_ok("MARC::Field");
use_ok("MARC::Record");
use_ok('C4::MarcModificationTemplates', qw( AddModificationTemplate AddModificationTemplateAction GetModificationTemplateAction GetModificationTemplateActions ModModificationTemplateAction MoveModificationTemplateAction DelModificationTemplate DelModificationTemplateAction ModifyRecordWithTemplate GetModificationTemplates ));
my $schema = Koha::Database->new->schema;
$schema->storage->txn_begin;
my $dbh = C4::Context->dbh;
$dbh->do(q|DELETE FROM marc_modification_templates|);
# Creation
my $template_id = AddModificationTemplate("template_name");
like( $template_id, qr|^\d+$|, "new template returns an id" );
is( AddModificationTemplateAction(
$template_id, 'move_field', 1,
'464', 'u', '', '464', '3',
'', '', '',
'', '', '', '', '', '',
'move first 464$u to 464$3'
), 1, "Add first action");
is( AddModificationTemplateAction(
$template_id, 'update_field', 0,
'099', 't', 'LIV', '', '',
'', '', '',
'if', '200', 'b', 'equals', 'Text', '',
'Update field 099$t with value LIV if 200$b matches "Text"'
), 1, "Add second action");
is( AddModificationTemplateAction(
$template_id, 'copy_field', 0,
'606', 'a', '', '607', 'a',
'', '', '',
'unless', '606', 'a', 'not_equals', '^AJAX', '1',
'Copy field 606$a to 607$a unless 606$a matches RegEx m^AJAX'
), 1, "Add third action");
is( AddModificationTemplateAction(
$template_id, 'add_field', 0,
'650', 'a', 'Additional', '', '',
'', '', '',
'unless', '650', 'a', 'exists', '', '',
'Add field 650$aAdditional unless 650$a exists'
), 1, "Add fourth action");
# Getter
my @actions = GetModificationTemplateActions( $template_id );
is( @actions, 4, "4 actions are inserted");
for my $action ( @actions ) {
isnt( GetModificationTemplateAction( $action->{mmta_id} ), undef, "action with id $action->{mmta_id} exists" );
}
my $first_action = $actions[0];
is( $first_action->{ordering}, 1, "test ordering for first action" );
is( $first_action->{action}, 'move_field', "test action for first action" );
is( $first_action->{from_field}, '464', "test from_field for first action" );
is( $first_action->{from_subfield}, 'u', "test from_subfield for first action" );
is( $first_action->{to_field}, '464', "test to_field for first action" );
is( $first_action->{to_subfield}, '3', "test to_subfield for first action" );
my $second_action = $actions[1];
is( $second_action->{ordering}, 2, "test ordering for second action" );
is( $second_action->{action}, 'update_field', "test action for second action" );
is( $second_action->{from_field}, '099',"test from_field for second action" );
is( $second_action->{from_subfield}, 't', "test from_subfield for second action" );
is( $second_action->{field_value}, 'LIV', "test firld_value for second action" );
is( $second_action->{to_field}, '', "test to_field for second action" );
is( $second_action->{to_subfield}, '', "test to_subfield for second action" );
is( $second_action->{conditional}, 'if', "test conditional for second action" );
is( $second_action->{conditional_field}, '200', "test conditional_field for second action" );
is( $second_action->{conditional_subfield}, 'b', "test conditional_subfield for second action" );
is( $second_action->{conditional_comparison}, 'equals', "test conditional_comparison for second action" );
my $third_action = $actions[2];
is( $third_action->{ordering}, 3, "test ordering for third action" );
is( $third_action->{action}, 'copy_field', "test action for third action" );
is( $third_action->{from_field}, '606', "test from_field for third action" );
is( $third_action->{from_subfield}, 'a', "test from_subfield for third action" );
is( $third_action->{to_field}, '607', "test to_field for third action" );
is( $third_action->{to_subfield}, 'a', "test to_subfield for third action" );
is( $third_action->{conditional}, 'unless', "test conditional for third action" );
is( $third_action->{conditional_field}, '606', "test conditional_field for third action" );
is( $third_action->{conditional_subfield}, 'a', "test conditional_subfield for third action" );
is( $third_action->{conditional_comparison}, 'not_equals', "test conditional_comparison for third action" );
is( $third_action->{conditional_value}, '^AJAX', "test conditional_value for third action" );
my $fourth_action = $actions[3];
is( $fourth_action->{ordering}, 4, "test ordering for fourth action" );
is( $fourth_action->{action}, 'add_field', "test action for fourth action" );
is( $fourth_action->{from_field}, '650', "test from_field for fourth action" );
is( $fourth_action->{from_subfield}, 'a', "test from_subfield for fourth action" );
is( $fourth_action->{to_field}, '', "test to_field for fourth action" );
is( $fourth_action->{to_subfield}, '', "test to_subfield for fourth action" );
is( $fourth_action->{conditional}, 'unless', "test conditional for fourth action" );
is( $fourth_action->{conditional_field}, '650', "test conditional_field for fourth action" );
is( $fourth_action->{conditional_subfield}, 'a', "test conditional_subfield for fourth action" );
is( $fourth_action->{conditional_comparison}, 'exists', "test conditional_comparison for fourth action" );
is( $fourth_action->{conditional_value}, '', "test conditional_value for fourth action" );
# Modifications
is( ModModificationTemplateAction(
$actions[1]->{mmta_id}, 'update_field', 0,
'100', 'u', 'LIV', '', '',
'', '', '',
'if', '200', 'c', 'equals', 'Text', '',
'Update field 099$t with value LIV if 200$b matches "Text"'
), 1, "Modify second action");
$second_action = GetModificationTemplateAction( $actions[1]->{mmta_id} );
is( $second_action->{ordering}, 2, "test ordering for second action modified" );
is( $second_action->{action}, 'update_field', "test action for second action modified" );
is( $second_action->{from_field}, '100',"test from_field for second action modified" );
is( $second_action->{from_subfield}, 'u', "test from_subfield for second action modified" );
is( $second_action->{field_value}, 'LIV', "test firld_value for second action modified" );
is( $second_action->{to_field}, '', "test to_field for second action modified" );
is( $second_action->{to_subfield}, '', "test to_subfield for second action modified" );
is( $second_action->{conditional}, 'if', "test conditional for second action modified" );
is( $second_action->{conditional_field}, '200', "test conditional_field for second action modified" );
is( $second_action->{conditional_subfield}, 'c', "test conditional_subfield for second action modified" );
is( $second_action->{conditional_comparison}, 'equals', "test conditional_comparison for second action modified" );
# Up and down
is( MoveModificationTemplateAction( $actions[2]->{mmta_id}, 'top' ), '1', 'Move the third action on top' );
is( MoveModificationTemplateAction( $actions[0]->{mmta_id}, 'bottom' ), '1', 'Move the first action on bottom' );
is( GetModificationTemplateAction( $actions[0]->{mmta_id} )->{ordering}, '4', 'First becomes fourth' );
is( GetModificationTemplateAction( $actions[1]->{mmta_id} )->{ordering}, '2', 'Second stays second' );
is( GetModificationTemplateAction( $actions[2]->{mmta_id} )->{ordering}, '1', 'Third becomes first' );
is( GetModificationTemplateAction( $actions[3]->{mmta_id} )->{ordering}, '3', 'Fourth becomes third' );
is( MoveModificationTemplateAction( $actions[0]->{mmta_id}, 'up' ), '1', 'Move up the first action (was fourth)' );
is( MoveModificationTemplateAction( $actions[0]->{mmta_id}, 'up' ), '1', 'Move up the first action (was third)' );
is( MoveModificationTemplateAction( $actions[2]->{mmta_id}, 'down' ), '1', 'Move down the third action (was first)' );
is( GetModificationTemplateAction( $actions[0]->{mmta_id} )->{ordering}, '1', 'First becomes again first' );
is( GetModificationTemplateAction( $actions[1]->{mmta_id} )->{ordering}, '3', 'Second becomes third' );
is( GetModificationTemplateAction( $actions[2]->{mmta_id} )->{ordering}, '2', 'Third becomes second' );
is( GetModificationTemplateAction( $actions[3]->{mmta_id} )->{ordering}, '4', 'Fourth becomes again fourth' );
# Cleaning
is( DelModificationTemplateAction( $actions[0]->{mmta_id} ), 3, "Delete the first action, 2 others are reordered" );
is( GetModificationTemplateAction( $actions[0]->{mmta_id} ), undef, "first action does not exist anymore" );
is( DelModificationTemplate( $template_id ), 1, "The template has been deleted" );
is( GetModificationTemplateAction( $actions[1]->{mmta_id} ), undef, "second action does not exist anymore" );
is( GetModificationTemplateAction( $actions[2]->{mmta_id} ), undef, "third action does not exist anymore" );
is( GetModificationTemplateAction( $actions[3]->{mmta_id} ), undef, "fourth action does not exist anymore" );
is( GetModificationTemplateActions( $template_id ), 0, "There is no action for deleted template" );
# ModifyRecordWithTemplate
t::lib::Mocks::mock_userenv();
$template_id = AddModificationTemplate("new_template_test");
like( $template_id, qr|^\d+$|, "new template returns an id" );
is( AddModificationTemplateAction(
$template_id, 'delete_field', 0,
'245', '', '', '', '',
'', '', '',
'if', '245', 'a', 'equals', 'Bad title', '',
'Delete field 245 if 245$a eq "Bad title"'
), 1, 'Add first action: delete field 245 if 245$a eq "Bad title"');
is( AddModificationTemplateAction(
$template_id, 'copy_field', 0,
'245', 'a', '', '246', 'a',
'', '', '',
'', '', '', '', '', '',
'copy field 245$a to 246$a'
), 1, 'Add second action: copy 245$a to 246$a');
is( AddModificationTemplateAction(
$template_id, 'delete_field', 0,
'650', 'a', '', '', '',
'', '', '',
'if', '650', '9', 'equals', '462', '',
'Delete field 650$a if 650$9=462'
), 1, 'Add third action: delete field 650$a if 650$9=462');
is( AddModificationTemplateAction(
$template_id, 'update_field', 0,
'952', 'p', '3010023917_updated', '', '',
'', '', '',
'unless', '650', '9', 'equals', '42', '',
'Update field 952$p with "3010023917_updated" if 650$9 != 42'
), 1, 'Add fourth action: update field 952$p with "3010023917_updated" if 650$9 != 42');
is( AddModificationTemplateAction(
$template_id, 'move_field', 0,
'952', 'd', '', '952', 'e',
'', '', '',
'if', '952', 'c', 'equals', '^GEN', '1',
'Move field 952$d to 952$e if 952$c =~ /^GEN/'
), 1, 'Add fifth action: move field 952$d to 952$e if 952$c =~ /^GEN/');
is( AddModificationTemplateAction(
$template_id, 'update_field', 0,
'650', 'a', 'Computer algorithms.', '', '',
'', '', '',
'if', '650', '9', 'equals', '499', '',
'Update field 650$a with "Computer algorithms." to 651 if 650$9 == 499'
), 1, 'Add sixth action: update field 650$a with "Computer algorithms." if 650$9 == 499');
is( AddModificationTemplateAction(
$template_id, 'move_field', 0,
'650', '', '', '651', '',
'', '', '',
'if', '650', '9', 'equals', '499', '',
'Move field 650 to 651 if 650$9 == 499'
), 1, 'Add seventh action: move field 650 to 651 if 650$9 == 499');
is( AddModificationTemplateAction(
$template_id, 'update_field', 0,
'999', 'a', 'non existent.', '', '',
'', '', '',
'', '', '', '', '', '',
'Update non existent field 999$a with "non existent"'
), 1, 'Add eighth action: update field non existent 999$a with "non existent."');
is( AddModificationTemplateAction(
$template_id, 'update_field', 0,
'999', 'a', 'existent - updated.', '', '',
'', '', '',
'', '', '', '', '', '',
'Update existent field 999$a with "existent - updated."'
), 1, 'Add ninth action: update field non existent 999$a with "existent - updated."');
is( AddModificationTemplateAction(
$template_id, 'add_field', 0,
'999', 'a', 'additional existent.', '', '',
'', '', '',
'', '', '', '', '', '',
'Add new existent field 999$a with "additional existent"'
), 1, 'Add tenth action: add additional field existent 999$a with "additional existent."');
is( AddModificationTemplateAction(
$template_id, 'add_field', 0,
'007', '', 'vxcdq', '', '',
'', '', '',
'', '', '', '', '', '',
'Add new existent field 999$a with "additional existent"'
), 1, 'Add eleventh action: add additional field existent 007');
my $record = new_record();
is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
my $expected_record = expected_record_1();
is_deeply( $record, $expected_record, "Record modification as expected");
$template_id = AddModificationTemplate("another_template_test");
# Duplicate 245 => 3x245
is( AddModificationTemplateAction(
$template_id, 'copy_field', 0,
'245', '', '', '245', '',
'', '', '',
'if', '245', 'a', 'equals', 'Bad title', '',
'Copy field 245 if 245$a eq "Bad title"'
), 1, 'Add action: copy field 245 if 245$a eq "Bad title"');
$record = new_record();
is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
my @fields_245a = Koha::SimpleMARC::read_field({
record => $record,
field => '245',
subfield => 'a',
});
is_deeply( \@fields_245a, [
'The art of computer programming',
'Bad title',
'Bad title',
], 'Copy field has copied the "Bad title"' );
# Update first "Bad title"
is( AddModificationTemplateAction(
$template_id, 'update_field', 1,
'245', 'a', 'Bad title updated', '', '',
'', '', '',
'if', '245', 'a', 'equals', 'Bad title', '',
'Update first 245$a matching "Bad title" with "Bad title updated"'
), 1, 'Add action: update field 245$a matching "Bad title" with "Bad title updated');
$record = new_record();
is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
@fields_245a = Koha::SimpleMARC::read_field({
record => $record,
field => '245',
subfield => 'a',
});
is_deeply( \@fields_245a, [
'The art of computer programming',
'Bad title updated',
'Bad title',
], 'update_field has update first the "Bad title"' );
# Duplicate first 245 => 3x245
is( AddModificationTemplateAction(
$template_id, 'copy_field', 1,
'245', '', '', '245', '',
'', '', '',
'if', '245', 'a', 'equals', '^Bad title', '1',
'Copy field 245 if 245$a =~ "^Bad title"'
), 1, 'Add action: copy field 245 if 245$a =~ "^Bad title"');
$record = new_record();
is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
@fields_245a = Koha::SimpleMARC::read_field({
record => $record,
field => '245',
subfield => 'a',
});
is_deeply( \@fields_245a, [
'The art of computer programming',
'Bad title updated',
'Bad title',
'Bad title updated',
], 'Copy field has copied first "^Bad title"' );
# Delete first ^Bad title
is( AddModificationTemplateAction(
$template_id, 'delete_field', 1,
'245', '', '', '', '',
'', '', '',
'if', '245', 'a', 'equals', '^Bad title', '1',
'Delete first 245$a mathing ^Bad title'
), 1, 'Delete first 245$a mathing ^Bad title');
$record = new_record();
is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
@fields_245a = Koha::SimpleMARC::read_field({
record => $record,
field => '245',
subfield => 'a',
});
is_deeply( \@fields_245a, [
'The art of computer programming',
'Bad title',
'Bad title updated',
], 'delete field has been deleted the right field"' );
is( AddModificationTemplateAction(
$template_id, 'delete_field', 0,
'245', '', '', '', '',
'', '', '',
'if', '245', 'a', 'equals', 'updated$', '1',
'Delete first 245$a mathing updated$'
), 1, 'Delete first 245$a mathing updated$');
$record = new_record();
is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
@fields_245a = Koha::SimpleMARC::read_field({
record => $record,
field => '245',
subfield => 'a',
});
is_deeply( \@fields_245a, [
'The art of computer programming',
'Bad title'
], 'delete field has been deleted the right field"' );
subtest 'GetModificationTemplates' => sub {
plan tests => 1;
$dbh->do(q|DELETE FROM marc_modification_templates|);
AddModificationTemplate("zzz");
AddModificationTemplate("aaa");
AddModificationTemplate("mmm");
my @templates = GetModificationTemplates();
is_deeply( [map{$_->{name}} @templates], ['aaa', 'mmm', 'zzz'] );
};
subtest "not_equals" => sub {
plan tests => 2;
$dbh->do(q|DELETE FROM marc_modification_templates|);
my $template_id = AddModificationTemplate("template_name");
AddModificationTemplateAction(
$template_id, 'move_field', 0,
'650', '', '', '651', '',
'', '', '',
'if', '650', '9', 'not_equals', '499', '',
'Move field 650 to 651 if 650$9 != 499'
);
my $record = new_record();
ModifyRecordWithTemplate( $template_id, $record );
my $expected_record = expected_record_2();
is_deeply( $record, $expected_record, '650 has been moved to 651 when 650$9 != 499' );
$dbh->do(q|DELETE FROM marc_modification_templates|);
$template_id = AddModificationTemplate("template_name");
AddModificationTemplateAction(
$template_id, 'move_field', 0,
'650', '', '', '651', '',
'', '', '',
'if', '650', 'b', 'not_equals', '499', '',
'Move field 650 to 651 if 650$b != 499'
);
$record = new_record();
ModifyRecordWithTemplate( $template_id, $record );
$expected_record = new_record();
is_deeply( $record, $expected_record, 'None 650 have been moved, no $650$b exists' );
};
subtest "when conditional field doesn't match the from field" => sub {
plan tests => 3;
$dbh->do(q|DELETE FROM marc_modification_templates|);
my $template_id = AddModificationTemplate("template_name");
AddModificationTemplateAction(
$template_id, 'delete_field', 0,
'650', '9', '', '', '',
'', '', '',
'if', '245', 'a', 'equals', 'Bad title', '',
'Delete fields 650$9 if 245$a == "Bad title"'
);
my $record = new_record();
ModifyRecordWithTemplate( $template_id, $record );
my $expected_record = expected_record_3();
is_deeply( $record, $expected_record, '650$9 fields have been deleted when 245$a == "Bad title"' );
$dbh->do(q|DELETE FROM marc_modification_templates|);
$template_id = AddModificationTemplate("template_name");
AddModificationTemplateAction(
$template_id, 'delete_field', 0,
'650', '9', '', '', '',
'', '', '',
'if', '245', 'a', 'exists', '', '',
'Delete fields 650$9 if 245$a exists'
);
$record = new_record();
ModifyRecordWithTemplate( $template_id, $record );
$expected_record = expected_record_3();
is_deeply( $record, $expected_record, '650$9 fields have been deleted because 245$a exists' );
$dbh->do(q|DELETE FROM marc_modification_templates|);
$template_id = AddModificationTemplate("template_name");
AddModificationTemplateAction(
$template_id, 'delete_field', 1,
'650', '', '', '', '',
'', '', '',
'if', '245', 'a', 'exists', '', '',
'Delete 1st field 650 if 245$a exists'
);
$record = new_record();
ModifyRecordWithTemplate( $template_id, $record );
$expected_record = expected_record_4();
is_deeply( $record, $expected_record, '1st 650 field has been deleted because 245$a exists' );
};
sub new_record {
my $record = MARC::Record->new;
$record->leader('03174nam a2200445 a 4500');
my @fields = (
MARC::Field->new(
100, '1', ' ',
a => 'Knuth, Donald Ervin',
d => '1938',
),
MARC::Field->new(
245, '1', '4',
a => 'The art of computer programming',
c => 'Donald E. Knuth.',
),
MARC::Field->new(
245, '1', '4',
a => 'Bad title',
c => 'Donald E. Knuth.',
),
MARC::Field->new(
650, ' ', '0',
a => 'Computer programming.',
9 => '462',
),
MARC::Field->new(
650, ' ', '0',
a => 'Computer programming.',
9 => '499',
),
MARC::Field->new(
952, ' ', ' ',
p => '3010023917',
y => 'BK',
c => 'GEN',
d => '2001-06-25',
),
);
$record->append_fields(@fields);
return $record;
}
sub expected_record_1 {
my $record = MARC::Record->new;
$record->leader('03174nam a2200445 a 4500');
my @fields = (
MARC::Field->new(
100, '1', ' ',
a => 'Knuth, Donald Ervin',
d => '1938',
),
MARC::Field->new(
245, '1', '4',
a => 'The art of computer programming',
c => 'Donald E. Knuth.',
),
MARC::Field->new(
650, ' ', '0',
9 => '462',
),
MARC::Field->new(
952, ' ', ' ',
p => '3010023917_updated',
y => 'BK',
c => 'GEN',
e => '2001-06-25',
),
MARC::Field->new(
246, '', ' ',
a => 'The art of computer programming',
),
MARC::Field->new(
651, ' ', '0',
a => 'Computer algorithms.',
9 => '499',
),
MARC::Field->new(
999, ' ', ' ',
a => 'existent - updated.',
),
MARC::Field->new(
999, ' ', ' ',
a => 'additional existent.',
),
MARC::Field->new(
'007', 'vxcdq',
),
);
$record->append_fields(@fields);
return $record;
}
sub expected_record_2 {
my $record = MARC::Record->new;
$record->leader('03174nam a2200445 a 4500');
my @fields = (
MARC::Field->new(
100, '1', ' ',
a => 'Knuth, Donald Ervin',
d => '1938',
),
MARC::Field->new(
245, '1', '4',
a => 'The art of computer programming',
c => 'Donald E. Knuth.',
),
MARC::Field->new(
245, '1', '4',
a => 'Bad title',
c => 'Donald E. Knuth.',
),
MARC::Field->new(
650, ' ', '0',
a => 'Computer programming.',
9 => '499',
),
MARC::Field->new(
952, ' ', ' ',
p => '3010023917',
y => 'BK',
c => 'GEN',
d => '2001-06-25',
),
MARC::Field->new(
651, ' ', '0',
a => 'Computer programming.',
9 => '462',
),
);
$record->append_fields(@fields);
return $record;
}
sub expected_record_3 {
my $record = MARC::Record->new;
$record->leader('03174nam a2200445 a 4500');
my @fields = (
MARC::Field->new(
100, '1', ' ',
a => 'Knuth, Donald Ervin',
d => '1938',
),
MARC::Field->new(
245, '1', '4',
a => 'The art of computer programming',
c => 'Donald E. Knuth.',
),
MARC::Field->new(
245, '1', '4',
a => 'Bad title',
c => 'Donald E. Knuth.',
),
MARC::Field->new(
650, ' ', '0',
a => 'Computer programming.',
),
MARC::Field->new(
650, ' ', '0',
a => 'Computer programming.',
),
MARC::Field->new(
952, ' ', ' ',
p => '3010023917',
y => 'BK',
c => 'GEN',
d => '2001-06-25',
),
);
$record->append_fields(@fields);
return $record;
}
sub expected_record_4 {
my $record = MARC::Record->new;
$record->leader('03174nam a2200445 a 4500');
my @fields = (
MARC::Field->new(
100, '1', ' ',
a => 'Knuth, Donald Ervin',
d => '1938',
),
MARC::Field->new(
245, '1', '4',
a => 'The art of computer programming',
c => 'Donald E. Knuth.',
),
MARC::Field->new(
245, '1', '4',
a => 'Bad title',
c => 'Donald E. Knuth.',
),
MARC::Field->new(
650, ' ', '0',
a => 'Computer programming.',
9 => '499',
),
MARC::Field->new(
952, ' ', ' ',
p => '3010023917',
y => 'BK',
c => 'GEN',
d => '2001-06-25',
),
);
$record->append_fields(@fields);
return $record;
}
# Tests related to use of subfield 0 ($0)
sub new_record_0 {
my $record = MARC::Record->new;
$record->leader('03174nam a2200445 a 4500');
my @fields = (
MARC::Field->new(
100, '1', ' ',
0 => '12345',
a => 'Knuth, Donald Ervin',
d => '1938',
),
MARC::Field->new(
245, '1', '4',
0 => '12345',
a => 'The art of computer programming',
c => 'Donald E. Knuth.',
),
MARC::Field->new(
650, ' ', '0',
0 => '42',
a => 'Computer programming.',
9 => '462',
),
);
$record->append_fields(@fields);
return $record;
}
sub expected_record_0 {
my $record = MARC::Record->new;
$record->leader('03174nam a2200445 a 4500');
my @fields = (
MARC::Field->new(
100, '1', ' ',
a => 'Knuth, Donald Ervin',
d => '1938',
),
MARC::Field->new(
245, '1', '4',
0 => '12345',
a => 'The art of computer programming',
c => 'Donald E. Knuth.',
),
MARC::Field->new(
650, ' ', '0',
0 => '42',
a => 'Computer programming.',
9 => '462',
),
MARC::Field->new(
600, ' ', ' ',
0 => 'TestUpdated',
),
MARC::Field->new(
600, ' ', ' ',
0 => 'TestUpdated',
),
MARC::Field->new(
100, ' ', ' ',
0 => 'TestUpdated',
),
MARC::Field->new(
100, ' ', ' ',
0 => 'TestUpdated',
),
MARC::Field->new(
700, ' ', ' ',
0 => '12345',
),
);
$record->append_fields(@fields);
return $record;
}
$record = new_record_0();
is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
$template_id = AddModificationTemplate("template_test_subfield_0");
like( $template_id, qr|^\d+$|, "new template returns an id" );
# Delete subfield 100$0
is( AddModificationTemplateAction(
$template_id, 'delete_field', 0,
'100', '0', '', '', '',
'', '', '',
'', '', '', '', '', '',
'Action 1: Delete subfield 100$0'
), 1, 'Action 1: Delete subfield 100$0');
# Add new subfield 100$0 with value "Test"
is( AddModificationTemplateAction(
$template_id, 'add_field', 0,
'100', '0', 'Test', '', '',
'', '', '',
'', '', '', '', '', '',
'Action 2: Add new subfield 100$0 with value "Test"'
), 1, 'Action 2: Add new subfield 100$0');
# Update existing or add new subfield 100$0 with value "TestUpdated"
is( AddModificationTemplateAction(
$template_id, 'update_field', 0,
'100', '0', 'TestUpdated', '', '',
'', '', '',
'', '', '', '', '', '',
'Action 3: Update existing or add new subfield 100$0 with value "TestUpdated"'
), 1, 'Action 3: Update existing or add new subfield 100$0 with value "TestUpdated"');
# Move subfield 100$0 to 600$0
is( AddModificationTemplateAction(
$template_id, 'move_field', 0,
'100', '0', '', '600', '0',
'', '', '',
'', '', '', '', '', '',
'Action 4: Move subfield 100$0 to 600$0'
), 1, 'Action 4: Move subfield 100$0 to 600$0');
# Copy subfield 600$0 to 100$0
is( AddModificationTemplateAction(
$template_id, 'copy_field', 0,
'600', '0', '', '100', '0',
'', '', '',
'', '', '', '', '', '',
'Action 5: Copy subfield 600$0 to 100$0'
), 1, 'Action 5: Copy subfield 600$0 to 100$0');
# Copy and replace subfield 245$0 to 700$0
is( AddModificationTemplateAction(
$template_id, 'copy_and_replace_field', 0,
'245', '0', '', '700', '0',
'', '', '',
'', '', '', '', '', '',
'Action 6: Copy and replace subfield 245$0 to 700$0'
), 1, 'Action 6: Copy and replace subfield 245$0 to 700$0');
my @actions_0 = GetModificationTemplateActions( $template_id );
is( @actions_0, 6, "6 actions are inserted");
ModifyRecordWithTemplate( $template_id, $record );
my $expected_record_0 = expected_record_0();
is_deeply( $record, $expected_record_0, '100$0 has been deleted, added back, updated, moved to 600$0, and copied back to 100$0; finally, 245$0 has been copied and replaced to 700$0' );