Skip to content

Commit 006fa2d

Browse files
Merge pull request stripe-ruby-mock#572 from MaicolBen/bug/fee-calculation
Fix net/fee calculation in balance transaction
2 parents edc25fb + 65d4685 commit 006fa2d

File tree

3 files changed

+37
-6
lines changed

3 files changed

+37
-6
lines changed

lib/stripe_mock/instance.rb

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ def new_balance_transaction(prefix, params = {})
175175
amount = params[:amount]
176176
unless amount.nil?
177177
# Fee calculation
178-
params[:fee] ||= (30 + (amount.abs * 0.029).ceil) * (amount > 0 ? 1 : -1)
178+
calculate_fees(params) unless params[:fee]
179+
params[:net] = amount - params[:fee]
179180
params[:amount] = amount * @conversion_rate
180181
end
181182
@balance_transactions[id] = Data.mock_balance_transaction(params.merge(id: id))
@@ -196,5 +197,31 @@ def to_faraday_hash(hash)
196197
response = Struct.new(:data)
197198
response.new(hash)
198199
end
200+
201+
def calculate_fees(params)
202+
application_fee = params[:application_fee] || 0
203+
params[:fee] = processing_fee(params[:amount]) + application_fee
204+
params[:fee_details] = [
205+
{
206+
amount: processing_fee(params[:amount]),
207+
application: nil,
208+
currency: params[:currency] || StripeMock.default_currency,
209+
description: "Stripe processing fees",
210+
type: "stripe_fee"
211+
}
212+
]
213+
if application_fee
214+
params[:fee_details] << {
215+
amount: application_fee,
216+
currency: params[:currency] || StripeMock.default_currency,
217+
description: "Application fee",
218+
type: "application_fee"
219+
}
220+
end
221+
end
222+
223+
def processing_fee(amount)
224+
(30 + (amount.abs * 0.029).ceil) * (amount > 0 ? 1 : -1)
225+
end
199226
end
200227
end

lib/stripe_mock/request_handlers/charges.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def new_charge(route, method_url, params, headers)
4141
end
4242

4343
ensure_required_params(params)
44-
bal_trans_params = { amount: params[:amount], source: id }
44+
bal_trans_params = { amount: params[:amount], source: id, application_fee: params[:application_fee] }
4545

4646
balance_transaction_id = new_balance_transaction('txn', bal_trans_params)
4747

spec/shared_stripe_examples/charge_examples.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,15 +163,19 @@
163163
end
164164

165165
it "creates a balance transaction" do
166+
amount = 300
167+
fee = 10
166168
charge = Stripe::Charge.create({
167-
amount: 300,
169+
amount: amount,
168170
currency: 'USD',
169-
source: stripe_helper.generate_card_token
171+
source: stripe_helper.generate_card_token,
172+
application_fee: fee,
170173
})
171174
bal_trans = Stripe::BalanceTransaction.retrieve(charge.balance_transaction)
172-
expect(bal_trans.amount).to eq(charge.amount)
173-
expect(bal_trans.fee).to eq(39)
175+
expect(bal_trans.amount).to eq(amount)
176+
expect(bal_trans.fee).to eq(39 + fee)
174177
expect(bal_trans.source).to eq(charge.id)
178+
expect(bal_trans.net).to eq(amount - bal_trans.fee)
175179
end
176180

177181
context 'when conversion rate is set' do

0 commit comments

Comments
 (0)