WebService-Braintree

 view release on metacpan or  search on metacpan

t/lib/WebService/Braintree/TestHelper.pm  view on Meta::CPAN

use Test::More;

use lib qw(lib t/lib);

use Carp qw(confess);
use Data::Dumper;
use DDP;
use DateTime::Format::Strptime;
use JSON;
use MIME::Base64;
use Time::HiRes qw(gettimeofday);
use Try::Tiny;
use DateTime::Format::Strptime;

use WebService::Braintree;
use WebService::Braintree::ClientApiHTTP;
use WebService::Braintree::ClientToken;
use WebService::Braintree::Util;

use Test::Deep;

use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(
    create_escrowed_transaction
    create_settled_transaction
    generate_unique_integer
    make_subscription_past_due
    amount
    not_ok
    perform_search
    should_throw
    should_throw_containing
    validate_result invalidate_result
    nonce_for_new_payment_method
    credit_card cc_number cc_last4 cc_bin cc_masked
    settle
);
our @EXPORT_OK = qw(
);

{
    my $config;
    sub config {
        return $config;
    }

    sub import {
        my ($class, $env) = @_;
        $env ||= 'integration';
        $class->export_to_level(1, @EXPORT);

        $config = WebService::Braintree->configuration;
        $config->environment($env);
        if ($env eq 'sandbox') {
            my $conf_file = 'sandbox_config.json';
            die "Can not run sandbox tests without $conf_file in distribution root" unless -e $conf_file;
            my $sandbox = decode_json( do { local $/; open my($f), $conf_file; <$f>} );
            $config->public_key($sandbox->{public_key});
            $config->merchant_id($sandbox->{merchant_id});
            $config->private_key($sandbox->{private_key});
        }
    }
}

# The sandbox must have specific items in it with specific values.
sub verify_sandbox {
    subtest verify_sandbox => sub {
        my %required_addons = (
            increase_30 => superhashof(bless {
                id => 'increase_30',
                amount => '30.00',
                never_expires => 1,
            }, 'WebService::Braintree::_::AddOn'),
        );
        my %addons = map {
            $_->id => $_
        } @{WebService::Braintree::AddOn->all};
        return unless cmp_deeply(\%addons, superhashof(\%required_addons), 'Validate addons');

        my %required_discounts = (
            discount_15 => superhashof(bless {
                id => 'discount_15',
                amount => '15.00',
                never_expires => 1,
            }, 'WebService::Braintree::_::Discount'),
        );
        my %discounts = map {
            $_->id => $_
        } @{WebService::Braintree::Discount->all};
        return unless cmp_deeply(\%discounts, superhashof(\%required_discounts), 'Validate discounts');

        my %required_plans = (
            integration_trialless_plan => superhashof(bless {
                price => '12.34',
                number_of_billing_cycles => undef,
                billing_day_of_month => undef,
                trial_period => 0,
                add_ons => [],
                discounts => [],
            }, 'WebService::Braintree::_::Plan'),
            integration_plan_with_add_ons_and_discounts => superhashof(bless {
                price => '1.00',
                number_of_billing_cycles => undef,
                billing_day_of_month => undef,
                trial_period => 1,
                add_ons => [
                    superhashof(bless {
                        id => 'increase_30',
                        amount => '30.00',
                        never_expires => 1,
                    }, 'WebService::Braintree::_::AddOn'),
                ],
                discounts => [
                    superhashof(bless {
                        id => 'discount_15',
                        amount => '15.00',
                        never_expires => 1,
                    }, 'WebService::Braintree::_::Discount'),
                ],
            }, 'WebService::Braintree::_::Plan'),



( run in 3.036 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )