# -*- mode: cperl -*- use Test::More; use strict; use autodie qw(:all); use Cwd; if ( !$ENV{WPP_TEST} || !-f $ENV{WPP_TEST} ) { plan skip_all => 'No WPP_TEST env var set. Please see README to run tests'; } else { plan tests => 5; } use_ok( 'Business::PayPal::API::TransactionSearch' ); ######################### require 't/API.pl'; my %args = do_args(); =pod The following four tests shows the methodology to use TransactionSearch to find transactions that are part of the same ProfileID. This method was discovered by trial-and-error. Specifically, it's somewhat odd that TransactionSearch is used with the parameter of 'ProfileID' with the value set to a specific TransactionID to find the ProfileID via the "Created" transaction. Then, in turn, that ProfileID can find the subscription payments related to the original transaction. This works, and seems to be correct, albeit odd. =cut open(SUBSCRIPTION_PAY_HTML, ">", "subscription-payment.html"); print SUBSCRIPTION_PAY_HTML <<_SUBSCRIPTION_PAYMENT_DATA_
_SUBSCRIPTION_PAYMENT_DATA_ ; close(SUBSCRIPTION_PAY_HTML); my $cwd = getcwd; print STDERR <<"_PROFILEID_"; Please note the next series of tests will not succeeed unless there is at least one transaction that is part of a subscription payments in your business account. if you haven't made one yet, you can visit: file:///$cwd/subscription-payment.html and use the sandbox buyer account to make the payment. _PROFILEID_ my $startdate = '1998-01-01T01:45:10.00Z'; my $ts = new Business::PayPal::API::TransactionSearch( %args ); my $resp = $ts->TransactionSearch(StartDate => $startdate); ok(scalar @{$resp} > 0, "Some transactions found"); my($profileID, %possibleTransactionIDs); foreach my $record (@{$resp}) { if ($record->{Type} =~ /Recurring/) { if ($record->{Status} =~ /Completed/) { $possibleTransactionIDs{$record->{TransactionID}} = $record; } elsif ($record->{Status} =~ /Created/) { $profileID = $record->{TransactionID}; } } } ok(defined $profileID, "Subscription Payment Creation Record and ProfileID Found"); ok(scalar(keys %possibleTransactionIDs) > 0, "Subscription Payment Transactions Found"); $resp = $ts->TransactionSearch(StartDate => $startdate, ProfileID => $profileID); my $foundAtLeastOne = 0; foreach my $record (@{$resp}) { # One of these will need to be in the possibleTransactionID list (i.e., # we're assuming that at least one payment has occured in this repeating). if (defined $possibleTransactionIDs{$record->{TransactionID}}) { $foundAtLeastOne = 1; last; } } ok($foundAtLeastOne, "Found one payment transaction under the given Profile ID");