Merge pull request #3 from bkuhn/profile-id-and-subscription-search-tests

Support ProfileID in TransactionSearch,  and add subscription search tests that use it.
This commit is contained in:
Olaf Alders 2015-01-02 22:48:03 -05:00
commit 8b755e0e66
6 changed files with 113 additions and 1 deletions

1
.gitignore vendored
View file

@ -4,3 +4,4 @@ auth.txt
blib blib
perltidy.LOG perltidy.LOG
pm_to_blib pm_to_blib
subscription-payment.html

View file

@ -1,3 +1,4 @@
Username = test1_api.mydomain.tld Username = test1_api.mydomain.tld
Password = XXXXXXXXXXXXXXXX Password = XXXXXXXXXXXXXXXX
Signature = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Signature = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SellerEmail = email-of-business-test-account@mydomain.tld

View file

@ -2,3 +2,4 @@ Username = test1_api.mydomain.tld
Password = myapipassword Password = myapipassword
CertFile = /www/var/cert_key_pem.txt CertFile = /www/var/cert_key_pem.txt
KeyFile = /www/var/cert_key_pem.txt KeyFile = /www/var/cert_key_pem.txt
SellerEmail = email-of-business-test-account@mydomain.tld

View file

@ -20,6 +20,7 @@ sub TransactionSearch {
Payer => 'ebl:EmailAddressType', Payer => 'ebl:EmailAddressType',
Receiver => 'ebl:EmailAddressType', Receiver => 'ebl:EmailAddressType',
ReceiptID => 'xs:string', ReceiptID => 'xs:string',
ProfileID => 'xs:string',
TransactionID => 'xs:string', TransactionID => 'xs:string',
InvoiceID => 'xs:string', InvoiceID => 'xs:string',
PayerName => 'xs:string', PayerName => 'xs:string',

View file

@ -26,7 +26,7 @@ sub do_args {
my @variables = qw( Username Password Signature Subject timeout my @variables = qw( Username Password Signature Subject timeout
CertFile KeyFile PKCS12File PKCS12Password CertFile KeyFile PKCS12File PKCS12Password
BuyerEmail BuyerEmail SellerEmail
); );
my %patterns = (); my %patterns = ();

108
t/SubscriptionPayments.t Normal file
View file

@ -0,0 +1,108 @@
# -*- 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_
<html>
<body>
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="business" value="$args{SellerEmail}" />
<input type="hidden" name="item_name" value="Monthly Payment" />
<input type="hidden" name="cmd" value="_xclick-subscriptions">
<input id="no_shipping" type="hidden" name="no_shipping" value="0" />
<input type="hidden" name="lc" value="US">
<input type="hidden" name="no_note" value="1">
<input type="hidden" name="t3" value="M" />
<input type="hidden" name="p3" value="1" />
<input type="hidden" name="src" value="1" />
<input type="hidden" name="srt" value="0" />
<input id="no_shipping" type="hidden" name="no_shipping" value="0" />
<input type="hidden" name="no_note" value="1">
<input id="amount" type="text" name="a3" size="5" minimum="10" value="10" />
<input type="image" border="0" name="submit" alt="Make test monthly payment now">
</form>
</body>
</html>
_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");