#
# 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 2 of the License, or (at your option) any later
-# version.
+# 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.
+# 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, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
-use strict;
-use warnings;
+use Modern::Perl;
-use Test::More tests => 4;
+use Test::More tests => 5;
+use Test::Warn;
BEGIN {
use_ok('Koha::MetadataRecord');
my $samplehash = [
{
- 'field' => [
- {
- 'value' => '1234',
- 'tag' => '001',
- }
- ]
+ 'value' => '1234',
+ 'tag' => '001',
},
{
- 'field' => [
+ 'subfield' => [
{
- 'subfield' => [
- {
- 'value' => 'Cooking',
- 'subtag' => 'a'
- }
- ],
- 'indicator2' => ' ',
- 'tag' => 150,
- 'indicator1' => ' ',
+ 'value' => 'Cooking',
+ 'subtag' => 'a'
}
- ]
+ ],
+ 'indicator2' => ' ',
+ 'tag' => 150,
+ 'indicator1' => ' ',
},
{
- 'field' => [
+ 'subfield' => [
{
- 'subfield' => [
- {
- 'value' => 'Cookery',
- 'subtag' => 'a'
- },
- {
- 'value' => 'Instructional manuals',
- 'subtag' => 'z'
- }
- ],
- 'indicator2' => ' ',
- 'tag' => 450,
- 'indicator1' => ' ',
+ '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 $field->{'key'}}++;
+ if (defined $field->{'subfield'}) {
+ foreach my $subfield (@{$field->{'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')
+};
+