Support transfer reversals

This commit is contained in:
Brian Krausz 2015-02-12 22:03:38 -08:00
parent 581e6348cc
commit d1bceb0041
5 changed files with 83 additions and 0 deletions

View File

@ -41,6 +41,7 @@ require 'stripe/card'
require 'stripe/subscription'
require 'stripe/application_fee'
require 'stripe/refund'
require 'stripe/reversal'
require 'stripe/application_fee_refund'
require 'stripe/bitcoin_receiver'
require 'stripe/bitcoin_transaction'

14
lib/stripe/reversal.rb Normal file
View File

@ -0,0 +1,14 @@
module Stripe
class Reversal < APIResource
include Stripe::APIOperations::Update
include Stripe::APIOperations::List
def url
"#{Transfer.url}/#{CGI.escape(transfer)}/reversals/#{CGI.escape(id)}"
end
def self.retrieve(id, opts={})
raise NotImplementedError.new("Reversals cannot be retrieved without a transfer ID. Retrieve a reversal using transfer.reversals.retrieve('reversal_id')")
end
end
end

View File

@ -39,6 +39,7 @@ module Stripe
'subscription' => Subscription,
'file_upload' => FileUpload,
'transfer' => Transfer,
'transfer_reversal' => Reversal,
'bitcoin_receiver' => BitcoinReceiver,
'bitcoin_transaction' => BitcoinTransaction
}

View File

@ -0,0 +1,47 @@
require File.expand_path('../../test_helper', __FILE__)
module Stripe
class ReversalTest < Test::Unit::TestCase
should "reversals should be listable" do
@mock.expects(:get).once.returns(test_response(test_transfer))
transfer = Stripe::Transfer.retrieve('test_transfer')
assert transfer.reversals.first.kind_of?(Stripe::Reversal)
end
should "refunds should be refreshable" do
@mock.expects(:get).twice.returns(test_response(test_transfer), test_response(test_reversal(:id => 'refreshed_reversal')))
transfer = Stripe::Transfer.retrieve('test_transfer')
reversal = transfer.reversals.first
reversal.refresh
assert_equal 'refreshed_reversal', reversal.id
end
should "refunds should be updateable" do
@mock.expects(:get).once.returns(test_response(test_transfer))
@mock.expects(:post).once.returns(test_response(test_reversal(:metadata => {'key' => 'value'})))
transfer = Stripe::Transfer.retrieve('test_transfer')
reversal = transfer.reversals.first
assert_equal nil, reversal.metadata['key']
reversal.metadata['key'] = 'value'
reversal.save
assert_equal 'value', reversal.metadata['key']
end
should "create should return a new reversal" do
@mock.expects(:get).once.returns(test_response(test_transfer))
@mock.expects(:post).once.returns(test_response(test_reversal(:id => 'test_new_reversal')))
transfer = Stripe::Transfer.retrieve('test_transfer')
reversals = transfer.reversals.create(:amount => 20)
assert_equal 'test_new_reversal', reversals.id
end
end
end

View File

@ -254,6 +254,13 @@ module Stripe
}
end
def test_reversal_array(transfer_id)
{
:data => [test_reversal, test_reversal, test_reversal],
:object => 'list',
:url => '/v1/transfers/' + transfer_id + '/reversals'
}
end
def test_invoice
{
@ -359,6 +366,7 @@ module Stripe
:fee => 0,
:fee_details => [],
:id => "tr_test_transfer",
:reversals => test_reversal_array('tr_test_transfer'),
:livemode => false,
:currency => "usd",
:object => "transfer",
@ -381,6 +389,18 @@ module Stripe
})
end
def test_reversal(params={})
{
:object => 'transfer_reversal',
:amount => 30,
:currency => "usd",
:created => 1308595038,
:id => "ref_test_reversal",
:transfer => "tr_test_transfer",
:metadata => {}
}.merge(params)
end
def test_bitcoin_receiver(params={})
{
:id => 'btcrcv_test_receiver',