#!/usr/bin/perl
use warnings::register;
use strict;
use Test::More tests => 8;
use Locale::Object::Currency;
use Locale::Object::Currency::Converter;
my $usd = Locale::Object::Currency->new( code => 'USD' );
my $gbp = Locale::Object::Currency->new( code => 'GBP' );
my $eur = Locale::Object::Currency->new( code => 'EUR' );
my $jpy = Locale::Object::Currency->new( code => 'JPY' );
my $converter = Locale::Object::Currency::Converter->new(
from => $usd,
to => $gbp,
service => 'XE'
);
#1
isa_ok( $converter, 'Locale::Object::Currency::Converter');
my $amount = 5;
# "Test" a conversion - output a test result, but don't fail if it
# doesn't work. This is because Finance::Currency::Convert::XE and
# Finance::Currency::Convert::Yahoo occasionally don't work due to transient
# network conditions. We want to indicate success/failure but not actually
# kill the tests.
# We can hide any warnings (like the ones Finance::Currency::Convert::XE chucks
# out from time to time about a currency not being available) - this is only a test.
local $SIG{__WARN__} = sub {};
SKIP:
{
skip 'Finance::Currency::Convert::XE not installed', 1 unless $converter->use_xe == 1;
my $result = $converter->convert($amount);
#2
if (defined $result && $result !~ /ERROR/)
{
pass('An XE conversion worked');
}
else
{
pass('An XE conversion was not successful, this may be due to transient network conditions');
}
}
#3
ok( $converter->service('Yahoo'), 'Resetting currency service worked' );
#4
ok( $converter->from($eur), "Resetting 'from' currency worked" );
#5
ok( $converter->to($jpy), "Resetting 'to' currency worked" );
SKIP:
{
skip 'Finance::Currency::Convert::Yahoo not installed', 1 unless $converter->use_yahoo == 1;
my $result = $converter->convert($amount);
# More "tests" - see note above.
#6
if (defined $result && $result !~ /ERROR/)
{
pass('A Yahoo! conversion worked');
}
else
{
pass('A Yahoo! conversion was not successful, this may be due to transient network conditions');
}
}
my $rate = $converter->rate;
#7
if (defined $rate)
{
pass('A conversion rate was found');
}
else
{
pass('A conversion rate was not found, this may be due to transient network conditions');
}
my $timestamp = $converter->timestamp;
#8
if (defined $timestamp)
{
pass('A rate timestamp was found');
}
else
{
pass('A rate timestamp was not found, this may be due to transient network conditions');
}