3 use Test::More tests => 37;
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);
40 my $record = new_record;
43 is( field_exists({ record => $record, field => '650', subfield => 'a' }), 'Computer programming.', '650$a exists' );
44 is( field_exists({ record => $record, field => '650', subfield => 'b' }), undef, '650$b does not exist' );
46 $record->append_fields(
49 a => 'Computer algorithms.',
54 is( field_exists({ record => $record, field => '650', subfield => 'a' }), 'Computer programming.', '650$a exists, field_exists returns the first one' );
57 my @fields_650a = read_field({ record => $record, field => '650', subfield => 'a' });
58 is( $fields_650a[0], 'Computer programming.', 'first 650$a' );
59 is( $fields_650a[1], 'Computer algorithms.', 'second 650$a' );
60 is( read_field({ record => $record, field => '650', subfield => 'a', n => 1 }), 'Computer programming.', 'first 650$a bis' );
61 is( read_field({ record => $record, field => '650', subfield => 'a', n => 2 }), 'Computer algorithms.', 'second 650$a bis' );
62 is( read_field({ record => $record, field => '650', subfield => 'a', n => 3 }), undef, 'There is no 3 650$a' );
65 copy_field({ record => $record, from_field => '245', from_subfield => 'a', to_field => '246', to_subfield => 'a' });
66 is_deeply( read_field({ record => $record, field => '245', subfield => 'a' }), 'The art of computer programming', 'After copy 245$a still exists' );
67 is_deeply( read_field({ record => $record, field => '246', subfield => 'a' }), 'The art of computer programming', '246$a is a new field' );
68 delete_field({ record => $record, field => '246' });
69 is( field_exists({ record => $record, field => '246', subfield => 'a' }), undef, '246$a does not exist anymore' );
71 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '651', to_subfield => 'a' });
72 my @fields_651a = read_field({ record => $record, field => '651', subfield => 'a' });
73 is_deeply( \@fields_651a, ['Computer programming.', 'Computer algorithms.'], 'Copy multivalued field' );
74 delete_field({ record => $record, field => '651' });
76 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '651', to_subfield => 'a', n => 1 });
77 is_deeply( read_field({record => $record, field => '651', subfield => 'a' }), 'Computer programming.', 'Copy first field 650$a' );
78 delete_field({ record => $record, field => '652' });
80 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '651', to_subfield => 'a', n => 2 });
81 is_deeply( read_field({ record => $record, field => '651', subfield => 'a' }), 'Computer algorithms.', 'Copy second field 650$a' );
82 delete_field({ record => $record, field => '651' });
84 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '651', to_subfield => 'a', regex => { search => 'Computer', replace => 'The art of' } } );
85 @fields_651a = read_field({ record => $record, field => '651', subfield => 'a' });
86 is_deeply( \@fields_651a, ['The art of programming.', 'The art of algorithms.'], 'Copy field using regex' );
88 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '651', to_subfield => 'a', regex => { search => 'Computer', replace => 'The mistake of' } } );
89 @fields_651a = read_field({ record => $record, field => '651', subfield => 'a' });
90 is_deeply( \@fields_651a, ['The mistake of programming.', 'The mistake of algorithms.'], 'Copy fields using regex on existing fields' );
91 delete_field({ record => $record, field => '651' });
93 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '651', to_subfield => 'a', regex => { search => 'Computer', replace => 'The art of' } } );
94 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '651', to_subfield => 'a', regex => { search => 'Computer', replace => 'The mistake of' }, n => 1, dont_erase => 1 } );
95 @fields_651a = read_field({ record => $record, field => '651', subfield => 'a' });
96 is_deeply( \@fields_651a, [
97 'The art of programming.',
98 'The mistake of programming.',
99 'The art of algorithms.',
100 'The mistake of programming.'
101 ], 'Copy first field using regex on existing fields without erase existing values' );
102 delete_field({ record => $record, field => '651' });
104 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '651', to_subfield => 'a', regex => { search => 'Computer', replace => 'The art of' } });
105 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '651', to_subfield => 'a', regex => { search => 'Computer', replace => 'The mistake of' }, dont_erase => 1 });
106 @fields_651a = read_field({ record => $record, field => '651', subfield => 'a' });
107 is_deeply( \@fields_651a, [
108 'The art of programming.',
109 'The mistake of programming.',
110 'The mistake of algorithms.',
111 'The art of algorithms.',
112 'The mistake of programming.',
113 'The mistake of algorithms.'
114 ], 'Copy fields using regex on existing fields without erase existing values' );
115 delete_field({ record => $record, field => '651' });
117 # Copy with regex modifiers
118 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '652', to_subfield => 'a', regex => { search => 'o', replace => 'foo' } });
119 my @fields_652a = read_field({ record => $record, field => '652', subfield => 'a' });
120 is_deeply( \@fields_652a, ['Cfoomputer programming.', 'Cfoomputer algorithms.'], 'Copy field using regex' );
122 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '653', to_subfield => 'a', regex => { search => 'o', replace => 'foo', modifiers => 'g' } });
123 my @fields_653a = read_field({ record => $record, field => '653', subfield => 'a' });
124 is_deeply( \@fields_653a, ['Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.'], 'Copy field using regex' );
126 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '654', to_subfield => 'a', regex => { search => 'O', replace => 'foo', modifiers => 'i' } });
127 my @fields_654a = read_field({ record => $record, field => '654', subfield => 'a' });
128 is_deeply( \@fields_654a, ['Cfoomputer programming.', 'Cfoomputer algorithms.'], 'Copy field using regex' );
130 copy_field({ record => $record, from_field => '650', from_subfield => 'a', to_field => '655', to_subfield => 'a', regex => { search => 'O', replace => 'foo', modifiers => 'gi' } });
131 my @fields_655a = read_field({ record => $record, field => '655', subfield => 'a' });
132 is_deeply( \@fields_655a, ['Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.'], 'Copy field using regex' );
135 update_field({ record => $record, field => '952', subfield => 'p', values => ['3010023918'] });
136 is_deeply( read_field({ record => $record, field => '952', subfield => 'p' }), '3010023918', 'update existing subfield 952$p' );
137 delete_field({ record => $record, field => '952' });
138 update_field({ record => $record, field => '952', subfield => 'p', values => ['3010023918'] });
139 update_field({ record => $record, field => '952', subfield => 'y', values => ['BK'] });
140 is_deeply( read_field({ record => $record, field => '952', subfield => 'p' }), '3010023918', 'create subfield 952$p' );
141 is_deeply( read_field({ record => $record, field => '952', subfield => 'y' }), 'BK', 'create subfield 952$k on existing 952 field' );
142 $record->append_fields(
149 update_field({ record => $record, field => '952', subfield => 'p', values => ['3010023919'] });
150 my @fields_952p = read_field({ record => $record, field => '952', subfield => 'p' });
151 is_deeply( \@fields_952p, ['3010023919', '3010023919'], 'update all subfields 952$p with the same value' );
153 update_field({ record => $record, field => '952', subfield => 'p', values => ['3010023917', '3010023918'] });
154 @fields_952p = read_field({ record => $record, field => '952', subfield => 'p' });
155 is_deeply( \@fields_952p, ['3010023917', '3010023918'], 'update all subfields 952$p with the different values' );
158 $record = new_record;
159 my ( @fields_952d, @fields_952c, @fields_954c, @fields_954p);
160 $record->append_fields(
167 copy_field({ record => $record, from_field => '952', from_subfield => 'd', to_field => '952', to_subfield => 'd' });
168 @fields_952d = read_field({ record => $record, field => '952', subfield => 'd' });
169 is_deeply( \@fields_952d, ['2001-06-25', '2001-06-25'], 'copy 952$d into others 952 field' );
171 move_field({ record => $record, from_field => '952', from_subfield => 'c', to_field => '954', to_subfield => 'c' });
172 @fields_952c = read_field({ record => $record, field => '952', subfield => 'c' });
173 @fields_954c = read_field({ record => $record, field => '954', subfield => 'c' });
174 is_deeply( \@fields_952c, [], 'The 952$c has moved' );
175 is_deeply( \@fields_954c, ['GEN'], 'Now 954$c exists' );
177 move_field({ record => $record, from_field => '952', from_subfield => 'p', to_field => '954', to_subfield => 'p', n => 1 }); # Move the first field
178 @fields_952p = read_field({ record => $record, field => '952', subfield => 'p' });
179 @fields_954p = read_field({ record => $record, field => '954', subfield => 'p' });
180 is_deeply( \@fields_952p, ['3010023917'], 'One of 952$p has moved' );
181 is_deeply( \@fields_954p, ['3010023917'], 'Now 954$p exists' );
183 $record = new_record;
184 $record->append_fields(
192 move_field({ record => $record, from_field => '952', from_subfield => 'p', to_field => '954', to_subfield => 'p' }); # Move all field
193 @fields_952p = read_field({ record => $record, field => '952', subfield => 'p' });
194 @fields_954p = read_field({ record => $record, field => '954', subfield => 'p' });
195 is_deeply( \@fields_952p, [], 'All 952$p have moved' );
196 is_deeply( \@fields_954p, ['3010023917', '3010023917'], 'Now 2 954$p exist' );