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'
555 from_subfield => '1',
561 read_field( { record => $record, field => '999', subfield => '9' } );
562 is_deeply( \@fields_9999, [],
563 'copy a nonexistent subfield does not create a new one' );
565 $record = new_record;
570 from_subfield => 'a',
573 regex => { search => '^', replace => 'BEGIN ' }
578 { record => $record, field => '245', subfield => 'a' }
580 'BEGIN The art of computer programming',
581 'Update a subfield: add a string at the beginning'
584 $record = new_record;
589 from_subfield => 'a',
592 regex => { search => '$', replace => ' END' }
597 { record => $record, field => '245', subfield => 'a' }
599 'The art of computer programming END',
600 'Update a subfield: add a string at the end'
605 subtest 'copy field' => sub {
607 my $record = new_record;
608 $record->append_fields(
618 { record => $record, from_field => '952', to_field => '953' } );
619 my @fields_952 = read_field( { record => $record, field => '952' } );
621 [ read_field( { record => $record, field => '952', n => 1 } ) ],
622 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
623 "copy all: original first field still exists"
626 [ read_field( { record => $record, field => '952', n => 2 } ) ],
627 [ '3010023918', 'CD' ],
628 "copy all: original second field still exists"
631 [ read_field( { record => $record, field => '953', n => 1 } ) ],
632 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
633 "copy all: first original fields has been copied"
636 [ read_field( { record => $record, field => '953', n => 2 } ) ],
637 [ '3010023918', 'CD' ],
638 "copy all: second original fields has been copied"
641 #- copy only the first field
651 [ read_field( { record => $record, field => '953', n => 1 } ) ],
652 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
653 "copy first: first original fields has been copied"
656 [ read_field( { record => $record, field => '953', n => 2 } ) ],
657 [ '3010023918', 'CD' ],
658 "copy first: second original fields has been copied"
661 [ read_field( { record => $record, field => '954' } ) ],
662 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
663 "copy first: only first, first 953 has been copied"
666 $record = new_record;
667 $record->append_fields(
675 #- copy all fields and modify values using a regex
681 regex => { search => '30100', replace => '42424' }
685 [ read_field( { record => $record, field => '952', n => 1 } ) ],
686 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
687 "copy all with regex: original first field still exists"
690 [ read_field( { record => $record, field => '952', n => 2 } ) ],
691 [ '3010023918', 'CD' ],
692 "copy all with regex: original second field still exists"
695 [ read_field( { record => $record, field => '953', n => 1 } ) ],
696 [ '4242423917', 'BK', 'GEN', '2001-06-25' ],
697 "copy all wirh regex: first original fields has been copied"
700 [ read_field( { record => $record, field => '953', n => 2 } ) ],
701 [ '4242423918', 'CD' ],
702 "copy all with regex: second original fields has been copied"
712 read_field( { record => $record, field => '999', subfield => '9' } );
713 is_deeply( \@fields_9999, [],
714 'copy a nonexistent field does not create a new one' );
718 # move_field - subfields
719 subtest 'move_field' => sub {
721 subtest 'move subfield' => sub {
723 my $record = new_record;
724 my ( @fields_952d, @fields_952c, @fields_954c, @fields_954p );
725 $record->append_fields(
736 from_subfield => 'c',
742 read_field( { record => $record, field => '952', subfield => 'c' } );
744 read_field( { record => $record, field => '954', subfield => 'c' } );
745 is_deeply( \@fields_952c, [], 'The 952$c has moved' );
746 is_deeply( \@fields_954c, ['GEN'], 'Now 954$c exists' );
752 from_subfield => 'p',
757 ); # Move the first field
759 read_field( { record => $record, field => '952', subfield => 'p' } );
761 read_field( { record => $record, field => '954', subfield => 'p' } );
762 is_deeply( \@fields_952p, ['3010023917'], 'One of 952$p has moved' );
763 is_deeply( \@fields_954p, ['3010023917'], 'Now 954$p exists' );
765 $record = new_record;
766 $record->append_fields(
778 from_subfield => 'p',
784 read_field( { record => $record, field => '952', subfield => 'p' } );
786 read_field( { record => $record, field => '954', subfield => 'p' } );
787 is_deeply( \@fields_952p, [], 'All 952$p have moved' );
790 [ '3010023917', '3010023917' ],
798 from_subfield => '1',
804 read_field( { record => $record, field => '999', subfield => '9' } );
805 is_deeply( \@fields_9999, [],
806 'move a nonexistent subfield does not create a new one' );
809 subtest 'move field' => sub {
812 # move_field - fields
813 my $record = new_record;
814 $record->append_fields(
824 { record => $record, from_field => '952', to_field => '953' } );
825 is_deeply( [ read_field( { record => $record, field => '952' } ) ],
826 [], "original fields don't exist" );
828 [ read_field( { record => $record, field => '953', n => 1 } ) ],
829 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
830 "first original fields has been copied"
833 [ read_field( { record => $record, field => '953', n => 2 } ) ],
834 [ '3010023917', 'BK' ],
835 "second original fields has been copied"
838 #- Move only the first field
848 [ read_field( { record => $record, field => '953' } ) ],
849 [ '3010023917', 'BK' ],
850 "only first, the second 953 still exists"
853 [ read_field( { record => $record, field => '954' } ) ],
854 [ '3010023917', 'BK', 'GEN', '2001-06-25' ],
855 "only first, first 953 has been copied"
858 $record = new_record;
859 $record->append_fields(
867 #- Move all fields and modify values using a regex
873 regex => { search => 'BK', replace => 'DVD' }
876 is_deeply( [ read_field( { record => $record, field => '952' } ) ],
877 [], "use a regex, original fields don't exist" );
879 [ read_field( { record => $record, field => '953', n => 1 } ) ],
880 [ '3010023917', 'DVD', 'GEN', '2001-06-25' ],
881 "use a regex, first original fields has been copied"
884 [ read_field( { record => $record, field => '953', n => 2 } ) ],
885 [ '3010023917', 'DVD' ],
886 "use a regex, second original fields has been copied"
897 read_field( { record => $record, field => '999', subfield => '9' } );
898 is_deeply( \@fields_9999, [],
899 'move a nonexistent field does not create a new one' );
905 subtest 'delete_field' => sub {
907 subtest 'delete subfield' => sub {
909 my $record = new_record;
910 $record->append_fields(
919 { record => $record, field => '952', subfield => 'p', n => 1 } );
921 read_field( { record => $record, field => '952', subfield => 'p' } );
922 is_deeply( \@fields_952p, ['3010023917'], 'Delete first 952$p' );
924 $record = new_record;
925 $record->append_fields(
932 delete_field( { record => $record, field => '952', subfield => 'p' } );
934 read_field( { record => $record, field => '952', subfield => 'p' } );
935 is_deeply( \@fields_952p, [], 'Delete all 952$p' );
938 subtest 'delete field' => sub {
940 my $record = new_record;
941 delete_field( { record => $record, field => '952' } );
942 my @fields_952 = read_field( { record => $record, field => '952' } );
943 is_deeply( \@fields_952, [], 'Delete all 952, 1 deleted' );
945 $record = new_record;
946 $record->append_fields(
953 delete_field( { record => $record, field => '952' } );
954 @fields_952 = read_field( { record => $record, field => '952' } );
955 is_deeply( \@fields_952, [], 'Delete all 952, 2 deleted' );