The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More tests => 10;
use Scalar::Util qw(looks_like_number);
use Data::Dumper;

BEGIN { use_ok('Finance::FXCM::Simple') };

SKIP: {
    skip 'No login information to fxcm demo account defined', 9 unless (defined($ENV{FXCM_USER}) && defined($ENV{FXCM_PASSWORD}));
    eval {
        my $ff = Finance::FXCM::Simple->new($ENV{FXCM_USER}, $ENV{FXCM_PASSWORD}, "Demo", "http://www.fxcorporate.com/Hosts.jsp");
        $ff->setSubscriptionStatus('EUR/CAD', 'D');
        my $offers_hash = $ff->getOffersHash();
        is($offers_hash->{'EUR/CAD'}, 'D', 'EUR/CAD updates unsubscribed');
        $ff->setSubscriptionStatus('EUR/CAD', 'T');
        $offers_hash = $ff->getOffersHash();
        is($offers_hash->{'EUR/CAD'}, 'T', 'EUR/CAD updates subscribed');
        ok(looks_like_number($ff->getAsk("EUR/USD")), "getAsk returns a number");
        ok(looks_like_number($ff->getBid("EUR/USD")), "getBid returns a number");
        ok(looks_like_number($ff->getBalance()), "getBalance returns a number");
        ok(looks_like_number($ff->getBaseUnitSize("XAU/USD")), "getBaseUnitSize returns a number");
        ok(looks_like_number($ff->getBaseUnitSize("EUR/CAD")), "getBaseUnitSize works for EUR/CAD pair");


        #Close any existing trades to get the account into a well defined state
        my $trades = $ff->getTrades();
        foreach my $trade(@$trades) {
            $ff->closeMarket($trade->{id}, $trade->{size});
        }

        $trades = $ff->getTrades();
        is(@$trades, 0, "getTrades returns empty array ref (instead of undef) when no trades opened");

        $ff->openMarket("AUD/USD", "B", 1000);

        $trades = $ff->getTradesForSymbol("AUD/USD");
        is(@$trades, 1, "1 trade opened");
        is($trades->[0]->{symbol}, "AUD/USD", "AUD/USD trade");
        is($trades->[0]->{direction}, "long", "AUD/USD trade long");
        is($trades->[0]->{size}, "1000", "AUD/USD trade long 1000");

        $ff->openMarket("EUR/USD", "B", 5000);
        $trades = $ff->getTrades();
        is(@$trades, 2, "2 trades opened");
        foreach my $trade(@$trades) {
            $ff->closeMarket($trade->{id}, $trade->{size});
        }
        $trades = $ff->getTrades();
        is(@$trades, 0, "All trades closed");
        1;
    } or do {
        print "Error: " . $@;
    };
};