3 use Test::More tests => 11;
6 use_ok("MARC::Record");
7 use_ok("Koha::SimpleMARC", qw( field_exists read_field update_field copy_field copy_and_replace_field move_field delete_field field_equals ));
10 my $record = MARC::Record->new;
11 $record->leader('03174nam a2200445 a 4500');
14 '008', '120829t20132012nyu bk 001 0ceng',
18 a => 'Knuth, Donald Ervin',
23 a => 'The art of computer programming',
24 c => 'Donald E. Knuth.',
28 a => 'Computer programming.',
39 $record->append_fields(@fields);
44 subtest 'field_exists' => sub {
46 my $record = new_record;
48 field_exists( { record => $record, field => '650', subfield => 'a' } ),
53 field_exists( { record => $record, field => '650', subfield => 'b' } ),
55 '650$b does not exist'
58 $record->append_fields(
61 a => 'Computer algorithms.',
67 field_exists( { record => $record, field => '650', subfield => 'a' } ),
69 '650$a exists, field_exists returns the 2 field numbers'
74 subtest 'read_field' => sub {
76 subtest 'read subfield' => sub {
78 my $record = new_record;
79 $record->append_fields(
82 a => 'Computer algorithms.',
92 read_field( { record => $record, field => '650', subfield => 'a' } );
93 is_deeply( $fields_650a[0], 'Computer programming.', 'first 650$a' );
94 is_deeply( $fields_650a[1], 'Computer algorithms.', 'second 650$a' );
106 ['Computer programming.'],
120 ['Computer algorithms.'],
135 'There is no 3 650$a'
152 subtest 'read field' => sub {
154 my $record = new_record;
155 $record->append_fields(
158 a => 'Computer algorithms.',
171 [ 'Computer programming.', '462', 'Computer algorithms.', '463' ],
172 'Get the all subfield values for field 650'
184 [ 'Computer programming.', '462' ],
185 'Get the all subfield values for the first field 650'
190 { record => $record, field => '650', field_numbers => [2] }
193 [ 'Computer algorithms.', '463' ],
194 'Get the all subfield values for the second field 650'
199 { record => $record, field => '650', field_numbers => [3] }
203 'Get the all subfield values for the third field 650 which does not exist'
209 subtest 'update_field' => sub {
211 subtest 'update subfield' => sub {
213 my $record = new_record;
220 values => ['3010023918']
226 { record => $record, field => '952', subfield => 'p' }
230 'update existing subfield 952$p'
232 delete_field( { record => $record, field => '952' } );
238 values => ['3010023918']
252 { record => $record, field => '952', subfield => 'p' }
256 'create subfield 952$p'
260 { record => $record, field => '952', subfield => 'y' }
263 'create subfield 952$k on existing 952 field'
266 $record->append_fields(
279 values => ['3010023919']
283 read_field( { record => $record, field => '952', subfield => 'p' } );
286 [ '3010023919', '3010023919' ],
287 'update all subfields 952$p with the same value'
295 values => [ '3010023917', '3010023918' ]
299 read_field( { record => $record, field => '952', subfield => 'p' } );
302 [ '3010023917', '3010023918' ],
303 'update all subfields 952$p with the different values'
311 values => [ '654321' ]
315 read_field( { record => $record, field => '952', subfield => '0' } );
318 [ '654321', '654321' ],
319 'update all subfields 952$0 with the same value'
325 # copy_field - subfield
326 subtest 'copy_field' => sub {
328 subtest 'copy subfield' => sub {
330 my $record = new_record;
331 $record->append_fields(
334 a => 'Computer algorithms.',
342 from_subfield => 'a',
350 { record => $record, field => '245', subfield => 'a' }
353 ['The art of computer programming'],
354 'After copy 245$a still exists'
359 { record => $record, field => '246', subfield => 'a' }
362 ['The art of computer programming'],
363 '246$a is a new field'
365 delete_field( { record => $record, field => '246' } );
368 { record => $record, field => '246', subfield => 'a' }
371 '246$a does not exist anymore'
378 from_subfield => 'a',
384 read_field( { record => $record, field => '651', subfield => 'a' } );
387 [ 'Computer programming.', 'Computer algorithms.' ],
388 'Copy multivalued field'
390 delete_field( { record => $record, field => '651' } );
396 from_subfield => 'a',
405 { record => $record, field => '651', subfield => 'a' }
408 ['Computer programming.'],
409 'Copy first field 650$a'
411 delete_field( { record => $record, field => '652' } );
417 from_subfield => 'a',
426 { record => $record, field => '651', subfield => 'a' }
429 ['Computer programming.', 'Computer algorithms.'],
430 'Copy second field 650$a'
432 delete_field( { record => $record, field => '651' } );
438 from_subfield => 'a',
441 regex => { search => 'Computer', replace => 'The art of' }
445 read_field( { record => $record, field => '651', subfield => 'a' } );
448 [ 'The art of programming.', 'The art of algorithms.' ],
449 'Copy field using regex'
451 delete_field( { record => $record, field => '651' } );
457 from_subfield => 'a',
460 regex => { search => 'Computer', replace => 'The mistake of' }
464 read_field( { record => $record, field => '651', subfield => 'a' } );
467 [ 'The mistake of programming.', 'The mistake of algorithms.' ],
468 'Copy fields using regex on existing fields'
470 delete_field( { record => $record, field => '651' } );
476 from_subfield => 'a',
479 regex => { search => 'Computer', replace => 'The art of' }
483 read_field( { record => $record, field => '651', subfield => 'a' } );
486 [ 'The art of programming.', 'The art of algorithms.', ],
487 'Copy all fields using regex'
489 delete_field( { record => $record, field => '651' } );
495 from_subfield => 'a',
498 regex => { search => 'Computer', replace => 'The art of' },
503 read_field( { record => $record, field => '651', subfield => 'a' } );
506 [ 'The art of programming.', ],
507 'Copy first field using regex'
509 delete_field( { record => $record, field => '651' } );
511 # Copy with regex modifiers
512 $record = new_record;
513 $record->append_fields(
516 a => 'Computer algorithms.',
524 from_subfield => 'a',
527 regex => { search => 'o', replace => 'foo' }
531 read_field( { record => $record, field => '652', subfield => 'a' } );
534 [ 'Cfoomputer programming.', 'Cfoomputer algorithms.' ],
535 'Copy field using regex'
542 from_subfield => 'a',
545 regex => { search => 'o', replace => 'foo', modifiers => 'g' }
549 read_field( { record => $record, field => '653', subfield => 'a' } );
552 [ 'Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.' ],
553 'Copy field using regex'
560 from_subfield => 'a',
563 regex => { search => 'O', replace => 'foo', modifiers => 'i' }
567 read_field( { record => $record, field => '654', subfield => 'a' } );
570 [ 'Cfoomputer programming.', 'Cfoomputer algorithms.' ],
571 'Copy field using regex'
578 from_subfield => 'a',
581 regex => { search => 'O', replace => 'foo', modifiers => 'gi' }
585 read_field( { record => $record, field => '655', subfield => 'a' } );
588 [ 'Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.' ],
589 'Copy field using regex'
592 $record = new_record;
593 $record->append_fields(
605 from_subfield => 'd',
611 read_field( { record => $record, field => '952', subfield => 'd' } );
612 # FIXME We need a new action "duplicate" if we don't want to modify the original field
615 [ '2001-06-25', '2001-06-25', '2001-06-25' ],
616 'copy 952$d into others 952 field'
623 from_subfield => '1',
629 read_field( { record => $record, field => '999', subfield => '9' } );
630 is_deeply( \@fields_9999, [],
631 'copy a nonexistent subfield does not create a new one' );
633 $record = new_record;
638 from_subfield => 'a',
641 regex => { search => '^', replace => 'BEGIN ' }
647 { record => $record, field => '245', subfield => 'a' }
650 ['The art of computer programming', 'BEGIN The art of computer programming'],
651 'Update a subfield: add a string at the beginning'
654 $record = new_record;
659 from_subfield => 'a',
662 regex => { search => '$', replace => ' END' }
668 { record => $record, field => '245', subfield => 'a' }
671 ['The art of computer programming', 'The art of computer programming END'],
672 'Update a subfield: add a string at the end'
675 $record = new_record;
680 from_subfield => 'a',
683 regex => { search => '(art)', replace => 'sm$1 $1' }
689 { record => $record, field => '245', subfield => 'a' }
692 ['The art of computer programming', 'The smart art of computer programming'],
693 'Update a subfield: use capture groups'
696 $record = new_record;
701 from_subfield => 'c',
710 { record => $record, field => '650' }
713 [ 'Computer programming.', '462', 'Donald E. Knuth.' ],
714 'Copy a subfield to an existent field but inexistent subfield'
717 $record = new_record;
722 from_subfield => 'c',
731 { record => $record, field => '650' }
734 [ 'Computer programming.', '462', 'Donald E. Knuth.' ],
735 'Copy a subfield to an existent field / subfield'
739 subtest 'copy field' => sub {
741 my $record = new_record;
742 $record->append_fields(
752 { record => $record, from_field => '952', to_field => '953' } );
753 my @fields_952 = read_field( { record => $record, field => '952' } );
757 { record => $record, field => '952', field_numbers => [1] }
760 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
761 "copy all: original first field still exists"
766 { record => $record, field => '952', field_numbers => [2] }
769 [ '3010023918', 'CD' ],
770 "copy all: original second field still exists"
775 { record => $record, field => '953', field_numbers => [1] }
778 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
779 "copy all: first original fields has been copied"
784 { record => $record, field => '953', field_numbers => [2] }
787 [ '3010023918', 'CD' ],
788 "copy all: second original fields has been copied"
791 #- copy only the first field
803 { record => $record, field => '953', field_numbers => [1] }
806 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
807 "copy first: first original fields has been copied"
812 { record => $record, field => '953', field_numbers => [2] }
815 [ '3010023918', 'CD' ],
816 "copy first: second original fields has been copied"
819 [ read_field( { record => $record, field => '954' } ) ],
820 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
821 "copy first: only first, first 953 has been copied"
824 $record = new_record;
825 $record->append_fields(
833 #- copy all fields and modify values using a regex
839 regex => { search => '30100', replace => '42424' }
845 { record => $record, field => '952', field_numbers => [1] }
848 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
849 "copy all with regex: original first field still exists"
854 { record => $record, field => '952', field_numbers => [2] }
857 [ '3010023918', 'CD' ],
858 "copy all with regex: original second field still exists"
863 { record => $record, field => '953', field_numbers => [1] }
866 [ '4242423917', 'BK', 'GEN', '2001-06-25' ],
867 "copy all with regex: first original fields has been copied"
872 { record => $record, field => '953', field_numbers => [2] }
875 [ '4242423918', 'CD' ],
876 "copy all with regex: second original fields has been copied"
886 read_field( { record => $record, field => '999', subfield => '9' } );
887 is_deeply( \@fields_9999, [],
888 'copy a nonexistent field does not create a new one' );
890 $record = new_record;
902 { record => $record, field => '650', field_numbers => [2] }
905 [ 'The art of computer programming', 'Donald E. Knuth.' ],
906 'Copy a field to existent fields should create a new field'
911 { record => $record, field => '650', field_numbers => [1] }
914 [ 'Computer programming.', '462' ],
915 'Copy a field to existent fields should create a new field, the original one should not have been updated'
920 # copy_and_replace_field - subfield
921 subtest 'copy_and_replace_field' => sub {
923 subtest 'copy and replace subfield' => sub {
925 my $record = new_record;
926 $record->append_fields(
929 a => 'Computer algorithms.',
933 copy_and_replace_field(
937 from_subfield => 'a',
945 { record => $record, field => '245', subfield => 'a' }
948 ['The art of computer programming'],
949 'Copy and replace should not have modify original subfield 245$a (same as copy)'
954 { record => $record, field => '246', subfield => 'a' }
957 ['The art of computer programming'],
958 'Copy and replace should create a new 246$a (same as copy)'
961 $record = new_record;
962 $record->append_fields(
965 a => 'Computer algorithms.',
969 copy_and_replace_field(
973 from_subfield => 'a',
979 read_field( { record => $record, field => '651', subfield => 'a' } );
982 [ 'Computer programming.', 'Computer algorithms.' ],
983 'Copy and replace multivalued field (same as copy)'
985 delete_field( { record => $record, field => '651' } );
987 copy_and_replace_field(
991 from_subfield => 'a',
1000 { record => $record, field => '651', subfield => 'a' }
1003 ['Computer programming.'],
1004 'Copy and replace first field 650$a should only copy the 1st (same as copy)'
1007 copy_and_replace_field(
1010 from_field => '650',
1011 from_subfield => 'a',
1014 field_numbers => [2]
1020 { record => $record, field => '651', subfield => 'a' }
1023 ['Computer algorithms.'],
1024 'Copy and replace second field 650$a should erase 651$a'
1026 delete_field( { record => $record, field => '651' } );
1028 copy_and_replace_field(
1031 from_field => '650',
1032 from_subfield => 'a',
1035 regex => { search => 'Computer', replace => 'The art of' }
1039 read_field( { record => $record, field => '651', subfield => 'a' } );
1042 [ 'The art of programming.', 'The art of algorithms.' ],
1043 'Copy and replace field using regex (same as copy)'
1045 delete_field( { record => $record, field => '651' } );
1047 copy_and_replace_field(
1050 from_field => '650',
1051 from_subfield => 'a',
1054 regex => { search => 'Computer', replace => 'The mistake of' }
1058 read_field( { record => $record, field => '651', subfield => 'a' } );
1061 [ 'The mistake of programming.', 'The mistake of algorithms.' ],
1062 'Copy and replace fields using regex on existing fields (same as copy)'
1064 delete_field( { record => $record, field => '651' } );
1066 copy_and_replace_field(
1069 from_field => '650',
1070 from_subfield => 'a',
1073 regex => { search => 'Computer', replace => 'The art of' }
1077 read_field( { record => $record, field => '651', subfield => 'a' } );
1080 [ 'The art of programming.', 'The art of algorithms.', ],
1081 'Copy and replace all fields using regex (same as copy)'
1083 delete_field( { record => $record, field => '651' } );
1085 copy_and_replace_field(
1088 from_field => '650',
1089 from_subfield => 'a',
1092 regex => { search => 'Computer', replace => 'The art of' },
1093 field_numbers => [1]
1097 read_field( { record => $record, field => '651', subfield => 'a' } );
1100 [ 'The art of programming.', ],
1101 'Copy and replace first field using regex (same as copy)'
1103 delete_field( { record => $record, field => '651' } );
1105 # Copy and replace with regex modifiers
1106 $record = new_record;
1107 $record->append_fields(
1110 a => 'Computer algorithms.',
1114 copy_and_replace_field(
1117 from_field => '650',
1118 from_subfield => 'a',
1121 regex => { search => 'o', replace => 'foo' }
1125 read_field( { record => $record, field => '652', subfield => 'a' } );
1128 [ 'Cfoomputer programming.', 'Cfoomputer algorithms.' ],
1129 'Copy and replace field using regex (same as copy)'
1132 copy_and_replace_field(
1135 from_field => '650',
1136 from_subfield => 'a',
1139 regex => { search => 'o', replace => 'foo', modifiers => 'g' }
1143 read_field( { record => $record, field => '653', subfield => 'a' } );
1146 [ 'Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.' ],
1147 'Copy and replace field using regex (same as copy)'
1150 copy_and_replace_field(
1153 from_field => '650',
1154 from_subfield => 'a',
1157 regex => { search => 'O', replace => 'foo', modifiers => 'i' }
1161 read_field( { record => $record, field => '654', subfield => 'a' } );
1164 [ 'Cfoomputer programming.', 'Cfoomputer algorithms.' ],
1165 'Copy and replace field using regex (same as copy)'
1168 copy_and_replace_field(
1171 from_field => '650',
1172 from_subfield => 'a',
1175 regex => { search => 'O', replace => 'foo', modifiers => 'gi' }
1179 read_field( { record => $record, field => '655', subfield => 'a' } );
1182 [ 'Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.' ],
1183 'Copy and replace field using regex (same as copy)'
1186 $record = new_record;
1187 $record->append_fields(
1195 copy_and_replace_field(
1198 from_field => '952',
1199 from_subfield => 'd',
1205 read_field( { record => $record, field => '952', subfield => 'd' } );
1208 [ '2001-06-25', '2001-06-25' ],
1209 'copy and replace 952$d into others 952 field'
1212 copy_and_replace_field(
1215 from_field => '111',
1216 from_subfield => '1',
1222 read_field( { record => $record, field => '999', subfield => '9' } );
1223 is_deeply( \@fields_9999, [],
1224 'copy and replace a nonexistent subfield does not create a new one (same as copy)' );
1226 $record = new_record;
1227 copy_and_replace_field(
1231 from_subfield => 'a',
1234 regex => { search => '^', replace => 'BEGIN ' }
1237 # This is the same as update the subfield
1241 { record => $record, field => '245', subfield => 'a' }
1244 ['BEGIN The art of computer programming'],
1245 'Copy and replace - Update a subfield: add a string at the beginning'
1248 $record = new_record;
1249 copy_and_replace_field(
1253 from_subfield => 'a',
1256 regex => { search => '$', replace => ' END' }
1259 # This is the same as update the subfield
1263 { record => $record, field => '245', subfield => 'a' }
1266 ['The art of computer programming END'],
1267 'Copy and replace - Update a subfield: add a string at the end'
1270 $record = new_record;
1271 copy_and_replace_field(
1275 from_subfield => 'a',
1278 regex => { search => '(art)', replace => 'sm$1 $1' }
1281 # This is the same as update the subfield
1285 { record => $record, field => '245', subfield => 'a' }
1288 ['The smart art of computer programming'],
1289 'Copy and replace - Update a subfield: use capture groups'
1292 $record = new_record;
1293 copy_and_replace_field(
1297 from_subfield => 'c',
1306 { record => $record, field => '650' }
1309 [ 'Computer programming.', '462', 'Donald E. Knuth.' ],
1310 'Copy and replace a subfield to an existent field but inexistent subfield (same as copy)'
1313 $record = new_record;
1314 copy_and_replace_field(
1318 from_subfield => 'c',
1327 { record => $record, field => '650' }
1330 [ 'Computer programming.', 'Donald E. Knuth.' ],
1331 'Copy and replace a subfield to an existent field / subfield, the origin subfield is replaced'
1335 subtest 'copy and replace field' => sub {
1337 my $record = new_record;
1338 $record->append_fields(
1347 copy_and_replace_field(
1348 { record => $record, from_field => '952', to_field => '953' } );
1349 my @fields_952 = read_field( { record => $record, field => '952' } );
1353 { record => $record, field => '952', field_numbers => [1] }
1356 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1357 "copy all: original first field still exists (same as copy)"
1362 { record => $record, field => '952', field_numbers => [2] }
1365 [ '3010023918', 'CD' ],
1366 "copy all: original second field still exists (same as copy)"
1371 { record => $record, field => '953', field_numbers => [1] }
1374 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1375 "copy all: first original fields has been copied (same as copy)"
1380 { record => $record, field => '953', field_numbers => [2] }
1383 [ '3010023918', 'CD' ],
1384 "copy all: second original fields has been copied (same as copy)"
1387 #- copy only the first field
1388 copy_and_replace_field(
1391 from_field => '953',
1393 field_numbers => [1]
1399 { record => $record, field => '953', field_numbers => [1] }
1402 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1403 "copy and replace first: first original fields has been copied (same as copy)"
1408 { record => $record, field => '953', field_numbers => [2] }
1411 [ '3010023918', 'CD' ],
1412 "copy and replace first: second original fields has been copied (same as copy)"
1415 [ read_field( { record => $record, field => '954' } ) ],
1416 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1417 "copy and replace first: only first, first 953 has been copied (same as copy)"
1420 $record = new_record;
1421 $record->append_fields(
1429 #- copy and replace all fields and modify values using a regex
1430 copy_and_replace_field(
1433 from_field => '952',
1435 regex => { search => '30100', replace => '42424' }
1441 { record => $record, field => '952', field_numbers => [1] }
1444 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1445 "copy and replace all with regex: original first field still exists (same as copy)"
1450 { record => $record, field => '952', field_numbers => [2] }
1453 [ '3010023918', 'CD' ],
1454 "copy and replace all with regex: original second field still exists (same as copy)"
1459 { record => $record, field => '953', field_numbers => [1] }
1462 [ '4242423917', 'BK', 'GEN', '2001-06-25' ],
1463 "copy and replace all with regex: first original fields has been copied (same as copy)"
1468 { record => $record, field => '953', field_numbers => [2] }
1471 [ '4242423918', 'CD' ],
1472 "copy and replace all with regex: second original fields has been copied (same as copy)"
1474 copy_and_replace_field(
1477 from_field => '111',
1482 read_field( { record => $record, field => '999', subfield => '9' } );
1483 is_deeply( \@fields_9999, [],
1484 'copy and replace a nonexistent field does not create a new one (same as copy)' );
1486 $record = new_record;
1487 copy_and_replace_field(
1498 { record => $record, field => '650', field_numbers => [1] }
1501 [ 'The art of computer programming', 'Donald E. Knuth.' ],
1502 'Copy and replace to an existent field should erase the original field'
1507 { record => $record, field => '650', field_numbers => [2] }
1511 'Copy and replace to an existent field should not create a new field'
1516 # move_field - subfields
1517 subtest 'move_field' => sub {
1519 subtest 'move subfield' => sub {
1521 my $record = new_record;
1522 my ( @fields_952d, @fields_952c, @fields_954c, @fields_954p );
1523 $record->append_fields(
1533 from_field => '952',
1534 from_subfield => 'c',
1540 read_field( { record => $record, field => '952', subfield => 'c' } );
1542 read_field( { record => $record, field => '954', subfield => 'c' } );
1543 is_deeply( \@fields_952c, [], 'The 952$c has moved' );
1544 is_deeply( \@fields_954c, ['GEN'], 'Now 954$c exists' );
1549 from_field => '952',
1550 from_subfield => 'p',
1553 field_numbers => [1]
1555 ); # Move the first field
1557 read_field( { record => $record, field => '952', subfield => 'p' } );
1559 read_field( { record => $record, field => '954', subfield => 'p' } );
1560 is_deeply( \@fields_952p, ['3010023917'], 'One of 952$p has moved' );
1561 is_deeply( \@fields_954p, ['3010023917'], 'Now 954$p exists' );
1563 $record = new_record;
1564 $record->append_fields(
1575 from_field => '952',
1576 from_subfield => 'p',
1582 read_field( { record => $record, field => '952', subfield => 'p' } );
1584 read_field( { record => $record, field => '954', subfield => 'p' } );
1585 is_deeply( \@fields_952p, [], 'All 952$p have moved' );
1588 [ '3010023917', '3010023917' ],
1595 from_field => '111',
1596 from_subfield => '1',
1602 read_field( { record => $record, field => '999', subfield => '9' } );
1603 is_deeply( \@fields_9999, [],
1604 'move a nonexistent subfield does not create a new one' );
1607 subtest 'move field' => sub {
1610 # move_field - fields
1611 my $record = new_record;
1612 $record->append_fields(
1622 { record => $record, from_field => '952', to_field => '953' } );
1623 is_deeply( [ read_field( { record => $record, field => '952' } ) ],
1624 [], "original fields don't exist" );
1628 { record => $record, field => '953', field_numbers => [1] }
1631 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1632 "first original fields has been copied"
1637 { record => $record, field => '953', field_numbers => [2] }
1640 [ '3010023917', 'BK' ],
1641 "second original fields has been copied"
1644 #- Move only the first field
1648 from_field => '953',
1650 field_numbers => [1]
1654 [ read_field( { record => $record, field => '953' } ) ],
1655 [ '3010023917', 'BK' ],
1656 "only first, the second 953 still exists"
1659 [ read_field( { record => $record, field => '954' } ) ],
1660 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1661 "only first, first 953 has been copied"
1664 $record = new_record;
1665 $record->append_fields(
1673 #- Move all fields and modify values using a regex
1677 from_field => '952',
1679 regex => { search => 'BK', replace => 'DVD' }
1682 is_deeply( [ read_field( { record => $record, field => '952' } ) ],
1683 [], "use a regex, original fields don't exist" );
1687 { record => $record, field => '953', field_numbers => [1] }
1690 [ '3010023917', 'DVD', 'GEN', '2001-06-25' ],
1691 "use a regex, first original fields has been copied"
1696 { record => $record, field => '953', field_numbers => [2] }
1699 [ '3010023917', 'DVD' ],
1700 "use a regex, second original fields has been copied"
1706 from_field => '111',
1711 read_field( { record => $record, field => '999', subfield => '9' } );
1712 is_deeply( \@fields_9999, [],
1713 'move a nonexistent field does not create a new one' );
1719 subtest 'delete_field' => sub {
1721 subtest 'delete subfield' => sub {
1723 my $record = new_record;
1724 $record->append_fields(
1737 field_numbers => [1]
1741 read_field( { record => $record, field => '952', subfield => 'p' } );
1742 is_deeply( \@fields_952p, ['3010023917'], 'Delete first 952$p' );
1744 $record = new_record;
1745 $record->append_fields(
1752 delete_field( { record => $record, field => '952', subfield => 'p' } );
1754 read_field( { record => $record, field => '952', subfield => 'p' } );
1755 is_deeply( \@fields_952p, [], 'Delete all 952$p' );
1757 $record = new_record;
1758 $record->append_fields(
1761 a => 'Murakami, Haruki',
1762 0 => 'https://id.loc.gov/authorities/names/n81152393.html',
1765 delete_field( { record => $record, field => '600', subfield => '0' } );
1766 my @fields_600 = read_field( { record => $record, field => '600' } );
1767 is_deeply( \@fields_600, ['Murakami, Haruki'], 'Delete all 600$0, only subfield 0 deleted' );
1770 subtest 'delete field' => sub {
1772 my $record = new_record;
1773 delete_field( { record => $record, field => '952' } );
1774 my @fields_952 = read_field( { record => $record, field => '952' } );
1775 is_deeply( \@fields_952, [], 'Delete all 952, 1 deleted' );
1777 $record = new_record;
1778 $record->append_fields(
1785 delete_field( { record => $record, field => '952' } );
1786 @fields_952 = read_field( { record => $record, field => '952' } );
1787 is_deeply( \@fields_952, [], 'Delete all 952, 2 deleted' );
1791 subtest 'field_equals' => sub {
1793 my $record = new_record;
1794 subtest 'standard MARC fields' => sub {
1796 my $match = Koha::SimpleMARC::field_equals({
1802 is_deeply( $match, [], '100$a not equal to "Donald"' );
1804 $match = Koha::SimpleMARC::field_equals({
1811 is_deeply( $match, [1], 'first 100$a matches "Donald"');
1814 subtest 'control fields' => sub {
1816 my $match = Koha::SimpleMARC::field_equals({
1822 is_deeply( $match, [], '008 control field not equal to "eng"' );
1824 $match = Koha::SimpleMARC::field_equals({
1831 is_deeply( $match, [1], 'first 008 control field matches "eng"' );