Koha/t/Koha_MetadataRecord.t
Tomas Cohen Arazi 40fc2a99c1 Bug 14639: (QA followup) make schema mandatory
This patch makes the 'schema' param mandatory. It is passed in every
call on the current codebase, so it makes no harm now, but makes
the code less error-prone.

Tests for this situation are added to t/Koha_MetadataRecord.t (schema
param is omitted and new() returns undef and a carped warning).

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2015-09-07 12:06:21 -03:00

156 lines
4.9 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright 2013 C & P Bibliography Services
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use Test::More tests => 5;
use Test::Warn;
BEGIN {
use_ok('Koha::MetadataRecord');
}
my $marcrecord = MARC::Record->new;
$marcrecord->add_fields(
[ '001', '1234' ],
[ '150', ' ', ' ', a => 'Cooking' ],
[ '450', ' ', ' ', a => 'Cookery', z => 'Instructional manuals' ],
);
my $record = Koha::MetadataRecord->new({ 'record' => $marcrecord, 'schema' => 'marc21' });
is(ref($record), 'Koha::MetadataRecord', 'Created valid Koha::MetadataRecord object');
my $samplehash = [
{
'field' => [
{
'value' => '1234',
'tag' => '001',
}
]
},
{
'field' => [
{
'subfield' => [
{
'value' => 'Cooking',
'subtag' => 'a'
}
],
'indicator2' => ' ',
'tag' => 150,
'indicator1' => ' ',
}
]
},
{
'field' => [
{
'subfield' => [
{
'value' => 'Cookery',
'subtag' => 'a'
},
{
'value' => 'Instructional manuals',
'subtag' => 'z'
}
],
'indicator2' => ' ',
'tag' => 450,
'indicator1' => ' ',
}
]
}
];
my $hash = $record->createMergeHash();
my %fieldkeys;
foreach my $field (@$hash) {
$fieldkeys{delete $field->{'field'}->[0]->{'key'}}++;
if (defined $field->{'field'}->[0]->{'subfield'}) {
foreach my $subfield (@{$field->{'field'}->[0]->{'subfield'}}) {
$fieldkeys{delete $subfield->{'subkey'}}++;
}
}
}
is_deeply($hash, $samplehash, 'Generated hash correctly');
my $dupkeys = grep { $_ > 1 } values %fieldkeys;
is($dupkeys, 0, 'No duplicate keys');
subtest "new() tests" => sub {
plan tests => 14;
# Test default values with a MARC::Record record
my $record = MARC::Record->new();
my $metadata_record;
warning_is { $metadata_record = new Koha::MetadataRecord({
record => $record }) }
{ carped => 'No schema passed' },
"Metadata schema is mandatory, raise a carped warning if omitted";
is( $metadata_record, undef, "Metadata schema is mandatory, return undef if omitted");
$metadata_record = new Koha::MetadataRecord({
record => $record,
schema => 'marc21'
});
is( ref($metadata_record), 'Koha::MetadataRecord', 'Type correct');
is( ref($metadata_record->record), 'MARC::Record', 'Record type preserved');
is( $metadata_record->schema, 'marc21', 'Metadata schema is set to marc21');
is( $metadata_record->format, 'MARC', 'Serializacion format defaults to marc');
is( $metadata_record->id, undef, 'id is optional, undef if unspecifid');
# Test passed values, also no constraint on record type
my $weird_record = {};
bless $weird_record, 'Weird::Class';
$metadata_record = new Koha::MetadataRecord({
record => $weird_record,
schema => 'something',
format => 'else',
id => 'an id'
});
is( ref($metadata_record), 'Koha::MetadataRecord', 'Type correct');
is( ref($metadata_record->record), 'Weird::Class', 'Record type preserved');
is( $metadata_record->schema, 'something', 'Metadata schema correctly set');
is( $metadata_record->format, 'else', 'Serializacion format correctly set');
is( $metadata_record->id, 'an id', 'The id correctly set');
# Having a record object is mandatory
warning_is { $metadata_record = new Koha::MetadataRecord({
record => undef,
schema => 'something',
format => 'else',
id => 'an id'
}) }
{ carped => 'No record passed' },
'Undefined record raises carped warning';
is( $metadata_record, undef, 'record object mandatory')
};
1;