# 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')
+};
+