From 58c0aff3eb65a7d590c4aab7376081b7e5c922d8 Mon Sep 17 00:00:00 2001 From: Daiki Arai Date: Mon, 1 Apr 2024 18:49:07 +0900 Subject: [PATCH] add statement/balance/term resources --- .github/workflows/test.yml | 2 +- lib/Net/Payjp.pm | 18 ++++++++++++++++ lib/Net/Payjp/Balance.pm | 23 ++++++++++++++++++++ lib/Net/Payjp/Statement.pm | 29 +++++++++++++++++++++++++ lib/Net/Payjp/Term.pm | 23 ++++++++++++++++++++ t/balance.t | 43 ++++++++++++++++++++++++++++++++++++++ t/statement.t | 42 +++++++++++++++++++++++++++++++++++++ t/term.t | 43 ++++++++++++++++++++++++++++++++++++++ 8 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 lib/Net/Payjp/Balance.pm create mode 100644 lib/Net/Payjp/Statement.pm create mode 100644 lib/Net/Payjp/Term.pm create mode 100644 t/balance.t create mode 100644 t/statement.t create mode 100644 t/term.t diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fe9bb50..b7f6d15 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: os: ['ubuntu-latest'] - perl: [ '5.10', '5.30' ] + perl: [ '5.30', '5.38' ] name: Testing perl ${{ matrix.perl }} on ${{ matrix.os }} env: PERL_VERSION: ${{ matrix.perl }} diff --git a/lib/Net/Payjp.pm b/lib/Net/Payjp.pm index b21e62c..b9dc302 100644 --- a/lib/Net/Payjp.pm +++ b/lib/Net/Payjp.pm @@ -20,6 +20,9 @@ use Net::Payjp::Transfer; use Net::Payjp::Event; use Net::Payjp::Tenant; use Net::Payjp::TenantTransfer; +use Net::Payjp::Statement; +use Net::Payjp::Balance; +use Net::Payjp::Term; use Net::Payjp::Object; # ABSTRACT: API client for pay.jp @@ -538,6 +541,21 @@ sub tenant_transfer{ return Net::Payjp::TenantTransfer->new(%$self); } +sub statement{ + my $self = shift; + return Net::Payjp::Statement->new(%$self); +} + +sub balance{ + my $self = shift; + return Net::Payjp::Balance->new(%$self); +} + +sub term{ + my $self = shift; + return Net::Payjp::Term->new(%$self); +} + sub _request{ my $self = shift; my %p = @_; diff --git a/lib/Net/Payjp/Balance.pm b/lib/Net/Payjp/Balance.pm new file mode 100644 index 0000000..6df6017 --- /dev/null +++ b/lib/Net/Payjp/Balance.pm @@ -0,0 +1,23 @@ +package Net::Payjp::Balance; + +use strict; +use warnings; + +use base 'Net::Payjp'; + +sub retrieve{ + my $self = shift; + my $id = shift; + $self->id($id) if $id; + + $self->_request(method => 'GET', url => $self->_instance_url); +} + +sub all{ + my $self = shift; + my %p = @_; + + $self->_request(method => 'GET', url => $self->_class_url, param => \%p); +} + +1; diff --git a/lib/Net/Payjp/Statement.pm b/lib/Net/Payjp/Statement.pm new file mode 100644 index 0000000..1338c34 --- /dev/null +++ b/lib/Net/Payjp/Statement.pm @@ -0,0 +1,29 @@ +package Net::Payjp::Statement; + +use strict; +use warnings; + +use base 'Net::Payjp'; + +sub retrieve{ + my $self = shift; + my $id = shift; + $self->id($id) if $id; + + $self->_request(method => 'GET', url => $self->_instance_url); +} + +sub all{ + my $self = shift; + my %p = @_; + + $self->_request(method => 'GET', url => $self->_class_url, param => \%p); +} + +sub statement_urls{ + my $self = shift; + + $self->_request(method => 'POST', url => $self->_instance_url . '/statement_urls'); +} + +1; diff --git a/lib/Net/Payjp/Term.pm b/lib/Net/Payjp/Term.pm new file mode 100644 index 0000000..a6517ec --- /dev/null +++ b/lib/Net/Payjp/Term.pm @@ -0,0 +1,23 @@ +package Net::Payjp::Term; + +use strict; +use warnings; + +use base 'Net::Payjp'; + +sub retrieve{ + my $self = shift; + my $id = shift; + $self->id($id) if $id; + + $self->_request(method => 'GET', url => $self->_instance_url); +} + +sub all{ + my $self = shift; + my %p = @_; + + $self->_request(method => 'GET', url => $self->_class_url, param => \%p); +} + +1; diff --git a/t/balance.t b/t/balance.t new file mode 100644 index 0000000..043f309 --- /dev/null +++ b/t/balance.t @@ -0,0 +1,43 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::Mock::LWP; +use Test::More; + +use Net::Payjp; + +my $payjp = Net::Payjp->new(api_key => 'api_key'); + +isa_ok($payjp->balance, 'Net::Payjp::Balance'); +can_ok($payjp->balance, qw(retrieve all)); +ok(!$payjp->transfer->can('create')); +ok(!$payjp->transfer->can('save')); +ok(!$payjp->transfer->can('delete')); + +$Mock_resp->mock( content => sub { '{"object":"list"}' } ); +$Mock_resp->mock( code => sub {200} ); +$Mock_ua->mock( timeout => sub {} ); +$Mock_ua->mock( default_header => sub {} ); + +#List +my $res = $payjp->balance->all(type => 'collecting'); +is($Mock_req->{new_args}[1], 'GET'); +is($Mock_req->{new_args}[2], 'https://api.pay.jp/v1/balances?type=collecting'); +is($res->object, 'list'); + +#Set id. +$payjp->id('req1'); + +#Retrieve +$Mock_resp->mock( content => sub { '{"id":"req2"}' } ); +my $balance = $payjp->balance; +is($balance->id, 'req1'); +$balance->retrieve; +is($Mock_req->{new_args}[1], 'GET'); +is($Mock_req->{new_args}[2], 'https://api.pay.jp/v1/balances/req1'); +is($balance->id, 'req2'); +is($payjp->id, 'req1'); + +done_testing(); \ No newline at end of file diff --git a/t/statement.t b/t/statement.t new file mode 100644 index 0000000..30ed58b --- /dev/null +++ b/t/statement.t @@ -0,0 +1,42 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::Mock::LWP; +use Test::More; + +use Net::Payjp; + +my $payjp = Net::Payjp->new(api_key => 'api_key'); + +isa_ok($payjp->statement, 'Net::Payjp::Statement'); +can_ok($payjp->statement, qw(retrieve all statement_urls)); + +$Mock_resp->mock( content => sub { '{"object":"list"}' } ); +$Mock_resp->mock( code => sub {200} ); +$Mock_ua->mock( timeout => sub {} ); +$Mock_ua->mock( default_header => sub {} ); + +#List +my $res = $payjp->statement->all(owner => 'merchant'); +is($Mock_req->{new_args}[1], 'GET'); +is($Mock_req->{new_args}[2], 'https://api.pay.jp/v1/statements?owner=merchant'); +is($res->object, 'list'); + +#Retrieve +my $statement = $payjp->statement; +$statement->retrieve('req1'); +is($Mock_req->{new_args}[1], 'GET'); +is($Mock_req->{new_args}[2], 'https://api.pay.jp/v1/statements/req1'); +is($statement->id, 'req1'); + +$Mock_req->mock( content => sub { + my $p = $_[1]; + like($p, qr/platformer=true/); +} ); +$statement->statement_urls(platformer => 'true'); +is($Mock_req->{new_args}[1], 'POST'); +is($Mock_req->{new_args}[2], 'https://api.pay.jp/v1/statements/req1/statement_urls'); + +done_testing(); diff --git a/t/term.t b/t/term.t new file mode 100644 index 0000000..4079d95 --- /dev/null +++ b/t/term.t @@ -0,0 +1,43 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::Mock::LWP; +use Test::More; + +use Net::Payjp; + +my $payjp = Net::Payjp->new(api_key => 'api_key'); + +isa_ok($payjp->term, 'Net::Payjp::Term'); +can_ok($payjp->term, qw(retrieve all)); +ok(!$payjp->transfer->can('create')); +ok(!$payjp->transfer->can('save')); +ok(!$payjp->transfer->can('delete')); + +$Mock_resp->mock( content => sub { '{"object":"list"}' } ); +$Mock_resp->mock( code => sub {200} ); +$Mock_ua->mock( timeout => sub {} ); +$Mock_ua->mock( default_header => sub {} ); + +#List +my $res = $payjp->term->all(since_start_at => 1); +is($Mock_req->{new_args}[1], 'GET'); +is($Mock_req->{new_args}[2], 'https://api.pay.jp/v1/terms?since_start_at=1'); +is($res->object, 'list'); + +#Set id. +$payjp->id('req1'); + +#Retrieve +$Mock_resp->mock( content => sub { '{"id":"req2"}' } ); +my $term = $payjp->term; +is($term->id, 'req1'); +$term->retrieve; +is($Mock_req->{new_args}[1], 'GET'); +is($Mock_req->{new_args}[2], 'https://api.pay.jp/v1/terms/req1'); +is($term->id, 'req2'); +is($payjp->id, 'req1'); + +done_testing(); \ No newline at end of file