3 use Test::More tests => 9;
6 use_ok("MARC::Record");
7 use_ok("Koha::SimpleMARC");
10 my $record = MARC::Record->new;
11 $record->leader('03174nam a2200445 a 4500');
15 a => 'Knuth, Donald Ervin',
20 a => 'The art of computer programming',
21 c => 'Donald E. Knuth.',
25 a => 'Computer programming.',
36 $record->append_fields(@fields);
41 subtest 'field_exists' => sub {
43 my $record = new_record;
45 field_exists( { record => $record, field => '650', subfield => 'a' } ),
46 'Computer programming.',
50 field_exists( { record => $record, field => '650', subfield => 'b' } ),
52 '650$b does not exist'
55 $record->append_fields(
58 a => 'Computer algorithms.',
64 field_exists( { record => $record, field => '650', subfield => 'a' } ),
65 'Computer programming.',
66 '650$a exists, field_exists returns the first one'
71 subtest 'read_field' => sub {
73 subtest 'read subfield' => sub {
75 my $record = new_record;
76 $record->append_fields(
79 a => 'Computer algorithms.',
85 read_field( { record => $record, field => '650', subfield => 'a' } );
86 is( $fields_650a[0], 'Computer programming.', 'first 650$a' );
87 is( $fields_650a[1], 'Computer algorithms.', 'second 650$a' );
97 'Computer programming.',
109 'Computer algorithms.',
122 'There is no 3 650$a'
125 subtest 'read field' => sub {
127 my $record = new_record;
128 $record->append_fields(
131 a => 'Computer algorithms.',
144 [ 'Computer programming.', '462', 'Computer algorithms.', '463' ],
145 'Get the all subfield values for field 650'
157 [ 'Computer programming.', '462' ],
158 'Get the all subfield values for the first field 650'
161 [ read_field( { record => $record, field => '650', n => 2 } ) ],
162 [ 'Computer algorithms.', '463' ],
163 'Get the all subfield values for the second field 650'
166 [ read_field( { record => $record, field => '650', n => 3 } ) ],
168 'Get the all subfield values for the third field 650 which does not exist'
174 subtest 'update_field' => sub {
176 subtest 'update subfield' => sub {
178 my $record = new_record;
185 values => ['3010023918']
190 { record => $record, field => '952', subfield => 'p' }
193 'update existing subfield 952$p'
195 delete_field( { record => $record, field => '952' } );
201 values => ['3010023918']
214 { record => $record, field => '952', subfield => 'p' }
217 'create subfield 952$p'
221 { record => $record, field => '952', subfield => 'y' }
224 'create subfield 952$k on existing 952 field'
227 $record->append_fields(
239 values => ['3010023919']
243 read_field( { record => $record, field => '952', subfield => 'p' } );
246 [ '3010023919', '3010023919' ],
247 'update all subfields 952$p with the same value'
255 values => [ '3010023917', '3010023918' ]
259 read_field( { record => $record, field => '952', subfield => 'p' } );
262 [ '3010023917', '3010023918' ],
263 'update all subfields 952$p with the different values'
268 # copy_field - subfield
269 subtest 'copy_field' => sub {
271 subtest 'copy subfield' => sub {
273 my $record = new_record;
274 $record->append_fields(
277 a => 'Computer algorithms.',
285 from_subfield => 'a',
292 { record => $record, field => '245', subfield => 'a' }
294 'The art of computer programming',
295 'After copy 245$a still exists'
299 { record => $record, field => '246', subfield => 'a' }
301 'The art of computer programming',
302 '246$a is a new field'
304 delete_field( { record => $record, field => '246' } );
307 { record => $record, field => '246', subfield => 'a' }
310 '246$a does not exist anymore'
317 from_subfield => 'a',
323 read_field( { record => $record, field => '651', subfield => 'a' } );
326 [ 'Computer programming.', 'Computer algorithms.' ],
327 'Copy multivalued field'
329 delete_field( { record => $record, field => '651' } );
335 from_subfield => 'a',
343 { record => $record, field => '651', subfield => 'a' }
345 'Computer programming.',
346 'Copy first field 650$a'
348 delete_field( { record => $record, field => '652' } );
354 from_subfield => 'a',
362 { record => $record, field => '651', subfield => 'a' }
364 'Computer algorithms.',
365 'Copy second field 650$a'
367 delete_field( { record => $record, field => '651' } );
373 from_subfield => 'a',
376 regex => { search => 'Computer', replace => 'The art of' }
380 read_field( { record => $record, field => '651', subfield => 'a' } );
383 [ 'The art of programming.', 'The art of algorithms.' ],
384 'Copy field using regex'
391 from_subfield => 'a',
394 regex => { search => 'Computer', replace => 'The mistake of' }
398 read_field( { record => $record, field => '651', subfield => 'a' } );
401 [ 'The mistake of programming.', 'The mistake of algorithms.' ],
402 'Copy fields using regex on existing fields'
404 delete_field( { record => $record, field => '651' } );
410 from_subfield => 'a',
413 regex => { search => 'Computer', replace => 'The art of' }
417 read_field( { record => $record, field => '651', subfield => 'a' } );
420 [ 'The art of programming.', 'The art of algorithms.', ],
421 'Copy all fields using regex'
423 delete_field( { record => $record, field => '651' } );
429 from_subfield => 'a',
432 regex => { search => 'Computer', replace => 'The art of' },
437 read_field( { record => $record, field => '651', subfield => 'a' } );
440 [ 'The art of programming.', ],
441 'Copy first field using regex'
443 delete_field( { record => $record, field => '651' } );
445 # Copy with regex modifiers
446 $record = new_record;
447 $record->append_fields(
450 a => 'Computer algorithms.',
458 from_subfield => 'a',
461 regex => { search => 'o', replace => 'foo' }
465 read_field( { record => $record, field => '652', subfield => 'a' } );
468 [ 'Cfoomputer programming.', 'Cfoomputer algorithms.' ],
469 'Copy field using regex'
476 from_subfield => 'a',
479 regex => { search => 'o', replace => 'foo', modifiers => 'g' }
483 read_field( { record => $record, field => '653', subfield => 'a' } );
486 [ 'Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.' ],
487 'Copy field using regex'
494 from_subfield => 'a',
497 regex => { search => 'O', replace => 'foo', modifiers => 'i' }
501 read_field( { record => $record, field => '654', subfield => 'a' } );
504 [ 'Cfoomputer programming.', 'Cfoomputer algorithms.' ],
505 'Copy field using regex'
512 from_subfield => 'a',
515 regex => { search => 'O', replace => 'foo', modifiers => 'gi' }
519 read_field( { record => $record, field => '655', subfield => 'a' } );
522 [ 'Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.' ],
523 'Copy field using regex'
526 $record->append_fields(
538 from_subfield => 'd',
544 read_field( { record => $record, field => '952', subfield => 'd' } );
547 [ '2001-06-25', '2001-06-25' ],
548 'copy 952$d into others 952 field'
552 subtest 'copy field' => sub {
554 my $record = new_record;
555 $record->append_fields(
565 { record => $record, from_field => '952', to_field => '953' } );
566 my @fields_952 = read_field( { record => $record, field => '952' } );
568 [ read_field( { record => $record, field => '952', n => 1 } ) ],
569 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
570 "copy all: original first field still exists"
573 [ read_field( { record => $record, field => '952', n => 2 } ) ],
574 [ '3010023918', 'CD' ],
575 "copy all: original second field still exists"
578 [ read_field( { record => $record, field => '953', n => 1 } ) ],
579 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
580 "copy all: first original fields has been copied"
583 [ read_field( { record => $record, field => '953', n => 2 } ) ],
584 [ '3010023918', 'CD' ],
585 "copy all: second original fields has been copied"
588 #- copy only the first field
598 [ read_field( { record => $record, field => '953', n => 1 } ) ],
599 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
600 "copy first: first original fields has been copied"
603 [ read_field( { record => $record, field => '953', n => 2 } ) ],
604 [ '3010023918', 'CD' ],
605 "copy first: second original fields has been copied"
608 [ read_field( { record => $record, field => '954' } ) ],
609 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
610 "copy first: only first, first 953 has been copied"
613 $record = new_record;
614 $record->append_fields(
622 #- copy all fields and modify values using a regex
628 regex => { search => '30100', replace => '42424' }
632 [ read_field( { record => $record, field => '952', n => 1 } ) ],
633 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
634 "copy all with regex: original first field still exists"
637 [ read_field( { record => $record, field => '952', n => 2 } ) ],
638 [ '3010023918', 'CD' ],
639 "copy all with regex: original second field still exists"
642 [ read_field( { record => $record, field => '953', n => 1 } ) ],
643 [ '4242423917', 'BK', 'GEN', '2001-06-25' ],
644 "copy all wirh regex: first original fields has been copied"
647 [ read_field( { record => $record, field => '953', n => 2 } ) ],
648 [ '4242423918', 'CD' ],
649 "copy all with regex: second original fields has been copied"
654 # move_field - subfields
655 subtest 'move_field' => sub {
657 subtest 'move subfield' => sub {
659 my $record = new_record;
660 my ( @fields_952d, @fields_952c, @fields_954c, @fields_954p );
661 $record->append_fields(
672 from_subfield => 'c',
678 read_field( { record => $record, field => '952', subfield => 'c' } );
680 read_field( { record => $record, field => '954', subfield => 'c' } );
681 is_deeply( \@fields_952c, [], 'The 952$c has moved' );
682 is_deeply( \@fields_954c, ['GEN'], 'Now 954$c exists' );
688 from_subfield => 'p',
693 ); # Move the first field
695 read_field( { record => $record, field => '952', subfield => 'p' } );
697 read_field( { record => $record, field => '954', subfield => 'p' } );
698 is_deeply( \@fields_952p, ['3010023917'], 'One of 952$p has moved' );
699 is_deeply( \@fields_954p, ['3010023917'], 'Now 954$p exists' );
701 $record = new_record;
702 $record->append_fields(
714 from_subfield => 'p',
720 read_field( { record => $record, field => '952', subfield => 'p' } );
722 read_field( { record => $record, field => '954', subfield => 'p' } );
723 is_deeply( \@fields_952p, [], 'All 952$p have moved' );
726 [ '3010023917', '3010023917' ],
731 subtest 'move field' => sub {
734 # move_field - fields
735 my $record = new_record;
736 $record->append_fields(
746 { record => $record, from_field => '952', to_field => '953' } );
747 is_deeply( [ read_field( { record => $record, field => '952' } ) ],
748 [], "original fields don't exist" );
750 [ read_field( { record => $record, field => '953', n => 1 } ) ],
751 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
752 "first original fields has been copied"
755 [ read_field( { record => $record, field => '953', n => 2 } ) ],
756 [ '3010023917', 'BK' ],
757 "second original fields has been copied"
760 #- Move only the first field
770 [ read_field( { record => $record, field => '953' } ) ],
771 [ '3010023917', 'BK' ],
772 "only first, the second 953 still exists"
775 [ read_field( { record => $record, field => '954' } ) ],
776 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
777 "only first, first 953 has been copied"
780 $record = new_record;
781 $record->append_fields(
789 #- Move all fields and modify values using a regex
795 regex => { search => 'BK', replace => 'DVD' }
798 is_deeply( [ read_field( { record => $record, field => '952' } ) ],
799 [], "use a regex, original fields don't exist" );
801 [ read_field( { record => $record, field => '953', n => 1 } ) ],
802 [ '3010023917', 'DVD', 'GEN', '2001-06-25' ],
803 "use a regex, first original fields has been copied"
806 [ read_field( { record => $record, field => '953', n => 2 } ) ],
807 [ '3010023917', 'DVD' ],
808 "use a regex, second original fields has been copied"
814 subtest 'delete_field' => sub {
816 subtest 'delete subfield' => sub {
818 my $record = new_record;
819 $record->append_fields(
828 { record => $record, field => '952', subfield => 'p', n => 1 } );
830 read_field( { record => $record, field => '952', subfield => 'p' } );
831 is_deeply( \@fields_952p, ['3010023917'], 'Delete first 952$p' );
833 $record = new_record;
834 $record->append_fields(
841 delete_field( { record => $record, field => '952', subfield => 'p' } );
843 read_field( { record => $record, field => '952', subfield => 'p' } );
844 is_deeply( \@fields_952p, [], 'Delete all 952$p' );
847 subtest 'delete field' => sub {
849 my $record = new_record;
850 delete_field( { record => $record, field => '952' } );
851 my @fields_952 = read_field( { record => $record, field => '952' } );
852 is_deeply( \@fields_952, [], 'Delete all 952, 1 deleted' );
854 $record = new_record;
855 $record->append_fields(
862 delete_field( { record => $record, field => '952' } );
863 @fields_952 = read_field( { record => $record, field => '952' } );
864 is_deeply( \@fields_952, [], 'Delete all 952, 2 deleted' );