Marcel de Rooy
f6028a3d34
Test plan: Run t/db_dependent/Acquisition/FillWithDefaultValues.t Signed-off-by: Bernardo Gonzalez Kriegel <bgkriegel@gmail.com> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
120 lines
3.7 KiB
Perl
Executable file
120 lines
3.7 KiB
Perl
Executable file
use Modern::Perl;
|
|
use Test::More tests => 12;
|
|
use Test::MockModule;
|
|
|
|
use MARC::Record;
|
|
use MARC::Field;
|
|
|
|
use C4::Context;
|
|
use C4::Acquisition qw( FillWithDefaultValues );
|
|
use Koha::Database;
|
|
|
|
my $schema = Koha::Database->new->schema;
|
|
$schema->storage->txn_begin;
|
|
|
|
my $biblio_module = Test::MockModule->new('C4::Biblio');
|
|
my $default_author = 'default author';
|
|
my $default_x = 'my default value';
|
|
$biblio_module->mock(
|
|
'GetMarcStructure',
|
|
sub {
|
|
{
|
|
# default for a control field
|
|
'008' => {
|
|
x => { defaultvalue => $default_x },
|
|
},
|
|
|
|
# default value for an existing field
|
|
'245' => {
|
|
c => { defaultvalue => $default_author, mandatory => 1 },
|
|
mandatory => 0,
|
|
repeatable => 0,
|
|
tab => 0,
|
|
lib => 'a lib',
|
|
},
|
|
|
|
# default for a nonexisting field
|
|
'099' => {
|
|
x => { defaultvalue => $default_x },
|
|
},
|
|
'942' => {
|
|
c => { defaultvalue => 'BK', mandatory => 1 },
|
|
d => { defaultvalue => '942d_val' },
|
|
f => { defaultvalue => '942f_val' },
|
|
},
|
|
};
|
|
}
|
|
);
|
|
|
|
my $record = MARC::Record->new;
|
|
$record->leader('03174nam a2200445 a 4500');
|
|
my @fields = (
|
|
MARC::Field->new(
|
|
'008', '1', ' ',
|
|
'@' => '120829t20132012nyu bk 001 0ceng',
|
|
),
|
|
MARC::Field->new(
|
|
100, '1', ' ',
|
|
a => 'Knuth, Donald Ervin',
|
|
d => '1938',
|
|
),
|
|
MARC::Field->new(
|
|
245, '1', '4',
|
|
a => 'The art of computer programming',
|
|
c => 'Donald E. Knuth.',
|
|
),
|
|
MARC::Field->new(
|
|
245, '1', '4', a => 'my second title',
|
|
),
|
|
);
|
|
|
|
$record->append_fields(@fields);
|
|
|
|
C4::Acquisition::FillWithDefaultValues($record);
|
|
|
|
my @fields_245 = $record->field(245);
|
|
is( scalar(@fields_245), 2, 'No new 245 field has been created' );
|
|
my @subfields_245_0 = $fields_245[0]->subfields;
|
|
my @subfields_245_1 = $fields_245[1]->subfields;
|
|
is_deeply(
|
|
\@subfields_245_0,
|
|
[ [ 'a', 'The art of computer programming' ], [ 'c', 'Donald E. Knuth.' ] ],
|
|
'first 245 field has not been updated'
|
|
);
|
|
is_deeply(
|
|
\@subfields_245_1,
|
|
[ [ 'a', 'my second title' ], [ 'c', $default_author ] ],
|
|
'second 245 field has a new subfield c with a default value'
|
|
);
|
|
|
|
my @fields_099 = $record->field('099');
|
|
is( scalar(@fields_099), 1, '1 new 099 field has been created' );
|
|
my @subfields_099 = $fields_099[0]->subfields;
|
|
is_deeply(
|
|
\@subfields_099,
|
|
[ [ 'x', $default_x ] ],
|
|
'099$x contains the default value'
|
|
);
|
|
|
|
# Test controlfield default
|
|
$record->field('008')->update( undef );
|
|
C4::Acquisition::FillWithDefaultValues($record);
|
|
is( $record->field('008')->data, $default_x, 'Controlfield got default' );
|
|
|
|
is( $record->subfield('942','d'), '942d_val', 'Check 942d' );
|
|
|
|
# Now test only_mandatory parameter
|
|
$record->delete_fields( $record->field('245') );
|
|
$record->delete_fields( $record->field('942') );
|
|
$record->append_fields( MARC::Field->new('942','','','f'=>'f val') );
|
|
# We deleted 245 and replaced 942. If we only apply mandatories, we should get
|
|
# back 245c again and 942c but not 942d. 942f should be left alone.
|
|
C4::Acquisition::FillWithDefaultValues($record, { only_mandatory => 1 });
|
|
@fields_245 = $record->field(245);
|
|
is( scalar @fields_245, 1, 'Only one 245 expected' );
|
|
is( $record->subfield('245','c'), $default_author, '245c restored' );
|
|
is( $record->subfield('942','c'), 'BK', '942c also restored' );
|
|
is( $record->subfield('942','d'), undef, '942d should not be there' );
|
|
is( $record->subfield('942','f'), 'f val', '942f untouched' );
|
|
|
|
$schema->storage->txn_rollback;
|