Koha/t/db_dependent/Biblio/TransformMarcToKoha.t
Marcel de Rooy e9a4e52077 Bug 10306: Add tests for module changes
GetMarcSubfieldStructure: In Biblio.t we are adding a subtest that checks
the structure returned by this routine. Is it a hashref pointing to
arrayrefs of hashrefs? ;)
In Search.t this routine was mocked. The change in the returned structure
is now applied to this mock too (moving the marc tag hashes into
arrayrefs).

GetMarcFromKohaField: In Biblio.t we add a subtest for it. We are checking
if it returns multiple mappings (per kohafield) and calling it in scalar
context too.

GetMarcSubfieldStructureFromKohaField: The existing subtest in Biblio.t is
expanded to also test the call in list context.

TransformKohaToMarc: This sub has its own test script. We are adding a
subtest in TransformKohaToMarc.t for a test with multiple mappings,
and for mapping to a control field in another framework. This also tests
the additional framework parameter.
Additionally, we add a test for the new no_split option used for items.

TransformMarcToKoha: This implicitly tests its helper sub _get_inverted.
This patch adds a new test script for this routine.

TransformMarcToKohaOneField: A few tests are added to the previous new
test script.

Test plan:
[1] Run t/db_dependent/Biblio.t
[2] Run t/db_dependent/Biblio/TransformKohaToMarc.t
[3] Run t/db_dependent/Biblio/TransformMarcToKoha.t
[4] Run t/db_dependent/Search.t

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
2017-12-07 14:44:15 -03:00

89 lines
3.9 KiB
Perl

#!/usr/bin/perl
# Tests for C4::Biblio::TransformMarcToKoha, TransformMarcToKohaOneField
# Copyright 2017 Rijksmuseum
#
# 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 => 2;
use MARC::Record;
use t::lib::Mocks;
use t::lib::TestBuilder;
use Koha::Database;
use Koha::Caches;
use Koha::MarcSubfieldStructures;
use C4::Biblio;
my $schema = Koha::Database->new->schema;
$schema->storage->txn_begin;
# Create a new framework with a few mappings
# Note: TransformMarcToKoha wants a table name (biblio, biblioitems or items)
our $fwc = t::lib::TestBuilder->new->build_object({ class => 'Koha::BiblioFrameworks' })->frameworkcode;
Koha::MarcSubfieldStructure->new({ frameworkcode => $fwc, tagfield => '300', tagsubfield => 'a', kohafield => 'biblio.field1' })->store;
Koha::MarcSubfieldStructure->new({ frameworkcode => $fwc, tagfield => '300', tagsubfield => 'b', kohafield => 'biblio.field2' })->store;
Koha::MarcSubfieldStructure->new({ frameworkcode => $fwc, tagfield => '500', tagsubfield => 'a', kohafield => 'biblio.field3' })->store;
subtest 'Test a few mappings' => sub {
plan tests => 6;
my $marc = MARC::Record->new;
$marc->append_fields(
MARC::Field->new( '300', '', '', a => 'a1', b => 'b1' ),
MARC::Field->new( '300', '', '', a => 'a2', b => 'b2' ),
MARC::Field->new( '500', '', '', a => 'note1', a => 'note2' ),
);
my $result = C4::Biblio::TransformMarcToKoha( $marc, $fwc );
# Note: TransformMarcToKoha stripped the table prefix biblio.
is( keys %{$result}, 3, 'Found all three mappings' );
is( $result->{field1}, 'a1 | a2', 'Check field1 results' );
is( $result->{field2}, 'b1 | b2', 'Check field2 results' );
is( $result->{field3}, 'note1 | note2', 'Check field3 results' );
is( C4::Biblio::TransformMarcToKohaOneField( 'biblio.field1', $marc, $fwc ),
$result->{field1}, 'TransformMarcToKohaOneField returns biblio.field1');
is( C4::Biblio::TransformMarcToKohaOneField( 'field4', $marc, $fwc ),
undef, 'TransformMarcToKohaOneField returns undef' );
};
subtest 'Multiple mappings for one kohafield' => sub {
plan tests => 4;
# Add another mapping to field1
Koha::MarcSubfieldStructure->new({ frameworkcode => $fwc, tagfield => '510', tagsubfield => 'a', kohafield => 'biblio.field1' })->store;
Koha::Caches->get_instance->clear_from_cache( "MarcSubfieldStructure-$fwc" );
my $marc = MARC::Record->new;
$marc->append_fields( MARC::Field->new( '300', '', '', a => '3a' ) );
my $result = C4::Biblio::TransformMarcToKoha( $marc, $fwc );
is_deeply( $result, { field1 => '3a' }, 'Simple start' );
$marc->append_fields( MARC::Field->new( '510', '', '', a => '' ) );
$result = C4::Biblio::TransformMarcToKoha( $marc, $fwc );
is_deeply( $result, { field1 => '3a' }, 'An empty 510a makes no difference' );
$marc->append_fields( MARC::Field->new( '510', '', '', a => '51' ) );
$result = C4::Biblio::TransformMarcToKoha( $marc, $fwc );
is_deeply( $result, { field1 => '3a | 51' }, 'Got 300a and 510a' );
is( C4::Biblio::TransformMarcToKohaOneField( 'biblio.field1', $marc, $fwc ),
'3a | 51', 'TransformMarcToKohaOneField returns biblio.field1' );
};
# Cleanup
Koha::Caches->get_instance->clear_from_cache( "MarcSubfieldStructure-$fwc" );
$schema->storage->txn_rollback;