3 use Test::More tests => 126;
10 use_ok("MARC::Field");
11 use_ok("MARC::Record");
12 use_ok("C4::MarcModificationTemplates");
14 my $schema = Koha::Database->new->schema;
15 $schema->storage->txn_begin;
16 my $dbh = C4::Context->dbh;
18 $dbh->do(q|DELETE FROM marc_modification_templates|);
21 my $template_id = AddModificationTemplate("template_name");
22 like( $template_id, qr|^\d+$|, "new template returns an id" );
24 is( AddModificationTemplateAction(
25 $template_id, 'move_field', 1,
26 '464', 'u', '', '464', '3',
28 '', '', '', '', '', '',
29 'move first 464$u to 464$3'
30 ), 1, "Add first action");
32 is( AddModificationTemplateAction(
33 $template_id, 'update_field', 0,
34 '099', 't', 'LIV', '', '',
36 'if', '200', 'b', 'equals', 'Text', '',
37 'Update field 099$t with value LIV if 200$b matches "Text"'
38 ), 1, "Add second action");
40 is( AddModificationTemplateAction(
41 $template_id, 'copy_field', 0,
42 '606', 'a', '', '607', 'a',
44 'unless', '606', 'a', 'not_equals', '^AJAX', '1',
45 'Copy field 606$a to 607$a unless 606$a matches RegEx m^AJAX'
46 ), 1, "Add third action");
48 is( AddModificationTemplateAction(
49 $template_id, 'add_field', 0,
50 '650', 'a', 'Additional', '', '',
52 'unless', '650', 'a', 'exists', '', '',
53 'Add field 650$aAdditional unless 650$a exists'
54 ), 1, "Add fourth action");
57 my @actions = GetModificationTemplateActions( $template_id );
58 is( @actions, 4, "4 actions are inserted");
60 for my $action ( @actions ) {
61 isnt( GetModificationTemplateAction( $action->{mmta_id} ), undef, "action with id $action->{mmta_id} exists" );
64 my $first_action = $actions[0];
65 is( $first_action->{ordering}, 1, "test ordering for first action" );
66 is( $first_action->{action}, 'move_field', "test action for first action" );
67 is( $first_action->{from_field}, '464', "test from_field for first action" );
68 is( $first_action->{from_subfield}, 'u', "test from_subfield for first action" );
69 is( $first_action->{to_field}, '464', "test to_field for first action" );
70 is( $first_action->{to_subfield}, '3', "test to_subfield for first action" );
72 my $second_action = $actions[1];
73 is( $second_action->{ordering}, 2, "test ordering for second action" );
74 is( $second_action->{action}, 'update_field', "test action for second action" );
75 is( $second_action->{from_field}, '099',"test from_field for second action" );
76 is( $second_action->{from_subfield}, 't', "test from_subfield for second action" );
77 is( $second_action->{field_value}, 'LIV', "test firld_value for second action" );
78 is( $second_action->{to_field}, '', "test to_field for second action" );
79 is( $second_action->{to_subfield}, '', "test to_subfield for second action" );
80 is( $second_action->{conditional}, 'if', "test conditional for second action" );
81 is( $second_action->{conditional_field}, '200', "test conditional_field for second action" );
82 is( $second_action->{conditional_subfield}, 'b', "test conditional_subfield for second action" );
83 is( $second_action->{conditional_comparison}, 'equals', "test conditional_comparison for second action" );
85 my $third_action = $actions[2];
86 is( $third_action->{ordering}, 3, "test ordering for third action" );
87 is( $third_action->{action}, 'copy_field', "test action for third action" );
88 is( $third_action->{from_field}, '606', "test from_field for third action" );
89 is( $third_action->{from_subfield}, 'a', "test from_subfield for third action" );
90 is( $third_action->{to_field}, '607', "test to_field for third action" );
91 is( $third_action->{to_subfield}, 'a', "test to_subfield for third action" );
92 is( $third_action->{conditional}, 'unless', "test conditional for third action" );
93 is( $third_action->{conditional_field}, '606', "test conditional_field for third action" );
94 is( $third_action->{conditional_subfield}, 'a', "test conditional_subfield for third action" );
95 is( $third_action->{conditional_comparison}, 'not_equals', "test conditional_comparison for third action" );
96 is( $third_action->{conditional_value}, '^AJAX', "test conditional_value for third action" );
98 my $fourth_action = $actions[3];
99 is( $fourth_action->{ordering}, 4, "test ordering for fourth action" );
100 is( $fourth_action->{action}, 'add_field', "test action for fourth action" );
101 is( $fourth_action->{from_field}, '650', "test from_field for fourth action" );
102 is( $fourth_action->{from_subfield}, 'a', "test from_subfield for fourth action" );
103 is( $fourth_action->{to_field}, '', "test to_field for fourth action" );
104 is( $fourth_action->{to_subfield}, '', "test to_subfield for fourth action" );
105 is( $fourth_action->{conditional}, 'unless', "test conditional for fourth action" );
106 is( $fourth_action->{conditional_field}, '650', "test conditional_field for fourth action" );
107 is( $fourth_action->{conditional_subfield}, 'a', "test conditional_subfield for fourth action" );
108 is( $fourth_action->{conditional_comparison}, 'exists', "test conditional_comparison for fourth action" );
109 is( $fourth_action->{conditional_value}, '', "test conditional_value for fourth action" );
112 is( ModModificationTemplateAction(
113 $actions[1]->{mmta_id}, 'update_field', 0,
114 '100', 'u', 'LIV', '', '',
116 'if', '200', 'c', 'equals', 'Text', '',
117 'Update field 099$t with value LIV if 200$b matches "Text"'
118 ), 1, "Modify second action");
120 $second_action = GetModificationTemplateAction( $actions[1]->{mmta_id} );
121 is( $second_action->{ordering}, 2, "test ordering for second action modified" );
122 is( $second_action->{action}, 'update_field', "test action for second action modified" );
123 is( $second_action->{from_field}, '100',"test from_field for second action modified" );
124 is( $second_action->{from_subfield}, 'u', "test from_subfield for second action modified" );
125 is( $second_action->{field_value}, 'LIV', "test firld_value for second action modified" );
126 is( $second_action->{to_field}, '', "test to_field for second action modified" );
127 is( $second_action->{to_subfield}, '', "test to_subfield for second action modified" );
128 is( $second_action->{conditional}, 'if', "test conditional for second action modified" );
129 is( $second_action->{conditional_field}, '200', "test conditional_field for second action modified" );
130 is( $second_action->{conditional_subfield}, 'c', "test conditional_subfield for second action modified" );
131 is( $second_action->{conditional_comparison}, 'equals', "test conditional_comparison for second action modified" );
134 is( MoveModificationTemplateAction( $actions[2]->{mmta_id}, 'top' ), '1', 'Move the third action on top' );
135 is( MoveModificationTemplateAction( $actions[0]->{mmta_id}, 'bottom' ), '1', 'Move the first action on bottom' );
137 is( GetModificationTemplateAction( $actions[0]->{mmta_id} )->{ordering}, '4', 'First becomes fourth' );
138 is( GetModificationTemplateAction( $actions[1]->{mmta_id} )->{ordering}, '2', 'Second stays second' );
139 is( GetModificationTemplateAction( $actions[2]->{mmta_id} )->{ordering}, '1', 'Third becomes first' );
140 is( GetModificationTemplateAction( $actions[3]->{mmta_id} )->{ordering}, '3', 'Fourth becomes third' );
142 is( MoveModificationTemplateAction( $actions[0]->{mmta_id}, 'up' ), '1', 'Move up the first action (was fourth)' );
143 is( MoveModificationTemplateAction( $actions[0]->{mmta_id}, 'up' ), '1', 'Move up the first action (was third)' );
144 is( MoveModificationTemplateAction( $actions[2]->{mmta_id}, 'down' ), '1', 'Move down the third action (was first)' );
146 is( GetModificationTemplateAction( $actions[0]->{mmta_id} )->{ordering}, '1', 'First becomes again first' );
147 is( GetModificationTemplateAction( $actions[1]->{mmta_id} )->{ordering}, '3', 'Second becomes third' );
148 is( GetModificationTemplateAction( $actions[2]->{mmta_id} )->{ordering}, '2', 'Third becomes second' );
149 is( GetModificationTemplateAction( $actions[3]->{mmta_id} )->{ordering}, '4', 'Fourth becomes again fourth' );
152 is( DelModificationTemplateAction( $actions[0]->{mmta_id} ), 3, "Delete the first action, 2 others are reordered" );
153 is( GetModificationTemplateAction( $actions[0]->{mmta_id} ), undef, "first action does not exist anymore" );
155 is( DelModificationTemplate( $template_id ), 1, "The template has been deleted" );
157 is( GetModificationTemplateAction( $actions[1]->{mmta_id} ), undef, "second action does not exist anymore" );
158 is( GetModificationTemplateAction( $actions[2]->{mmta_id} ), undef, "third action does not exist anymore" );
159 is( GetModificationTemplateAction( $actions[3]->{mmta_id} ), undef, "fourth action does not exist anymore" );
161 is( GetModificationTemplateActions( $template_id ), 0, "There is no action for deleted template" );
163 # ModifyRecordWithTemplate
164 t::lib::Mocks::mock_userenv();
166 $template_id = AddModificationTemplate("new_template_test");
167 like( $template_id, qr|^\d+$|, "new template returns an id" );
169 is( AddModificationTemplateAction(
170 $template_id, 'delete_field', 0,
171 '245', '', '', '', '',
173 'if', '245', 'a', 'equals', 'Bad title', '',
174 'Delete field 245 if 245$a eq "Bad title"'
175 ), 1, 'Add first action: delete field 245 if 245$a eq "Bad title"');
177 is( AddModificationTemplateAction(
178 $template_id, 'copy_field', 0,
179 '245', 'a', '', '246', 'a',
181 '', '', '', '', '', '',
182 'copy field 245$a to 246$a'
183 ), 1, 'Add second action: copy 245$a to 246$a');
185 is( AddModificationTemplateAction(
186 $template_id, 'delete_field', 0,
187 '650', 'a', '', '', '',
189 'if', '650', '9', 'equals', '462', '',
190 'Delete field 650$a if 650$9=462'
191 ), 1, 'Add third action: delete field 650$a if 650$9=462');
193 is( AddModificationTemplateAction(
194 $template_id, 'update_field', 0,
195 '952', 'p', '3010023917_updated', '', '',
197 'unless', '650', '9', 'equals', '42', '',
198 'Update field 952$p with "3010023917_updated" if 650$9 != 42'
199 ), 1, 'Add fourth action: update field 952$p with "3010023917_updated" if 650$9 != 42');
201 is( AddModificationTemplateAction(
202 $template_id, 'move_field', 0,
203 '952', 'd', '', '952', 'e',
205 'if', '952', 'c', 'equals', '^GEN', '1',
206 'Move field 952$d to 952$e if 952$c =~ /^GEN/'
207 ), 1, 'Add fifth action: move field 952$d to 952$e if 952$c =~ /^GEN/');
209 is( AddModificationTemplateAction(
210 $template_id, 'update_field', 0,
211 '650', 'a', 'Computer algorithms.', '', '',
213 'if', '650', '9', 'equals', '499', '',
214 'Update field 650$a with "Computer algorithms." to 651 if 650$9 == 499'
215 ), 1, 'Add sixth action: update field 650$a with "Computer algorithms." if 650$9 == 499');
217 is( AddModificationTemplateAction(
218 $template_id, 'move_field', 0,
219 '650', '', '', '651', '',
221 'if', '650', '9', 'equals', '499', '',
222 'Move field 650 to 651 if 650$9 == 499'
223 ), 1, 'Add seventh action: move field 650 to 651 if 650$9 == 499');
225 is( AddModificationTemplateAction(
226 $template_id, 'update_field', 0,
227 '999', 'a', 'non existent.', '', '',
229 '', '', '', '', '', '',
230 'Update non existent field 999$a with "non existent"'
231 ), 1, 'Add eighth action: update field non existent 999$a with "non existent."');
233 is( AddModificationTemplateAction(
234 $template_id, 'update_field', 0,
235 '999', 'a', 'existent - updated.', '', '',
237 '', '', '', '', '', '',
238 'Update existent field 999$a with "existent - updated."'
239 ), 1, 'Add ninth action: update field non existent 999$a with "existent - updated."');
241 is( AddModificationTemplateAction(
242 $template_id, 'add_field', 0,
243 '999', 'a', 'additional existent.', '', '',
245 '', '', '', '', '', '',
246 'Add new existent field 999$a with "additional existent"'
247 ), 1, 'Add tenth action: add additional field existent 999$a with "additional existent."');
249 is( AddModificationTemplateAction(
250 $template_id, 'add_field', 0,
251 '007', '', 'vxcdq', '', '',
253 '', '', '', '', '', '',
254 'Add new existent field 999$a with "additional existent"'
255 ), 1, 'Add eleventh action: add additional field existent 007');
257 my $record = new_record();
258 is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
260 my $expected_record = expected_record_1();
261 is_deeply( $record, $expected_record, "Record modification as expected");
263 $template_id = AddModificationTemplate("another_template_test");
265 # Duplicate 245 => 3x245
266 is( AddModificationTemplateAction(
267 $template_id, 'copy_field', 0,
268 '245', '', '', '245', '',
270 'if', '245', 'a', 'equals', 'Bad title', '',
271 'Copy field 245 if 245$a eq "Bad title"'
272 ), 1, 'Add action: copy field 245 if 245$a eq "Bad title"');
274 $record = new_record();
275 is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
277 my @fields_245a = Koha::SimpleMARC::read_field({
282 is_deeply( \@fields_245a, [
283 'The art of computer programming',
286 ], 'Copy field has copied the "Bad title"' );
288 # Update first "Bad title"
289 is( AddModificationTemplateAction(
290 $template_id, 'update_field', 1,
291 '245', 'a', 'Bad title updated', '', '',
293 'if', '245', 'a', 'equals', 'Bad title', '',
294 'Update first 245$a matching "Bad title" with "Bad title updated"'
295 ), 1, 'Add action: update field 245$a matching "Bad title" with "Bad title updated');
297 $record = new_record();
298 is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
300 @fields_245a = Koha::SimpleMARC::read_field({
305 is_deeply( \@fields_245a, [
306 'The art of computer programming',
309 ], 'update_field has update first the "Bad title"' );
311 # Duplicate first 245 => 3x245
312 is( AddModificationTemplateAction(
313 $template_id, 'copy_field', 1,
314 '245', '', '', '245', '',
316 'if', '245', 'a', 'equals', '^Bad title', '1',
317 'Copy field 245 if 245$a =~ "^Bad title"'
318 ), 1, 'Add action: copy field 245 if 245$a =~ "^Bad title"');
320 $record = new_record();
321 is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
323 @fields_245a = Koha::SimpleMARC::read_field({
328 is_deeply( \@fields_245a, [
329 'The art of computer programming',
333 ], 'Copy field has copied first "^Bad title"' );
335 # Delete first ^Bad title
336 is( AddModificationTemplateAction(
337 $template_id, 'delete_field', 1,
338 '245', '', '', '', '',
340 'if', '245', 'a', 'equals', '^Bad title', '1',
341 'Delete first 245$a mathing ^Bad title'
342 ), 1, 'Delete first 245$a mathing ^Bad title');
344 $record = new_record();
345 is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
346 @fields_245a = Koha::SimpleMARC::read_field({
351 is_deeply( \@fields_245a, [
352 'The art of computer programming',
355 ], 'delete field has been deleted the right field"' );
357 is( AddModificationTemplateAction(
358 $template_id, 'delete_field', 0,
359 '245', '', '', '', '',
361 'if', '245', 'a', 'equals', 'updated$', '1',
362 'Delete first 245$a mathing updated$'
363 ), 1, 'Delete first 245$a mathing updated$');
365 $record = new_record();
366 is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
367 @fields_245a = Koha::SimpleMARC::read_field({
372 is_deeply( \@fields_245a, [
373 'The art of computer programming',
375 ], 'delete field has been deleted the right field"' );
377 subtest 'GetModificationTemplates' => sub {
379 $dbh->do(q|DELETE FROM marc_modification_templates|);
380 AddModificationTemplate("zzz");
381 AddModificationTemplate("aaa");
382 AddModificationTemplate("mmm");
383 my @templates = GetModificationTemplates();
384 is_deeply( [map{$_->{name}} @templates], ['aaa', 'mmm', 'zzz'] );
387 subtest "not_equals" => sub {
389 $dbh->do(q|DELETE FROM marc_modification_templates|);
390 my $template_id = AddModificationTemplate("template_name");
391 AddModificationTemplateAction(
392 $template_id, 'move_field', 0,
393 '650', '', '', '651', '',
395 'if', '650', '9', 'not_equals', '499', '',
396 'Move field 650 to 651 if 650$9 != 499'
398 my $record = new_record();
399 ModifyRecordWithTemplate( $template_id, $record );
400 my $expected_record = expected_record_2();
401 is_deeply( $record, $expected_record, '650 has been moved to 651 when 650$9 != 499' );
403 $dbh->do(q|DELETE FROM marc_modification_templates|);
404 $template_id = AddModificationTemplate("template_name");
405 AddModificationTemplateAction(
406 $template_id, 'move_field', 0,
407 '650', '', '', '651', '',
409 'if', '650', 'b', 'not_equals', '499', '',
410 'Move field 650 to 651 if 650$b != 499'
412 $record = new_record();
413 ModifyRecordWithTemplate( $template_id, $record );
414 $expected_record = new_record();
415 is_deeply( $record, $expected_record, 'None 650 have been moved, no $650$b exists' );
418 subtest "when conditional field doesn't match the from field" => sub {
420 $dbh->do(q|DELETE FROM marc_modification_templates|);
421 my $template_id = AddModificationTemplate("template_name");
422 AddModificationTemplateAction(
423 $template_id, 'delete_field', 0,
424 '650', '9', '', '', '',
426 'if', '245', 'a', 'equals', 'Bad title', '',
427 'Delete fields 650$9 if 245$a == "Bad title"'
429 my $record = new_record();
430 ModifyRecordWithTemplate( $template_id, $record );
431 my $expected_record = expected_record_3();
432 is_deeply( $record, $expected_record, '650$9 fields have been deleted when 245$a == "Bad title"' );
434 $dbh->do(q|DELETE FROM marc_modification_templates|);
435 $template_id = AddModificationTemplate("template_name");
436 AddModificationTemplateAction(
437 $template_id, 'delete_field', 0,
438 '650', '9', '', '', '',
440 'if', '245', 'a', 'exists', '', '',
441 'Delete fields 650$9 if 245$a exists'
443 $record = new_record();
444 ModifyRecordWithTemplate( $template_id, $record );
445 $expected_record = expected_record_3();
446 is_deeply( $record, $expected_record, '650$9 fields have been deleted because 245$a exists' );
448 $dbh->do(q|DELETE FROM marc_modification_templates|);
449 $template_id = AddModificationTemplate("template_name");
450 AddModificationTemplateAction(
451 $template_id, 'delete_field', 1,
452 '650', '', '', '', '',
454 'if', '245', 'a', 'exists', '', '',
455 'Delete 1st field 650 if 245$a exists'
457 $record = new_record();
458 ModifyRecordWithTemplate( $template_id, $record );
459 $expected_record = expected_record_4();
460 is_deeply( $record, $expected_record, '1st 650 field has been deleted because 245$a exists' );
464 my $record = MARC::Record->new;
465 $record->leader('03174nam a2200445 a 4500');
469 a => 'Knuth, Donald Ervin',
474 a => 'The art of computer programming',
475 c => 'Donald E. Knuth.',
480 c => 'Donald E. Knuth.',
484 a => 'Computer programming.',
489 a => 'Computer programming.',
500 $record->append_fields(@fields);
504 sub expected_record_1 {
505 my $record = MARC::Record->new;
506 $record->leader('03174nam a2200445 a 4500');
510 a => 'Knuth, Donald Ervin',
515 a => 'The art of computer programming',
516 c => 'Donald E. Knuth.',
524 p => '3010023917_updated',
531 a => 'The art of computer programming',
535 a => 'Computer algorithms.',
540 a => 'existent - updated.',
544 a => 'additional existent.',
550 $record->append_fields(@fields);
554 sub expected_record_2 {
555 my $record = MARC::Record->new;
556 $record->leader('03174nam a2200445 a 4500');
560 a => 'Knuth, Donald Ervin',
565 a => 'The art of computer programming',
566 c => 'Donald E. Knuth.',
571 c => 'Donald E. Knuth.',
575 a => 'Computer programming.',
587 a => 'Computer programming.',
591 $record->append_fields(@fields);
595 sub expected_record_3 {
596 my $record = MARC::Record->new;
597 $record->leader('03174nam a2200445 a 4500');
601 a => 'Knuth, Donald Ervin',
606 a => 'The art of computer programming',
607 c => 'Donald E. Knuth.',
612 c => 'Donald E. Knuth.',
616 a => 'Computer programming.',
620 a => 'Computer programming.',
630 $record->append_fields(@fields);
634 sub expected_record_4 {
635 my $record = MARC::Record->new;
636 $record->leader('03174nam a2200445 a 4500');
640 a => 'Knuth, Donald Ervin',
645 a => 'The art of computer programming',
646 c => 'Donald E. Knuth.',
651 c => 'Donald E. Knuth.',
655 a => 'Computer programming.',
666 $record->append_fields(@fields);
670 # Tests related to use of subfield 0 ($0)
673 my $record = MARC::Record->new;
674 $record->leader('03174nam a2200445 a 4500');
679 a => 'Knuth, Donald Ervin',
685 a => 'The art of computer programming',
686 c => 'Donald E. Knuth.',
691 a => 'Computer programming.',
695 $record->append_fields(@fields);
699 sub expected_record_0 {
700 my $record = MARC::Record->new;
701 $record->leader('03174nam a2200445 a 4500');
706 a => 'The art of computer programming',
707 c => 'Donald E. Knuth.',
712 a => 'Computer programming.',
726 a => 'The art of computer programming',
727 c => 'Donald E. Knuth.',
730 $record->append_fields(@fields);
734 $record = new_record_0();
735 is( ModifyRecordWithTemplate( $template_id, $record ), undef, "The ModifyRecordWithTemplate returns undef" );
737 $template_id = AddModificationTemplate("template_test_subfield_0");
738 like( $template_id, qr|^\d+$|, "new template returns an id" );
740 # Delete subfield 100$0
741 is( AddModificationTemplateAction(
742 $template_id, 'delete_field', 0,
743 '100', '0', '', '', '',
745 '', '', '', '', '', '',
746 'Action 1: Delete subfield 100$0'
747 ), 1, 'Action 1: Delete subfield 100$0');
749 # Add new subfield 100$0 with value "Test"
750 is( AddModificationTemplateAction(
751 $template_id, 'add_field', 0,
752 '100', '0', 'Test', '', '',
754 '', '', '', '', '', '',
755 'Action 2: Add new subfield 100$0 with value "Test"'
756 ), 1, 'Action 2: Add new subfield 100$0');
758 # Update existing or add new subfield 100$0 with value "TestUpdated"
759 is( AddModificationTemplateAction(
760 $template_id, 'update_field', 0,
761 '100', '0', 'TestUpdated', '', '',
763 '', '', '', '', '', '',
764 'Action 3: Update existing or add new subfield 100$0 with value "TestUpdated"'
765 ), 1, 'Action 3: Update existing or add new subfield 100$0 with value "TestUpdated"');
767 # Move subfield 100$0 to 600$0
768 is( AddModificationTemplateAction(
769 $template_id, 'move_field', 0,
770 '100', '0', '', '600', '0',
772 '', '', '', '', '', '',
773 'Action 4: Move subfield 100$0 to 600$0'
774 ), 1, 'Action 4: Move subfield 100$0 to 600$0');
776 # Copy subfield 600$0 to 100$0
777 is( AddModificationTemplateAction(
778 $template_id, 'copy_field', 0,
779 '600', '0', '', '100', '0',
781 '', '', '', '', '', '',
782 'Action 5: Copy subfield 600$0 to 100$0'
783 ), 1, 'Action 5: Copy subfield 600$0 to 100$0');
785 # Copy and replace subfield 245$0 to 700$0
786 is( AddModificationTemplateAction(
787 $template_id, 'copy_and_replace_field', 0,
788 '245', '0', '', '700', '0',
790 '', '', '', '', '', '',
791 'Action 6: Copy and replace subfield 245$0 to 700$0'
792 ), 1, 'Action 6: Copy and replace subfield 245$0 to 700$0');
794 my @actions_0 = GetModificationTemplateActions( $template_id );
795 is( @actions_0, 6, "6 actions are inserted");
797 ModifyRecordWithTemplate( $template_id, $record );
798 my $expected_record_0 = expected_record_0();
799 is_deeply( $record, $expected_record_0, '100$0 has been deleted, added back, updated, moved to 600$0, and copied back to 100$0; finally, 245$0 has been copied and replaced to 700$0' );