View | Details | Raw Unified | Return to bug 14957
Collapse All | Expand All

(-)a/t/db_dependent/Biblio/MarcOverlayRules.t (-356 / +339 lines)
Lines 17-22 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
use Try::Tiny;
19
use Try::Tiny;
20
use POSIX qw(floor);
20
21
21
use MARC::Record;
22
use MARC::Record;
22
23
Lines 36-82 $schema->storage->txn_begin; Link Here
36
37
37
t::lib::Mocks::mock_preference('MARCOverlayRules', '1');
38
t::lib::Mocks::mock_preference('MARCOverlayRules', '1');
38
39
40
Koha::MarcOverlayRules->search->delete;
41
42
sub build_record {
43
    my ( $fields ) = @_;
44
    my $record = MARC::Record->new;
45
    my @marc_fields;
46
    for my $f ( @$fields ) {
47
        my $tag = $f->[0];
48
        my @subfields;
49
        for my $i ( 1 .. (scalar(@$f) / 2) ) {
50
            my $ii = floor($i*2);
51
            push @subfields, $f->[$ii - 1], $f->[$ii];
52
        }
53
        push @marc_fields, MARC::Field->new($tag, '','', @subfields);
54
    }
55
56
    $record->append_fields(@marc_fields);
57
    return $record;
58
}
59
60
39
# Create a record
61
# Create a record
40
my $orig_record = MARC::Record->new();
62
my $orig_record = build_record([
41
$orig_record->append_fields (
63
    [ '250', 'a', '250 bottles of beer on the wall' ],
42
    MARC::Field->new('250', '','', 'a' => '250 bottles of beer on the wall'),
64
    [ '250', 'a', '256 bottles of beer on the wall' ],
43
    MARC::Field->new('250', '','', 'a' => '256 bottles of beer on the wall'),
65
    [ '500', 'a', 'One bottle of beer in the fridge' ],
44
    MARC::Field->new('500', '','', 'a' => 'One bottle of beer in the fridge'),
66
]
45
);
67
);
46
68
47
my $incoming_record = MARC::Record->new();
69
my $incoming_record = build_record(
48
$incoming_record->append_fields(
70
    [
49
    MARC::Field->new('250', '', '', 'a' => '256 bottles of beer on the wall'), # Unchanged
71
    ['250', 'a', '256 bottles of beer on the wall'], # Unchanged
50
    MARC::Field->new('250', '', '', 'a' => '251 bottles of beer on the wall'), # Appended
72
    ['250', 'a', '251 bottles of beer on the wall'], # Appended
51
    # MARC::Field->new('250', '', '', 'a' => '250 bottles of beer on the wall'), # Removed
73
    #['250', 'a', '250 bottles of beer on the wall'], # Removed
52
    # MARC::Field->new('500', '', '', 'a' => 'One bottle of beer in the fridge'), # Deleted
74
    #['500', 'a', 'One bottle of beer in the fridge'], # Deleted
53
    MARC::Field->new('501', '', '', 'a' => 'One cold bottle of beer in the fridge'), # Added
75
    ['501', 'a', 'One cold bottle of beer in the fridge'], # Added
54
    MARC::Field->new('501', '', '', 'a' => 'Two cold bottles of beer in the fridge'), # Added
76
    ['501', 'a', 'Two cold bottles of beer in the fridge'], # Added
77
]
55
);
78
);
56
79
57
# Test default behavior when MARCOverlayRules is enabled, but no rules defined (overwrite)
80
# Test default behavior when MARCOverlayRules is enabled, but no rules defined (overwrite)
58
subtest 'Record fields has been overwritten when no merge rules are defined' => sub {
81
subtest 'No rule defined' => sub {
59
    plan tests => 4;
82
    plan tests => 1;
60
83
61
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
84
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
62
85
63
    my @all_fields = $merged_record->fields();
86
    is(
64
87
        $merged_record->as_formatted,
65
    cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields");
88
        $incoming_record->as_formatted,
66
    is_deeply(
89
        'Incoming record used as it with no rules defined'
67
        [map { $_->subfield('a') } $merged_record->field('250') ],
68
        ['256 bottles of beer on the wall', '251 bottles of beer on the wall'],
69
        '"250" fields has been appended and removed'
70
    );
90
    );
71
91
72
    my @fields = $merged_record->field('500');
73
    cmp_ok(scalar @fields, '==', 0, '"500" field has been deleted');
74
75
    is_deeply(
76
        [map { $_->subfield('a') } $merged_record->field('501') ],
77
        ['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'],
78
        '"501" fields has been added'
79
    );
80
};
92
};
81
93
82
my $rule =  Koha::MarcOverlayRules->find_or_create({
94
my $rule =  Koha::MarcOverlayRules->find_or_create({
Lines 90-116 my $rule = Koha::MarcOverlayRules->find_or_create({ Link Here
90
});
102
});
91
103
92
subtest 'Record fields has been protected when matched merge all rule operations are set to "0"' => sub {
104
subtest 'Record fields has been protected when matched merge all rule operations are set to "0"' => sub {
93
    plan tests => 3;
105
    plan tests => 1;
94
106
95
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
107
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
96
108
97
    my @all_fields = $merged_record->fields();
109
    is(
98
    cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields");
110
        $merged_record->as_formatted,
99
111
        $orig_record->as_formatted,
100
    is_deeply(
112
        'Record not modified if all op=0'
101
        [map { $_->subfield('a') } $merged_record->field('250') ],
102
        ['250 bottles of beer on the wall', '256 bottles of beer on the wall'],
103
        '"250" fields has retained their original value'
104
    );
105
    is_deeply(
106
        [map { $_->subfield('a') } $merged_record->field('500') ],
107
        ['One bottle of beer in the fridge'],
108
        '"500" field has retained it\'s original value'
109
    );
113
    );
114
110
};
115
};
111
116
112
subtest 'Only new fields has been added when add = 1, append = 0, remove = 0, delete = 0' => sub {
117
subtest '"Add new" - Only new fields has been added when add = 1, append = 0, remove = 0, delete = 0' => sub {
113
    plan tests => 4;
118
    plan tests => 1;
114
119
115
    $rule->set(
120
    $rule->set(
116
        {
121
        {
Lines 119-153 subtest 'Only new fields has been added when add = 1, append = 0, remove = 0, de Link Here
119
            'remove' => 0,
124
            'remove' => 0,
120
            'delete' => 0,
125
            'delete' => 0,
121
        }
126
        }
122
    );
127
    )->store();
123
    $rule->store();
124
128
125
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
129
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
126
130
127
    my @all_fields = $merged_record->fields();
131
    my $expected_record = build_record([
128
    cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields");
132
            [ '250', 'a', '250 bottles of beer on the wall' ],        # original
129
133
            [ '250', 'a', '256 bottles of beer on the wall' ],        # original
130
    is_deeply(
134
            [ '500', 'a', 'One bottle of beer in the fridge' ],       # original
131
        [map { $_->subfield('a') } $merged_record->field('250') ],
135
            [ '501', 'a', 'One cold bottle of beer in the fridge' ],  # incoming
132
        ['250 bottles of beer on the wall', '256 bottles of beer on the wall'],
136
            [ '501', 'a', 'Two cold bottles of beer in the fridge' ], # incoming
133
        '"250" fields retain their original value'
137
    ]);
138
    is(
139
        $merged_record->as_formatted,
140
        $expected_record->as_formatted,
141
        'Add fields from the incoming record that are not in the original record'
134
    );
142
    );
135
143
136
    is_deeply(
137
        [map { $_->subfield('a') } $merged_record->field('500') ],
138
        ['One bottle of beer in the fridge'],
139
        '"500" field retain it\'s original value'
140
    );
141
142
    is_deeply(
143
        [map { $_->subfield('a') } $merged_record->field('501') ],
144
        ['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'],
145
        '"501" fields has been added'
146
    );
147
};
144
};
148
145
149
subtest 'Only appended fields has been added when add = 0, append = 1, remove = 0, delete = 0' => sub {
146
subtest 'Only appended fields has been added when add = 0, append = 1, remove = 0, delete = 0' => sub {
150
    plan tests => 3;
147
    plan tests => 1;
151
148
152
    $rule->set(
149
    $rule->set(
153
        {
150
        {
Lines 156-185 subtest 'Only appended fields has been added when add = 0, append = 1, remove = Link Here
156
            'remove' => 0,
153
            'remove' => 0,
157
            'delete' => 0,
154
            'delete' => 0,
158
        }
155
        }
159
    );
156
    )->store;
160
    $rule->store();
161
157
162
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
158
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
163
159
164
    my @all_fields = $merged_record->fields();
160
    my $expected_record = build_record([
165
    cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields");
161
            [ '250', 'a', '250 bottles of beer on the wall' ],        # original
166
162
            [ '250', 'a', '256 bottles of beer on the wall' ],        # original
167
    is_deeply(
163
            # "251" field has been appended
168
        [map { $_->subfield('a') } $merged_record->field('250') ],
164
            [ '250', 'a', '251 bottles of beer on the wall' ],        # incoming
169
        ['250 bottles of beer on the wall', '256 bottles of beer on the wall', '251 bottles of beer on the wall'],
165
            # "500" field has retained its original value
170
        '"251" field has been appended'
166
            [ '500', 'a', 'One bottle of beer in the fridge' ],       # original
171
    );
167
    ]);
172
168
173
    is_deeply(
169
    is(
174
        [map { $_->subfield('a') } $merged_record->field('500') ],
170
        $merged_record->as_formatted,
175
        ['One bottle of beer in the fridge'],
171
        $expected_record->as_formatted,
176
        '"500" field has retained it\'s original value'
172
        'Add fields from the incoming record that are in the original record'
177
    );
173
    );
178
174
179
};
175
};
180
176
181
subtest 'Appended and added fields has been added when add = 1, append = 1, remove = 0, delete = 0' => sub {
177
subtest '"Add and append" - add = 1, append = 1, remove = 0, delete = 0' => sub {
182
    plan tests => 4;
178
    plan tests => 1;
183
179
184
    $rule->set(
180
    $rule->set(
185
        {
181
        {
Lines 188-222 subtest 'Appended and added fields has been added when add = 1, append = 1, remo Link Here
188
            'remove' => 0,
184
            'remove' => 0,
189
            'delete' => 0,
185
            'delete' => 0,
190
        }
186
        }
191
    );
187
    )->store;
192
    $rule->store();
188
189
    my $expected_record = build_record([
190
            [ '250', 'a', '250 bottles of beer on the wall' ],        # original
191
            [ '250', 'a', '256 bottles of beer on the wall' ],        # original
192
            # "251" field has been appended
193
            [ '250', 'a', '251 bottles of beer on the wall' ],        # incoming
194
            # "500" field has retained its original value
195
            [ '500', 'a', 'One bottle of beer in the fridge' ],       # original
196
            # "501" fields have been added
197
            [ '501', 'a', 'One cold bottle of beer in the fridge' ],  # incoming
198
            [ '501', 'a', 'Two cold bottles of beer in the fridge' ], # incoming
199
    ]);
193
200
194
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
201
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
195
202
196
    my @all_fields = $merged_record->fields();
203
    is(
197
    cmp_ok(scalar @all_fields, '==', 6, "Record has the expected number of fields");
204
        $merged_record->as_formatted,
198
205
        $expected_record->as_formatted,
199
    is_deeply(
206
        'Appended and added fields have been added'
200
        [map { $_->subfield('a') } $merged_record->field('250') ],
201
        ['250 bottles of beer on the wall', '256 bottles of beer on the wall', '251 bottles of beer on the wall'],
202
        '"251" field has been appended'
203
    );
204
205
    is_deeply(
206
        [map { $_->subfield('a') } $merged_record->field('500') ],
207
        ['One bottle of beer in the fridge'],
208
        '"500" field has retained it\'s original value'
209
    );
207
    );
210
208
211
    is_deeply(
212
        [map { $_->subfield('a') } $merged_record->field('501') ],
213
        ['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'],
214
        '"501" fields has been added'
215
    );
216
};
209
};
217
210
218
subtest 'Record fields has been only removed when add = 0, append = 0, remove = 1, delete = 0' => sub {
211
subtest 'Record fields has been only removed when add = 0, append = 0, remove = 1, delete = 0' => sub {
219
    plan tests => 3;
212
    plan tests => 1;
220
213
221
    $rule->set(
214
    $rule->set(
222
        {
215
        {
Lines 225-252 subtest 'Record fields has been only removed when add = 0, append = 0, remove = Link Here
225
            'remove' => 1,
218
            'remove' => 1,
226
            'delete' => 0,
219
            'delete' => 0,
227
        }
220
        }
228
    );
221
    )->store;
229
    $rule->store();
230
222
231
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
223
    # Warning - not obvious as the 500 is untouched
224
    my $expected_record = build_record([
225
            # "250" field has been removed
226
            [ '250', 'a', '256 bottles of beer on the wall' ],        # original and incoming
227
            # "500" field has retained its original value
228
            [ '500', 'a', 'One bottle of beer in the fridge' ],       # original
229
    ]);
232
230
233
    my @all_fields = $merged_record->fields();
231
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
234
    cmp_ok(scalar @all_fields, '==', 2, "Record has the expected number of fields");
235
232
236
    is_deeply(
233
    is(
237
        [map { $_->subfield('a') } $merged_record->field('250') ],
234
        $merged_record->as_formatted,
238
        ['256 bottles of beer on the wall'],
235
        $expected_record->as_formatted,
239
        '"250" field has been removed'
236
        'Fields not in the incoming record are removed'
240
    );
241
    is_deeply(
242
        [map { $_->subfield('a') } $merged_record->field('500') ],
243
        ['One bottle of beer in the fridge'],
244
        '"500" field has retained it\'s original value'
245
    );
237
    );
238
246
};
239
};
247
240
248
subtest 'Record fields has been added and removed when add = 1, append = 0, remove = 1, delete = 0' => sub {
241
subtest 'Record fields has been added and removed when add = 1, append = 0, remove = 1, delete = 0' => sub {
249
    plan tests => 4;
242
    plan tests => 1;
250
243
251
    $rule->set(
244
    $rule->set(
252
        {
245
        {
Lines 255-288 subtest 'Record fields has been added and removed when add = 1, append = 0, remo Link Here
255
            'remove' => 1,
248
            'remove' => 1,
256
            'delete' => 0,
249
            'delete' => 0,
257
        }
250
        }
258
    );
251
    )->store();
259
    $rule->store();
252
253
    my $expected_record = build_record([
254
            # "250" field has been removed
255
            [ '250', 'a', '256 bottles of beer on the wall' ],        # original and incoming
256
            # "500" field has retained its original value
257
            [ '500', 'a', 'One bottle of beer in the fridge' ],       # original
258
            # "501" fields have been added
259
            [ '501', 'a', 'One cold bottle of beer in the fridge' ],  # incoming
260
            [ '501', 'a', 'Two cold bottles of beer in the fridge' ], # incoming
261
    ]);
260
262
261
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
263
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
262
264
263
    my @all_fields = $merged_record->fields();
265
    is(
264
    cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields");
266
        $merged_record->as_formatted,
265
267
        $expected_record->as_formatted,
266
    is_deeply(
268
        'Fields not in the incoming record are removed, fields not in the original record have been added'
267
        [map { $_->subfield('a') } $merged_record->field('250') ],
268
        ['256 bottles of beer on the wall'],
269
        '"250" field has been removed'
270
    );
271
    is_deeply(
272
        [map { $_->subfield('a') } $merged_record->field('500') ],
273
        ['One bottle of beer in the fridge'],
274
        '"500" field has retained it\'s original value'
275
    );
269
    );
276
270
277
    is_deeply(
278
        [map { $_->subfield('a') } $merged_record->field('501') ],
279
        ['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'],
280
        '"501" fields has been added'
281
    );
282
};
271
};
283
272
284
subtest 'Record fields has been appended and removed when add = 0, append = 1, remove = 1, delete = 0' => sub {
273
subtest 'Record fields has been appended and removed when add = 0, append = 1, remove = 1, delete = 0' => sub {
285
    plan tests => 3;
274
    plan tests => 1;
286
275
287
    $rule->set(
276
    $rule->set(
288
        {
277
        {
Lines 291-318 subtest 'Record fields has been appended and removed when add = 0, append = 1, r Link Here
291
            'remove' => 1,
280
            'remove' => 1,
292
            'delete' => 0,
281
            'delete' => 0,
293
        }
282
        }
294
    );
283
    )->store();
295
    $rule->store();
296
284
297
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
285
    my $expected_record = build_record([
286
            # "250" field has been appended and removed
287
            [ '250', 'a', '256 bottles of beer on the wall' ],        # incoming
288
            [ '250', 'a', '251 bottles of beer on the wall' ],        # incoming
289
            # "500" field has retained its original value
290
            [ '500', 'a', 'One bottle of beer in the fridge' ],       # original
291
    ]);
298
292
299
    my @all_fields = $merged_record->fields();
293
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
300
    cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields");
301
294
302
    is_deeply(
295
    is(
303
        [map { $_->subfield('a') } $merged_record->field('250') ],
296
        $merged_record->as_formatted,
304
        ['256 bottles of beer on the wall', '251 bottles of beer on the wall'],
297
        $expected_record->as_formatted,
305
        '"250" fields has been appended and removed'
298
        'Fields in the incoming record replace fields from the original record, fields only in the original record has been kept, fields not in the original record have been skipped'
306
    );
307
    is_deeply(
308
        [map { $_->subfield('a') } $merged_record->field('500') ],
309
        ['One bottle of beer in the fridge'],
310
        '"500" field has retained it\'s original value'
311
    );
299
    );
300
312
};
301
};
313
302
314
subtest 'Record fields has been added, appended and removed when add = 0, append = 1, remove = 1, delete = 0' => sub {
303
subtest 'Record fields has been added, appended and removed when add = 0, append = 1, remove = 1, delete = 0' => sub {
315
    plan tests => 4;
304
    plan tests => 1;
316
305
317
    $rule->set(
306
    $rule->set(
318
        {
307
        {
Lines 321-355 subtest 'Record fields has been added, appended and removed when add = 0, append Link Here
321
            'remove' => 1,
310
            'remove' => 1,
322
            'delete' => 0,
311
            'delete' => 0,
323
        }
312
        }
324
    );
313
    )->store();
325
    $rule->store();
314
315
    my $expected_record = build_record([
316
            # "250" field has been appended and removed
317
            [ '250', 'a', '256 bottles of beer on the wall' ],        # incoming
318
            [ '250', 'a', '251 bottles of beer on the wall' ],        # incoming
319
            # "500" field has retained its original value
320
            [ '500', 'a', 'One bottle of beer in the fridge' ],       # original
321
            # "501" fields have been added
322
            [ '501', 'a', 'One cold bottle of beer in the fridge' ],  # incoming
323
            [ '501', 'a', 'Two cold bottles of beer in the fridge' ], # incoming
324
    ]);
326
325
327
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
326
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
328
327
329
    my @all_fields = $merged_record->fields();
328
    is(
330
    cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields");
329
        $merged_record->as_formatted,
331
330
        $expected_record->as_formatted,
332
    is_deeply(
331
        'Fields in the incoming record replace fields from the original record, fields only in the original record has been kept, fields not in the original record have been added'
333
        [map { $_->subfield('a') } $merged_record->field('250') ],
334
        ['256 bottles of beer on the wall', '251 bottles of beer on the wall'],
335
        '"250" fields has been appended and removed'
336
    );
337
338
    is_deeply(
339
        [map { $_->subfield('a') } $merged_record->field('500') ],
340
        ['One bottle of beer in the fridge'],
341
        '"500" field has retained it\'s original value'
342
    );
332
    );
343
333
344
    is_deeply(
345
        [map { $_->subfield('a') } $merged_record->field('501') ],
346
        ['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'],
347
        '"501" fields has been added'
348
    );
349
};
334
};
350
335
351
subtest 'Record fields has been deleted when add = 0, append = 0, remove = 0, delete = 1' => sub {
336
subtest 'Record fields has been deleted when add = 0, append = 0, remove = 0, delete = 1' => sub {
352
    plan tests => 2;
337
    plan tests => 1;
353
338
354
    $rule->set(
339
    $rule->set(
355
        {
340
        {
Lines 358-380 subtest 'Record fields has been deleted when add = 0, append = 0, remove = 0, de Link Here
358
            'remove' => 0,
343
            'remove' => 0,
359
            'delete' => 1,
344
            'delete' => 1,
360
        }
345
        }
361
    );
346
    )->store();
362
    $rule->store();
363
347
364
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
348
    # FIXME the tooltip for delete is saying
349
    # "If the original record has fields matching the rule tag, but no fields with this are found in the incoming record"
350
    # But it does not seem to do that
351
    my $expected_record = build_record([
352
            # "250" fields have retained their original value
353
            [ '250', 'a', '250 bottles of beer on the wall' ],        # original
354
            [ '250', 'a', '256 bottles of beer on the wall' ],        # original
355
    ]);
365
356
366
    my @all_fields = $merged_record->fields();
357
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
367
    cmp_ok(scalar @all_fields, '==', 2, "Record has the expected number of fields");
368
358
369
    is_deeply(
359
    is(
370
        [map { $_->subfield('a') } $merged_record->field('250') ],
360
        $merged_record->as_formatted,
371
        ['250 bottles of beer on the wall', '256 bottles of beer on the wall'],
361
        $expected_record->as_formatted,
372
        '"250" fields has retained their original value'
362
        'Only fields in original and incoming are kept, but incoming values are ignored'
373
    );
363
    );
364
374
};
365
};
375
366
376
subtest 'Record fields has been added and deleted when add = 1, append = 0, remove = 0, delete = 1' => sub {
367
subtest 'Record fields has been added and deleted when add = 1, append = 0, remove = 0, delete = 1' => sub {
377
    plan tests => 3;
368
    plan tests => 1;
378
369
379
    $rule->set(
370
    $rule->set(
380
        {
371
        {
Lines 383-411 subtest 'Record fields has been added and deleted when add = 1, append = 0, remo Link Here
383
            'remove' => 0,
374
            'remove' => 0,
384
            'delete' => 1,
375
            'delete' => 1,
385
        }
376
        }
386
    );
377
    )->store();
387
    $rule->store();
378
379
    # Warning - is there a use case in real-life for this combinaison?
380
    my $expected_record = build_record([
381
            # "250" field have retained their original value
382
            [ '250', 'a', '250 bottles of beer on the wall' ],        # original
383
            [ '250', 'a', '256 bottles of beer on the wall' ],        # original
384
            # "500" field has been removed
385
            # "501" fields have been added
386
            [ '501', 'a', 'One cold bottle of beer in the fridge' ],  # incoming
387
            [ '501', 'a', 'Two cold bottles of beer in the fridge' ], # incoming
388
    ]);
388
389
389
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
390
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
390
391
391
    my @all_fields = $merged_record->fields();
392
    is(
392
    cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields");
393
        $merged_record->as_formatted,
393
394
        $expected_record->as_formatted,
394
    is_deeply(
395
        'Fields from the incoming records are kept, but keep the value from the original record if they already existed'
395
        [map { $_->subfield('a') } $merged_record->field('250') ],
396
        ['250 bottles of beer on the wall', '256 bottles of beer on the wall'],
397
        '"250" fields has retained their original value'
398
    );
396
    );
399
397
400
    is_deeply(
401
        [map { $_->subfield('a') } $merged_record->field('501') ],
402
        ['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'],
403
        '"501" fields has been added'
404
    );
405
};
398
};
406
399
407
subtest 'Record fields has been appended and deleted when add = 0, append = 1, remove = 0, delete = 1' => sub {
400
subtest 'Record fields has been appended and deleted when add = 0, append = 1, remove = 0, delete = 1' => sub {
408
    plan tests => 2;
401
    plan tests => 1;
409
402
410
    $rule->set(
403
    $rule->set(
411
        {
404
        {
Lines 414-436 subtest 'Record fields has been appended and deleted when add = 0, append = 1, r Link Here
414
            'remove' => 0,
407
            'remove' => 0,
415
            'delete' => 1,
408
            'delete' => 1,
416
        }
409
        }
417
    );
410
    )->store();
418
    $rule->store();
419
411
420
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
412
    my $expected_record = build_record([
413
            # "250" field has been appended
414
            [ '250', 'a', '250 bottles of beer on the wall' ],        # original
415
            [ '250', 'a', '256 bottles of beer on the wall' ],        # original and incoming
416
            [ '250', 'a', '251 bottles of beer on the wall' ],        # incoming
417
            # "500" field has been removed
418
    ]);
421
419
422
    my @all_fields = $merged_record->fields();
420
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
423
    cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields");
424
421
425
    is_deeply(
422
    is(
426
        [map { $_->subfield('a') } $merged_record->field('250') ],
423
        $merged_record->as_formatted,
427
        ['250 bottles of beer on the wall', '256 bottles of beer on the wall', '251 bottles of beer on the wall'],
424
        $expected_record->as_formatted,
428
        '"250" field has been appended'
425
        'Only fields that already existed are appended'
429
    );
426
    );
427
430
};
428
};
431
429
432
subtest 'Record fields has been added, appended and deleted when add = 1, append = 1, remove = 0, delete = 1' => sub {
430
subtest 'Record fields has been added, appended and deleted when add = 1, append = 1, remove = 0, delete = 1' => sub {
433
    plan tests => 3;
431
    plan tests => 1;
434
432
435
    $rule->set(
433
    $rule->set(
436
        {
434
        {
Lines 439-467 subtest 'Record fields has been added, appended and deleted when add = 1, append Link Here
439
            'remove' => 0,
437
            'remove' => 0,
440
            'delete' => 1,
438
            'delete' => 1,
441
        }
439
        }
442
    );
440
    )->store();
443
    $rule->store();
441
442
    my $expected_record = build_record([
443
            # "250" field has been appended
444
            [ '250', 'a', '250 bottles of beer on the wall' ],        # original
445
            [ '250', 'a', '256 bottles of beer on the wall' ],        # original and incoming
446
            [ '250', 'a', '251 bottles of beer on the wall' ],        # incoming
447
            # "500" field has been removed
448
            # "501" fields have been added
449
            [ '501', 'a', 'One cold bottle of beer in the fridge' ],  # incoming
450
            [ '501', 'a', 'Two cold bottles of beer in the fridge' ], # incoming
451
    ]);
444
452
445
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
453
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
446
454
447
    my @all_fields = $merged_record->fields();
455
    is(
448
    cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields");
456
        $merged_record->as_formatted,
449
457
        $expected_record->as_formatted,
450
    is_deeply(
458
        'Fields in the incoming record are added and appended, fields not in the original record are removed'
451
        [map { $_->subfield('a') } $merged_record->field('250') ],
452
        ['250 bottles of beer on the wall', '256 bottles of beer on the wall', '251 bottles of beer on the wall'],
453
        '"250" field has been appended'
454
    );
459
    );
455
460
456
    is_deeply(
457
        [map { $_->subfield('a') } $merged_record->field('501') ],
458
        ['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'],
459
        '"501" fields has been added'
460
    );
461
};
461
};
462
462
463
subtest 'Record fields has been removed and deleted when add = 0, append = 0, remove = 1, delete = 1' => sub {
463
subtest 'Record fields has been removed and deleted when add = 0, append = 0, remove = 1, delete = 1' => sub {
464
    plan tests => 2;
464
    plan tests => 1;
465
465
466
    $rule->set(
466
    $rule->set(
467
        {
467
        {
Lines 470-492 subtest 'Record fields has been removed and deleted when add = 0, append = 0, re Link Here
470
            'remove' => 1,
470
            'remove' => 1,
471
            'delete' => 1,
471
            'delete' => 1,
472
        }
472
        }
473
    );
473
    )->store();
474
    $rule->store();
475
474
476
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
475
    my $expected_record = build_record([
476
            # "250" field has been removed
477
            [ '250', 'a', '256 bottles of beer on the wall' ],        # original and incoming
478
            # "500" field has been removed
479
    ]);
477
480
478
    my @all_fields = $merged_record->fields();
481
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
479
    cmp_ok(scalar @all_fields, '==', 1, "Record has the expected number of fields");
480
482
481
    is_deeply(
483
    is(
482
        [map { $_->subfield('a') } $merged_record->field('250') ],
484
        $merged_record->as_formatted,
483
        ['256 bottles of beer on the wall'],
485
        $expected_record->as_formatted,
484
        '"250" field has been removed'
486
        'Union'
485
    );
487
    );
488
486
};
489
};
487
490
488
subtest 'Record fields has been added, removed and deleted when add = 1, append = 0, remove = 1, delete = 1' => sub {
491
subtest 'Record fields has been added, removed and deleted when add = 1, append = 0, remove = 1, delete = 1' => sub {
489
    plan tests => 3;
492
    plan tests => 1;
490
493
491
    $rule->set(
494
    $rule->set(
492
        {
495
        {
Lines 495-523 subtest 'Record fields has been added, removed and deleted when add = 1, append Link Here
495
            'remove' => 1,
498
            'remove' => 1,
496
            'delete' => 1,
499
            'delete' => 1,
497
        }
500
        }
498
    );
501
    )->store();
499
    $rule->store();
500
502
501
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
503
    my $expected_record = build_record([
504
            # "250" field has been appended
505
            [ '250', 'a', '256 bottles of beer on the wall' ],        # original and incoming
506
            # "500" field has been removed
507
            # "501" fields have been added
508
            [ '501', 'a', 'One cold bottle of beer in the fridge' ],  # incoming
509
            [ '501', 'a', 'Two cold bottles of beer in the fridge' ], # incoming
510
    ]);
502
511
503
    my @all_fields = $merged_record->fields();
512
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
504
    cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields");
505
513
506
    is_deeply(
514
    is(
507
        [map { $_->subfield('a') } $merged_record->field('250') ],
515
        $merged_record->as_formatted,
508
        ['256 bottles of beer on the wall'],
516
        $expected_record->as_formatted,
509
        '"250" field has been removed'
517
        'Union for existing fields, new fields are added'
510
    );
518
    );
511
519
512
    is_deeply(
513
        [map { $_->subfield('a') } $merged_record->field('501') ],
514
        ['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'],
515
        '"501" fields has been added'
516
    );
517
};
520
};
518
521
519
subtest 'Record fields has been appended, removed and deleted when add = 0, append = 1, remove = 1, delete = 1' => sub {
522
subtest 'Record fields has been appended, removed and deleted when add = 0, append = 1, remove = 1, delete = 1' => sub {
520
    plan tests => 2;
523
    plan tests => 1;
521
524
522
    $rule->set(
525
    $rule->set(
523
        {
526
        {
Lines 526-548 subtest 'Record fields has been appended, removed and deleted when add = 0, appe Link Here
526
            'remove' => 1,
529
            'remove' => 1,
527
            'delete' => 1,
530
            'delete' => 1,
528
        }
531
        }
529
    );
532
    )->store();
530
    $rule->store();
531
533
532
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
534
    my $expected_record = build_record([
535
            # "250" field has been appended and removed
536
            [ '250', 'a', '256 bottles of beer on the wall' ],        # incoming
537
            [ '250', 'a', '251 bottles of beer on the wall' ],        # incoming
538
            # "500" field has been removed
539
    ]);
533
540
534
    my @all_fields = $merged_record->fields();
541
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
535
    cmp_ok(scalar @all_fields, '==', 2, "Record has the expected number of fields");
536
542
537
    is_deeply(
543
    is(
538
        [map { $_->subfield('a') } $merged_record->field('250') ],
544
        $merged_record->as_formatted,
539
        ['256 bottles of beer on the wall', '251 bottles of beer on the wall'],
545
        $expected_record->as_formatted,
540
        '"250" fields has been appended and removed'
546
        'Fields from incoming replace original record. Existing fields not in incoming are removed'
541
    );
547
    );
548
542
};
549
};
543
550
544
subtest 'Record fields has been overwritten when add = 1, append = 1, remove = 1, delete = 1' => sub {
551
subtest 'Record fields has been overwritten when add = 1, append = 1, remove = 1, delete = 1' => sub {
545
    plan tests => 4;
552
    plan tests => 1;
546
553
547
    $rule->set(
554
    $rule->set(
548
        {
555
        {
Lines 551-578 subtest 'Record fields has been overwritten when add = 1, append = 1, remove = 1 Link Here
551
            'remove' => 1,
558
            'remove' => 1,
552
            'delete' => 1,
559
            'delete' => 1,
553
        }
560
        }
554
    );
561
    )->store();
555
    $rule->store();
556
562
557
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
563
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
558
564
559
    my @all_fields = $merged_record->fields();
565
    is(
560
566
        $merged_record->as_formatted,
561
    cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields");
567
        $incoming_record->as_formatted,
562
    is_deeply(
568
        'Incoming record erase original record'
563
        [map { $_->subfield('a') } $merged_record->field('250') ],
564
        ['256 bottles of beer on the wall', '251 bottles of beer on the wall'],
565
        '"250" fields has been appended and removed'
566
    );
569
    );
567
570
568
    my @fields = $merged_record->field('500');
569
    cmp_ok(scalar @fields, '==', 0, '"500" field has been deleted');
570
571
    is_deeply(
572
        [map { $_->subfield('a') } $merged_record->field('501') ],
573
        ['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'],
574
        '"501" fields has been added'
575
    );
576
};
571
};
577
572
578
# Test rule tag specificity
573
# Test rule tag specificity
Lines 589-679 my $skip_all_rule = Koha::MarcOverlayRules->find_or_create({ Link Here
589
});
584
});
590
585
591
subtest '"500" field has been protected when rule matching on tag "500" is add = 0, append = 0, remove = 0, delete = 0' => sub {
586
subtest '"500" field has been protected when rule matching on tag "500" is add = 0, append = 0, remove = 0, delete = 0' => sub {
592
    plan tests => 4;
587
    plan tests => 1;
588
589
    my $expected_record = build_record([
590
            # "250" field has been appended
591
            [ '250', 'a', '256 bottles of beer on the wall' ],        # incoming
592
            [ '250', 'a', '251 bottles of beer on the wall' ],        # incoming
593
            # "500" field has retained its original value
594
            [ '500', 'a', 'One bottle of beer in the fridge' ],       # original
595
            # "501" fields have been added
596
            [ '501', 'a', 'One cold bottle of beer in the fridge' ],  # incoming
597
            [ '501', 'a', 'Two cold bottles of beer in the fridge' ], # incoming
598
    ]);
593
599
594
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
600
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
595
601
596
    my @all_fields = $merged_record->fields();
602
    is(
597
603
        $merged_record->as_formatted,
598
    cmp_ok(scalar @all_fields, '==', 5, "Record has the expected number of fields");
604
        $expected_record->as_formatted,
599
    is_deeply(
605
        'All fields are erased by incoming record but 500 is protected'
600
        [map { $_->subfield('a') } $merged_record->field('250') ],
601
        ['256 bottles of beer on the wall', '251 bottles of beer on the wall'],
602
        '"250" fields has been appended and removed'
603
    );
606
    );
604
607
605
    is_deeply(
606
        [map { $_->subfield('a') } $merged_record->field('500') ],
607
        ['One bottle of beer in the fridge'],
608
        '"500" field has retained it\'s original value'
609
    );
610
611
    is_deeply(
612
        [map { $_->subfield('a') } $merged_record->field('501') ],
613
        ['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'],
614
        '"501" fields has been added'
615
    );
616
};
608
};
617
609
618
# Test regexp matching
610
# Test regexp matching
619
subtest '"5XX" fields has been protected when rule matching on regexp "5\d{2}" is add = 0, append = 0, remove = 0, delete = 0' => sub {
611
subtest '"5XX" fields has been protected when rule matching on regexp "5\d{2}" is add = 0, append = 0, remove = 0, delete = 0' => sub {
620
    plan tests => 3;
612
    plan tests => 1;
621
613
622
    $skip_all_rule->set(
614
    $skip_all_rule->set(
623
        {
615
        {
624
            'tag' => '5\d{2}',
616
            'tag' => '5\d{2}',
625
        }
617
        }
626
    );
618
    )->store;
627
    $skip_all_rule->store();
628
619
629
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
620
    my $expected_record = build_record([
621
            # "250" field has been appended
622
            [ '250', 'a', '256 bottles of beer on the wall' ],        # incoming
623
            [ '250', 'a', '251 bottles of beer on the wall' ],        # incoming
624
            # "500" field has retained its original value
625
            [ '500', 'a', 'One bottle of beer in the fridge' ],       # original
626
    ]);
630
627
631
    my @all_fields = $merged_record->fields();
628
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
632
629
633
    cmp_ok(scalar @all_fields, '==', 3, "Record has the expected number of fields");
630
    is(
634
    is_deeply(
631
        $merged_record->as_formatted,
635
        [map { $_->subfield('a') } $merged_record->field('250') ],
632
        $expected_record->as_formatted,
636
        ['256 bottles of beer on the wall', '251 bottles of beer on the wall'],
633
        'Fields are erased by incoming record but 500 is protected and 501 is not added'
637
        '"250" fields has been appended and removed'
638
    );
634
    );
639
635
640
    is_deeply(
641
        [map { $_->subfield('a') } $merged_record->field('500') ],
642
        ['One bottle of beer in the fridge'],
643
        '"500" field has retained it\'s original value'
644
    );
645
};
636
};
646
637
638
$skip_all_rule->delete();
639
647
# Test module specificity, the 0 all rule should no longer be included in set of applied rules
640
# Test module specificity, the 0 all rule should no longer be included in set of applied rules
648
subtest 'Record fields has been overwritten when non wild card rule with filter match is add = 1, append = 1, remove = 1, delete = 1' => sub {
641
subtest 'Record fields has been overwritten when non wild card rule with filter match is add = 1, append = 1, remove = 1, delete = 1' => sub {
649
    plan tests => 4;
642
    plan tests => 1;
650
643
651
    $rule->set(
644
    $rule->set(
652
        {
645
        {
653
            'filter' => 'test',
646
            'filter' => 'test',
654
        }
647
        }
655
    );
648
    )->store();
656
    $rule->store();
657
649
658
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
650
    my $merged_record = Koha::MarcOverlayRules->merge_records($orig_record, $incoming_record, { 'source' => 'test' });
659
651
660
    my @all_fields = $merged_record->fields();
652
    is(
661
653
        $merged_record->as_formatted,
662
    cmp_ok(scalar @all_fields, '==', 4, "Record has the expected number of fields");
654
        $incoming_record->as_formatted,
663
    is_deeply(
655
        'Only existing rule is not for us, erasing' # FIXME Is this comment correct?
664
        [map { $_->subfield('a') } $merged_record->field('250') ],
665
        ['256 bottles of beer on the wall', '251 bottles of beer on the wall'],
666
        '"250" fields has been appended and removed'
667
    );
656
    );
668
657
669
    my @fields = $merged_record->field('500');
670
    cmp_ok(scalar @fields, '==', 0, '"500" field has been deleted');
671
672
    is_deeply(
673
        [map { $_->subfield('a') } $merged_record->field('501') ],
674
        ['One cold bottle of beer in the fridge', 'Two cold bottles of beer in the fridge'],
675
        '"501" fields has been added'
676
    );
677
};
658
};
678
659
679
subtest 'An exception is thrown when append = 1, remove = 0 is set for control field rule' => sub {
660
subtest 'An exception is thrown when append = 1, remove = 0 is set for control field rule' => sub {
Lines 707-716 subtest 'An exception is thrown when rule tag is set to invalid regexp' => sub { Link Here
707
    ok($exception->isa('Koha::Exceptions::MarcOverlayRule::InvalidTagRegExp'), "Exception is of correct class");
688
    ok($exception->isa('Koha::Exceptions::MarcOverlayRule::InvalidTagRegExp'), "Exception is of correct class");
708
};
689
};
709
690
710
$skip_all_rule->delete();
711
691
712
subtest 'context option in ModBiblio is handled correctly' => sub {
692
subtest 'context option in ModBiblio is handled correctly' => sub {
713
    plan tests => 6;
693
    plan tests => 2;
694
714
    $rule->set(
695
    $rule->set(
715
        {
696
        {
716
            tag => '250',
697
            tag => '250',
Lines 721-729 subtest 'context option in ModBiblio is handled correctly' => sub { Link Here
721
            'remove' => 0,
702
            'remove' => 0,
722
            'delete' => 0,
703
            'delete' => 0,
723
        }
704
        }
724
    );
705
    )->store();
725
    $rule->store();
706
726
    my ($biblionumber) = AddBiblio($orig_record, '');
707
    my ($biblionumber, $biblioitemnumber) = AddBiblio($orig_record, '');
727
708
728
    # Since marc merc rules are not run on save, only update
709
    # Since marc merc rules are not run on save, only update
729
    # saved record should be identical to orig_record
710
    # saved record should be identical to orig_record
Lines 731-747 subtest 'context option in ModBiblio is handled correctly' => sub { Link Here
731
712
732
    my @all_fields = $saved_record->fields();
713
    my @all_fields = $saved_record->fields();
733
    # Koha also adds 999c field, therefore 4 not 3
714
    # Koha also adds 999c field, therefore 4 not 3
734
    cmp_ok(scalar @all_fields, '==', 4, 'Saved record has the expected number of fields');
735
    is_deeply(
736
        [map { $_->subfield('a') } $saved_record->field('250') ],
737
        ['250 bottles of beer on the wall', '256 bottles of beer on the wall'],
738
        'All "250" fields of saved record are identical to original record passed to AddBiblio'
739
    );
740
715
741
    is_deeply(
716
    my $expected_record = build_record([
742
        [map { $_->subfield('a') } $saved_record->field('500') ],
717
            # "250" field has been appended
743
        ['One bottle of beer in the fridge'],
718
            [ '250', 'a', '250 bottles of beer on the wall' ],        # original
744
        'All "500" fields of saved record are identical to original record passed to AddBiblio'
719
            [ '250', 'a', '256 bottles of beer on the wall' ],        # incoming
720
            [ '500', 'a', 'One bottle of beer in the fridge' ],       # original
721
            [ '999', 'c', $biblionumber, 'd', $biblioitemnumber ],    # created by AddBiblio
722
    ]);
723
    $expected_record->leader('00196    a2200073   4500');
724
725
    is(
726
        $saved_record->as_formatted,
727
        $expected_record->as_formatted,
745
    );
728
    );
746
729
747
    $saved_record->append_fields(
730
    $saved_record->append_fields(
Lines 753-770 subtest 'context option in ModBiblio is handled correctly' => sub { Link Here
753
736
754
    my $updated_record = GetMarcBiblio({ biblionumber => $biblionumber });
737
    my $updated_record = GetMarcBiblio({ biblionumber => $biblionumber });
755
738
756
    @all_fields = $updated_record->fields();
739
    $expected_record = build_record([
757
    cmp_ok(scalar @all_fields, '==', 5, 'Updated record has the expected number of fields');
740
            # "250" field has been appended
758
    is_deeply(
741
            [ '250', 'a', '250 bottles of beer on the wall' ],
759
        [map { $_->subfield('a') } $updated_record->field('250') ],
742
            [ '250', 'a', '256 bottles of beer on the wall' ],
760
        ['250 bottles of beer on the wall', '256 bottles of beer on the wall'],
743
            [ '500', 'a', 'One bottle of beer in the fridge' ],
761
        '"250" fields have retained their original values'
744
            [ '500', 'a', 'One cold bottle of beer in the fridge' ],
762
    );
745
            [ '999', 'c', $biblionumber, 'd', $biblioitemnumber ],    # created by AddBiblio
763
746
    ]);
764
    is_deeply(
747
    $expected_record->leader('00250    a2200085   4500');
765
        [map { $_->subfield('a') } $updated_record->field('500') ],
748
766
        ['One bottle of beer in the fridge', 'One cold bottle of beer in the fridge'],
749
    is(
767
        '"500" field has been appended'
750
        $updated_record->as_formatted,
751
        $expected_record->as_formatted,
768
    );
752
    );
769
753
770
    # To trigger removal from search index etc
754
    # To trigger removal from search index etc
771
- 

Return to bug 14957