5 use Test::More tests => 11;
8 use_ok("MARC::Record");
9 use_ok("Koha::SimpleMARC", qw( field_exists read_field update_field copy_field copy_and_replace_field move_field delete_field field_equals ));
12 my $record = MARC::Record->new;
13 $record->leader('03174nam a2200445 a 4500');
16 '008', '120829t20132012nyu bk 001 0ceng',
20 a => 'Knuth, Donald Ervin',
25 a => 'The art of computer programming',
26 c => 'Donald E. Knuth.',
30 a => 'Computer programming.',
41 $record->append_fields(@fields);
46 subtest 'field_exists' => sub {
48 my $record = new_record;
50 field_exists( { record => $record, field => '650', subfield => 'a' } ),
55 field_exists( { record => $record, field => '650', subfield => 'b' } ),
57 '650$b does not exist'
60 $record->append_fields(
63 a => 'Computer algorithms.',
69 field_exists( { record => $record, field => '650', subfield => 'a' } ),
71 '650$a exists, field_exists returns the 2 field numbers'
76 subtest 'read_field' => sub {
78 subtest 'read subfield' => sub {
80 my $record = new_record;
81 $record->append_fields(
84 a => 'Computer algorithms.',
94 read_field( { record => $record, field => '650', subfield => 'a' } );
95 is_deeply( $fields_650a[0], 'Computer programming.', 'first 650$a' );
96 is_deeply( $fields_650a[1], 'Computer algorithms.', 'second 650$a' );
108 ['Computer programming.'],
122 ['Computer algorithms.'],
137 'There is no 3 650$a'
154 subtest 'read field' => sub {
156 my $record = new_record;
157 $record->append_fields(
160 a => 'Computer algorithms.',
173 [ 'Computer programming.', '462', 'Computer algorithms.', '463' ],
174 'Get the all subfield values for field 650'
186 [ 'Computer programming.', '462' ],
187 'Get the all subfield values for the first field 650'
192 { record => $record, field => '650', field_numbers => [2] }
195 [ 'Computer algorithms.', '463' ],
196 'Get the all subfield values for the second field 650'
201 { record => $record, field => '650', field_numbers => [3] }
205 'Get the all subfield values for the third field 650 which does not exist'
211 subtest 'update_field' => sub {
213 subtest 'update subfield' => sub {
215 my $record = new_record;
222 values => ['3010023918']
228 { record => $record, field => '952', subfield => 'p' }
232 'update existing subfield 952$p'
234 delete_field( { record => $record, field => '952' } );
240 values => ['3010023918']
254 { record => $record, field => '952', subfield => 'p' }
258 'create subfield 952$p'
262 { record => $record, field => '952', subfield => 'y' }
265 'create subfield 952$k on existing 952 field'
268 $record->append_fields(
281 values => ['3010023919']
285 read_field( { record => $record, field => '952', subfield => 'p' } );
288 [ '3010023919', '3010023919' ],
289 'update all subfields 952$p with the same value'
297 values => [ '3010023917', '3010023918' ]
301 read_field( { record => $record, field => '952', subfield => 'p' } );
304 [ '3010023917', '3010023918' ],
305 'update all subfields 952$p with the different values'
313 values => [ '654321' ]
317 read_field( { record => $record, field => '952', subfield => '0' } );
320 [ '654321', '654321' ],
321 'update all subfields 952$0 with the same value'
327 # copy_field - subfield
328 subtest 'copy_field' => sub {
330 subtest 'copy subfield' => sub {
332 my $record = new_record;
333 $record->append_fields(
336 a => 'Computer algorithms.',
344 from_subfield => 'a',
352 { record => $record, field => '245', subfield => 'a' }
355 ['The art of computer programming'],
356 'After copy 245$a still exists'
361 { record => $record, field => '246', subfield => 'a' }
364 ['The art of computer programming'],
365 '246$a is a new field'
367 delete_field( { record => $record, field => '246' } );
370 { record => $record, field => '246', subfield => 'a' }
373 '246$a does not exist anymore'
380 from_subfield => 'a',
386 read_field( { record => $record, field => '651', subfield => 'a' } );
389 [ 'Computer programming.', 'Computer algorithms.' ],
390 'Copy multivalued field'
392 delete_field( { record => $record, field => '651' } );
398 from_subfield => 'a',
407 { record => $record, field => '651', subfield => 'a' }
410 ['Computer programming.'],
411 'Copy first field 650$a'
413 delete_field( { record => $record, field => '652' } );
419 from_subfield => 'a',
428 { record => $record, field => '651', subfield => 'a' }
431 ['Computer programming.', 'Computer algorithms.'],
432 'Copy second field 650$a'
434 delete_field( { record => $record, field => '651' } );
440 from_subfield => 'a',
443 regex => { search => 'Computer', replace => 'The art of' }
447 read_field( { record => $record, field => '651', subfield => 'a' } );
450 [ 'The art of programming.', 'The art of algorithms.' ],
451 'Copy field using regex'
453 delete_field( { record => $record, field => '651' } );
459 from_subfield => 'a',
462 regex => { search => 'Computer', replace => 'The mistake of' }
466 read_field( { record => $record, field => '651', subfield => 'a' } );
469 [ 'The mistake of programming.', 'The mistake of algorithms.' ],
470 'Copy fields using regex on existing fields'
472 delete_field( { record => $record, field => '651' } );
478 from_subfield => 'a',
481 regex => { search => 'Computer', replace => 'The art of' }
485 read_field( { record => $record, field => '651', subfield => 'a' } );
488 [ 'The art of programming.', 'The art of algorithms.', ],
489 'Copy all fields using regex'
491 delete_field( { record => $record, field => '651' } );
497 from_subfield => 'a',
500 regex => { search => 'Computer', replace => 'The art of' },
505 read_field( { record => $record, field => '651', subfield => 'a' } );
508 [ 'The art of programming.', ],
509 'Copy first field using regex'
511 delete_field( { record => $record, field => '651' } );
513 # Copy with regex modifiers
514 $record = new_record;
515 $record->append_fields(
518 a => 'Computer algorithms.',
526 from_subfield => 'a',
529 regex => { search => 'o', replace => 'foo' }
533 read_field( { record => $record, field => '652', subfield => 'a' } );
536 [ 'Cfoomputer programming.', 'Cfoomputer algorithms.' ],
537 'Copy field using regex'
544 from_subfield => 'a',
547 regex => { search => 'o', replace => 'foo', modifiers => 'g' }
551 read_field( { record => $record, field => '653', subfield => 'a' } );
554 [ 'Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.' ],
555 'Copy field using regex'
562 from_subfield => 'a',
565 regex => { search => 'O', replace => 'foo', modifiers => 'i' }
569 read_field( { record => $record, field => '654', subfield => 'a' } );
572 [ 'Cfoomputer programming.', 'Cfoomputer algorithms.' ],
573 'Copy field using regex'
580 from_subfield => 'a',
583 regex => { search => 'O', replace => 'foo', modifiers => 'gi' }
587 read_field( { record => $record, field => '655', subfield => 'a' } );
590 [ 'Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.' ],
591 'Copy field using regex'
594 $record = new_record;
595 $record->append_fields(
607 from_subfield => 'd',
613 read_field( { record => $record, field => '952', subfield => 'd' } );
614 # FIXME We need a new action "duplicate" if we don't want to modify the original field
617 [ '2001-06-25', '2001-06-25', '2001-06-25' ],
618 'copy 952$d into others 952 field'
625 from_subfield => '1',
631 read_field( { record => $record, field => '999', subfield => '9' } );
632 is_deeply( \@fields_9999, [],
633 'copy a nonexistent subfield does not create a new one' );
635 $record = new_record;
640 from_subfield => 'a',
643 regex => { search => '^', replace => 'BEGIN ' }
649 { record => $record, field => '245', subfield => 'a' }
652 ['The art of computer programming', 'BEGIN The art of computer programming'],
653 'Update a subfield: add a string at the beginning'
656 $record = new_record;
661 from_subfield => 'a',
664 regex => { search => '$', replace => ' END' }
670 { record => $record, field => '245', subfield => 'a' }
673 ['The art of computer programming', 'The art of computer programming END'],
674 'Update a subfield: add a string at the end'
677 $record = new_record;
682 from_subfield => 'a',
685 regex => { search => '(art)', replace => 'sm$1 $1' }
691 { record => $record, field => '245', subfield => 'a' }
694 ['The art of computer programming', 'The smart art of computer programming'],
695 'Update a subfield: use capture groups'
698 $record = new_record;
703 from_subfield => 'c',
712 { record => $record, field => '650' }
715 [ 'Computer programming.', '462', 'Donald E. Knuth.' ],
716 'Copy a subfield to an existent field but inexistent subfield'
719 $record = new_record;
724 from_subfield => 'c',
733 { record => $record, field => '650' }
736 [ 'Computer programming.', '462', 'Donald E. Knuth.' ],
737 'Copy a subfield to an existent field / subfield'
741 subtest 'copy field' => sub {
743 my $record = new_record;
744 $record->append_fields(
754 { record => $record, from_field => '952', to_field => '953' } );
755 my @fields_952 = read_field( { record => $record, field => '952' } );
759 { record => $record, field => '952', field_numbers => [1] }
762 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
763 "copy all: original first field still exists"
768 { record => $record, field => '952', field_numbers => [2] }
771 [ '3010023918', 'CD' ],
772 "copy all: original second field still exists"
777 { record => $record, field => '953', field_numbers => [1] }
780 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
781 "copy all: first original fields has been copied"
786 { record => $record, field => '953', field_numbers => [2] }
789 [ '3010023918', 'CD' ],
790 "copy all: second original fields has been copied"
793 #- copy only the first field
805 { record => $record, field => '953', field_numbers => [1] }
808 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
809 "copy first: first original fields has been copied"
814 { record => $record, field => '953', field_numbers => [2] }
817 [ '3010023918', 'CD' ],
818 "copy first: second original fields has been copied"
821 [ read_field( { record => $record, field => '954' } ) ],
822 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
823 "copy first: only first, first 953 has been copied"
826 $record = new_record;
827 $record->append_fields(
835 #- copy all fields and modify values using a regex
841 regex => { search => '30100', replace => '42424' }
847 { record => $record, field => '952', field_numbers => [1] }
850 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
851 "copy all with regex: original first field still exists"
856 { record => $record, field => '952', field_numbers => [2] }
859 [ '3010023918', 'CD' ],
860 "copy all with regex: original second field still exists"
865 { record => $record, field => '953', field_numbers => [1] }
868 [ '4242423917', 'BK', 'GEN', '2001-06-25' ],
869 "copy all with regex: first original fields has been copied"
874 { record => $record, field => '953', field_numbers => [2] }
877 [ '4242423918', 'CD' ],
878 "copy all with regex: second original fields has been copied"
888 read_field( { record => $record, field => '999', subfield => '9' } );
889 is_deeply( \@fields_9999, [],
890 'copy a nonexistent field does not create a new one' );
892 $record = new_record;
904 { record => $record, field => '650', field_numbers => [2] }
907 [ 'The art of computer programming', 'Donald E. Knuth.' ],
908 'Copy a field to existent fields should create a new field'
913 { record => $record, field => '650', field_numbers => [1] }
916 [ 'Computer programming.', '462' ],
917 'Copy a field to existent fields should create a new field, the original one should not have been updated'
922 # copy_and_replace_field - subfield
923 subtest 'copy_and_replace_field' => sub {
925 subtest 'copy and replace subfield' => sub {
927 my $record = new_record;
928 $record->append_fields(
931 a => 'Computer algorithms.',
935 copy_and_replace_field(
939 from_subfield => 'a',
947 { record => $record, field => '245', subfield => 'a' }
950 ['The art of computer programming'],
951 'Copy and replace should not have modify original subfield 245$a (same as copy)'
956 { record => $record, field => '246', subfield => 'a' }
959 ['The art of computer programming'],
960 'Copy and replace should create a new 246$a (same as copy)'
963 $record = new_record;
964 $record->append_fields(
967 a => 'Computer algorithms.',
971 copy_and_replace_field(
975 from_subfield => 'a',
981 read_field( { record => $record, field => '651', subfield => 'a' } );
984 [ 'Computer programming.', 'Computer algorithms.' ],
985 'Copy and replace multivalued field (same as copy)'
987 delete_field( { record => $record, field => '651' } );
989 copy_and_replace_field(
993 from_subfield => 'a',
1002 { record => $record, field => '651', subfield => 'a' }
1005 ['Computer programming.'],
1006 'Copy and replace first field 650$a should only copy the 1st (same as copy)'
1009 copy_and_replace_field(
1012 from_field => '650',
1013 from_subfield => 'a',
1016 field_numbers => [2]
1022 { record => $record, field => '651', subfield => 'a' }
1025 ['Computer algorithms.'],
1026 'Copy and replace second field 650$a should erase 651$a'
1028 delete_field( { record => $record, field => '651' } );
1030 copy_and_replace_field(
1033 from_field => '650',
1034 from_subfield => 'a',
1037 regex => { search => 'Computer', replace => 'The art of' }
1041 read_field( { record => $record, field => '651', subfield => 'a' } );
1044 [ 'The art of programming.', 'The art of algorithms.' ],
1045 'Copy and replace field using regex (same as copy)'
1047 delete_field( { record => $record, field => '651' } );
1049 copy_and_replace_field(
1052 from_field => '650',
1053 from_subfield => 'a',
1056 regex => { search => 'Computer', replace => 'The mistake of' }
1060 read_field( { record => $record, field => '651', subfield => 'a' } );
1063 [ 'The mistake of programming.', 'The mistake of algorithms.' ],
1064 'Copy and replace fields using regex on existing fields (same as copy)'
1066 delete_field( { record => $record, field => '651' } );
1068 copy_and_replace_field(
1071 from_field => '650',
1072 from_subfield => 'a',
1075 regex => { search => 'Computer', replace => 'The art of' }
1079 read_field( { record => $record, field => '651', subfield => 'a' } );
1082 [ 'The art of programming.', 'The art of algorithms.', ],
1083 'Copy and replace all fields using regex (same as copy)'
1085 delete_field( { record => $record, field => '651' } );
1087 copy_and_replace_field(
1090 from_field => '650',
1091 from_subfield => 'a',
1094 regex => { search => 'Computer', replace => 'The art of' },
1095 field_numbers => [1]
1099 read_field( { record => $record, field => '651', subfield => 'a' } );
1102 [ 'The art of programming.', ],
1103 'Copy and replace first field using regex (same as copy)'
1105 delete_field( { record => $record, field => '651' } );
1107 # Copy and replace with regex modifiers
1108 $record = new_record;
1109 $record->append_fields(
1112 a => 'Computer algorithms.',
1116 copy_and_replace_field(
1119 from_field => '650',
1120 from_subfield => 'a',
1123 regex => { search => 'o', replace => 'foo' }
1127 read_field( { record => $record, field => '652', subfield => 'a' } );
1130 [ 'Cfoomputer programming.', 'Cfoomputer algorithms.' ],
1131 'Copy and replace field using regex (same as copy)'
1134 copy_and_replace_field(
1137 from_field => '650',
1138 from_subfield => 'a',
1141 regex => { search => 'o', replace => 'foo', modifiers => 'g' }
1145 read_field( { record => $record, field => '653', subfield => 'a' } );
1148 [ 'Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.' ],
1149 'Copy and replace field using regex (same as copy)'
1152 copy_and_replace_field(
1155 from_field => '650',
1156 from_subfield => 'a',
1159 regex => { search => 'O', replace => 'foo', modifiers => 'i' }
1163 read_field( { record => $record, field => '654', subfield => 'a' } );
1166 [ 'Cfoomputer programming.', 'Cfoomputer algorithms.' ],
1167 'Copy and replace field using regex (same as copy)'
1170 copy_and_replace_field(
1173 from_field => '650',
1174 from_subfield => 'a',
1177 regex => { search => 'O', replace => 'foo', modifiers => 'gi' }
1181 read_field( { record => $record, field => '655', subfield => 'a' } );
1184 [ 'Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.' ],
1185 'Copy and replace field using regex (same as copy)'
1188 $record = new_record;
1189 $record->append_fields(
1197 copy_and_replace_field(
1200 from_field => '952',
1201 from_subfield => 'd',
1207 read_field( { record => $record, field => '952', subfield => 'd' } );
1210 [ '2001-06-25', '2001-06-25' ],
1211 'copy and replace 952$d into others 952 field'
1214 copy_and_replace_field(
1217 from_field => '111',
1218 from_subfield => '1',
1224 read_field( { record => $record, field => '999', subfield => '9' } );
1225 is_deeply( \@fields_9999, [],
1226 'copy and replace a nonexistent subfield does not create a new one (same as copy)' );
1228 $record = new_record;
1229 copy_and_replace_field(
1233 from_subfield => 'a',
1236 regex => { search => '^', replace => 'BEGIN ' }
1239 # This is the same as update the subfield
1243 { record => $record, field => '245', subfield => 'a' }
1246 ['BEGIN The art of computer programming'],
1247 'Copy and replace - Update a subfield: add a string at the beginning'
1250 $record = new_record;
1251 copy_and_replace_field(
1255 from_subfield => 'a',
1258 regex => { search => '$', replace => ' END' }
1261 # This is the same as update the subfield
1265 { record => $record, field => '245', subfield => 'a' }
1268 ['The art of computer programming END'],
1269 'Copy and replace - Update a subfield: add a string at the end'
1272 $record = new_record;
1273 copy_and_replace_field(
1277 from_subfield => 'a',
1280 regex => { search => '(art)', replace => 'sm$1 $1' }
1283 # This is the same as update the subfield
1287 { record => $record, field => '245', subfield => 'a' }
1290 ['The smart art of computer programming'],
1291 'Copy and replace - Update a subfield: use capture groups'
1294 $record = new_record;
1295 copy_and_replace_field(
1299 from_subfield => 'c',
1308 { record => $record, field => '650' }
1311 [ 'Computer programming.', '462', 'Donald E. Knuth.' ],
1312 'Copy and replace a subfield to an existent field but inexistent subfield (same as copy)'
1315 $record = new_record;
1316 copy_and_replace_field(
1320 from_subfield => 'c',
1329 { record => $record, field => '650' }
1332 [ 'Computer programming.', 'Donald E. Knuth.' ],
1333 'Copy and replace a subfield to an existent field / subfield, the origin subfield is replaced'
1337 subtest 'copy and replace field' => sub {
1339 my $record = new_record;
1340 $record->append_fields(
1349 copy_and_replace_field(
1350 { record => $record, from_field => '952', to_field => '953' } );
1351 my @fields_952 = read_field( { record => $record, field => '952' } );
1355 { record => $record, field => '952', field_numbers => [1] }
1358 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1359 "copy all: original first field still exists (same as copy)"
1364 { record => $record, field => '952', field_numbers => [2] }
1367 [ '3010023918', 'CD' ],
1368 "copy all: original second field still exists (same as copy)"
1373 { record => $record, field => '953', field_numbers => [1] }
1376 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1377 "copy all: first original fields has been copied (same as copy)"
1382 { record => $record, field => '953', field_numbers => [2] }
1385 [ '3010023918', 'CD' ],
1386 "copy all: second original fields has been copied (same as copy)"
1389 #- copy only the first field
1390 copy_and_replace_field(
1393 from_field => '953',
1395 field_numbers => [1]
1401 { record => $record, field => '953', field_numbers => [1] }
1404 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1405 "copy and replace first: first original fields has been copied (same as copy)"
1410 { record => $record, field => '953', field_numbers => [2] }
1413 [ '3010023918', 'CD' ],
1414 "copy and replace first: second original fields has been copied (same as copy)"
1417 [ read_field( { record => $record, field => '954' } ) ],
1418 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1419 "copy and replace first: only first, first 953 has been copied (same as copy)"
1422 $record = new_record;
1423 $record->append_fields(
1431 #- copy and replace all fields and modify values using a regex
1432 copy_and_replace_field(
1435 from_field => '952',
1437 regex => { search => '30100', replace => '42424' }
1443 { record => $record, field => '952', field_numbers => [1] }
1446 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1447 "copy and replace all with regex: original first field still exists (same as copy)"
1452 { record => $record, field => '952', field_numbers => [2] }
1455 [ '3010023918', 'CD' ],
1456 "copy and replace all with regex: original second field still exists (same as copy)"
1461 { record => $record, field => '953', field_numbers => [1] }
1464 [ '4242423917', 'BK', 'GEN', '2001-06-25' ],
1465 "copy and replace all with regex: first original fields has been copied (same as copy)"
1470 { record => $record, field => '953', field_numbers => [2] }
1473 [ '4242423918', 'CD' ],
1474 "copy and replace all with regex: second original fields has been copied (same as copy)"
1476 copy_and_replace_field(
1479 from_field => '111',
1484 read_field( { record => $record, field => '999', subfield => '9' } );
1485 is_deeply( \@fields_9999, [],
1486 'copy and replace a nonexistent field does not create a new one (same as copy)' );
1488 $record = new_record;
1489 copy_and_replace_field(
1500 { record => $record, field => '650', field_numbers => [1] }
1503 [ 'The art of computer programming', 'Donald E. Knuth.' ],
1504 'Copy and replace to an existent field should erase the original field'
1509 { record => $record, field => '650', field_numbers => [2] }
1513 'Copy and replace to an existent field should not create a new field'
1518 # move_field - subfields
1519 subtest 'move_field' => sub {
1521 subtest 'move subfield' => sub {
1523 my $record = new_record;
1524 my ( @fields_952d, @fields_952c, @fields_954c, @fields_954p );
1525 $record->append_fields(
1535 from_field => '952',
1536 from_subfield => 'c',
1542 read_field( { record => $record, field => '952', subfield => 'c' } );
1544 read_field( { record => $record, field => '954', subfield => 'c' } );
1545 is_deeply( \@fields_952c, [], 'The 952$c has moved' );
1546 is_deeply( \@fields_954c, ['GEN'], 'Now 954$c exists' );
1551 from_field => '952',
1552 from_subfield => 'p',
1555 field_numbers => [1]
1557 ); # Move the first field
1559 read_field( { record => $record, field => '952', subfield => 'p' } );
1561 read_field( { record => $record, field => '954', subfield => 'p' } );
1562 is_deeply( \@fields_952p, ['3010023917'], 'One of 952$p has moved' );
1563 is_deeply( \@fields_954p, ['3010023917'], 'Now 954$p exists' );
1565 $record = new_record;
1566 $record->append_fields(
1577 from_field => '952',
1578 from_subfield => 'p',
1584 read_field( { record => $record, field => '952', subfield => 'p' } );
1586 read_field( { record => $record, field => '954', subfield => 'p' } );
1587 is_deeply( \@fields_952p, [], 'All 952$p have moved' );
1590 [ '3010023917', '3010023917' ],
1597 from_field => '111',
1598 from_subfield => '1',
1604 read_field( { record => $record, field => '999', subfield => '9' } );
1605 is_deeply( \@fields_9999, [],
1606 'move a nonexistent subfield does not create a new one' );
1609 subtest 'move field' => sub {
1612 # move_field - fields
1613 my $record = new_record;
1614 $record->append_fields(
1624 { record => $record, from_field => '952', to_field => '953' } );
1625 is_deeply( [ read_field( { record => $record, field => '952' } ) ],
1626 [], "original fields don't exist" );
1630 { record => $record, field => '953', field_numbers => [1] }
1633 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1634 "first original fields has been copied"
1639 { record => $record, field => '953', field_numbers => [2] }
1642 [ '3010023917', 'BK' ],
1643 "second original fields has been copied"
1646 #- Move only the first field
1650 from_field => '953',
1652 field_numbers => [1]
1656 [ read_field( { record => $record, field => '953' } ) ],
1657 [ '3010023917', 'BK' ],
1658 "only first, the second 953 still exists"
1661 [ read_field( { record => $record, field => '954' } ) ],
1662 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
1663 "only first, first 953 has been copied"
1666 $record = new_record;
1667 $record->append_fields(
1675 #- Move all fields and modify values using a regex
1679 from_field => '952',
1681 regex => { search => 'BK', replace => 'DVD' }
1684 is_deeply( [ read_field( { record => $record, field => '952' } ) ],
1685 [], "use a regex, original fields don't exist" );
1689 { record => $record, field => '953', field_numbers => [1] }
1692 [ '3010023917', 'DVD', 'GEN', '2001-06-25' ],
1693 "use a regex, first original fields has been copied"
1698 { record => $record, field => '953', field_numbers => [2] }
1701 [ '3010023917', 'DVD' ],
1702 "use a regex, second original fields has been copied"
1708 from_field => '111',
1713 read_field( { record => $record, field => '999', subfield => '9' } );
1714 is_deeply( \@fields_9999, [],
1715 'move a nonexistent field does not create a new one' );
1721 subtest 'delete_field' => sub {
1723 subtest 'delete subfield' => sub {
1725 my $record = new_record;
1726 $record->append_fields(
1739 field_numbers => [1]
1743 read_field( { record => $record, field => '952', subfield => 'p' } );
1744 is_deeply( \@fields_952p, ['3010023917'], 'Delete first 952$p' );
1746 $record = new_record;
1747 $record->append_fields(
1754 delete_field( { record => $record, field => '952', subfield => 'p' } );
1756 read_field( { record => $record, field => '952', subfield => 'p' } );
1757 is_deeply( \@fields_952p, [], 'Delete all 952$p' );
1759 $record = new_record;
1760 $record->append_fields(
1763 a => 'Murakami, Haruki',
1764 0 => 'https://id.loc.gov/authorities/names/n81152393.html',
1767 delete_field( { record => $record, field => '600', subfield => '0' } );
1768 my @fields_600 = read_field( { record => $record, field => '600' } );
1769 is_deeply( \@fields_600, ['Murakami, Haruki'], 'Delete all 600$0, only subfield 0 deleted' );
1772 subtest 'delete field' => sub {
1774 my $record = new_record;
1775 delete_field( { record => $record, field => '952' } );
1776 my @fields_952 = read_field( { record => $record, field => '952' } );
1777 is_deeply( \@fields_952, [], 'Delete all 952, 1 deleted' );
1779 $record = new_record;
1780 $record->append_fields(
1787 delete_field( { record => $record, field => '952' } );
1788 @fields_952 = read_field( { record => $record, field => '952' } );
1789 is_deeply( \@fields_952, [], 'Delete all 952, 2 deleted' );
1793 subtest 'field_equals' => sub {
1795 my $record = new_record;
1796 subtest 'standard MARC fields' => sub {
1798 my $match = Koha::SimpleMARC::field_equals({
1804 is_deeply( $match, [], '100$a not equal to "Donald"' );
1806 $match = Koha::SimpleMARC::field_equals({
1813 is_deeply( $match, [1], 'first 100$a matches "Donald"');
1816 subtest 'control fields' => sub {
1818 my $match = Koha::SimpleMARC::field_equals({
1824 is_deeply( $match, [], '008 control field not equal to "eng"' );
1826 $match = Koha::SimpleMARC::field_equals({
1833 is_deeply( $match, [1], 'first 008 control field matches "eng"' );