The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More qw( no_plan );
use strict;
use warnings;
use MARC::Field;

# a focused test of translation, making sure we don't get a 
# new field when subfields are only copied and none are translated

use_ok( "MARC::SubjectMap" );
use_ok( "MARC::SubjectMap::Rules" );
use_ok( "MARC::SubjectMap::Rule" );

my $map = MARC::SubjectMap->new();

# copy 600 ad and translate 600 x
my $field600 = MARC::SubjectMap::Field->new( { 
    tag             => 600, 
    translate       => ['x'], 
    copy            => ['a','d'],
    sourceSubfield  => 'x',
} );
$map->addField( $field600 );

# create rules
my $rules = MARC::SubjectMap::Rules->new();
$rules->addRule( 
    MARC::SubjectMap::Rule->new( {
        field       => 600,
        subfield    => 'x',
        original    => 'History and criticism',
        translation => 'Historica y critico',
        source      => 'bidex',
    } )
);
$map->rules( $rules );

ALL_COPY: {
    # this translation should fail since it's all copying 
    my $field = MARC::Field->new( '600', '', '', 
        a   => 'Shakespeare, William ',
        d   => '15XX-16XX',
    );
    my $new = $map->translateField( $field, $field600 );
    ok( ! $new, 'only copies means no translate' );
}

WITH_TRANSLATE: {
    # this translation should succeed since there is one translation
    my $field = MARC::Field->new( '600', '', '', 
        a   => 'Shakespeare, William ',
        d   => '15XX-16XX ',
        x   => 'History and criticism.' 
    );
    my $new = $map->translateField( $field, $field600);
    ok( $new, 'got new field' );
    is_deeply( [ $new->subfields() ], [ 
        [ a   => 'Shakespeare, William ' ],
        [ d   => '15XX-16XX ' ],
        [ x   => 'Historica y critico.' ],
        [ 2   => 'bidex' ] ], 
        'got expected new field' );
}