module StripeMock::RequestHandlers::Refunds

Public Class Methods

included(klass) click to toggle source
# File lib/stripe_mock/request_handlers/refunds.rb, line 5
def Refunds.included(klass)
  klass.add_handler 'post /v1/refunds',               :new_refund
  klass.add_handler 'get /v1/refunds',                :get_refunds
  klass.add_handler 'get /v1/refunds/(.*)',           :get_refund
  klass.add_handler 'post /v1/refunds/(.*)',          :update_refund
end

Public Instance Methods

get_refund(route, method_url, params, headers) click to toggle source
# File lib/stripe_mock/request_handlers/refunds.rb, line 68
def get_refund(route, method_url, params, headers)
  route =~ method_url
  refund_id = $1 || params[:refund]
  assert_existence :refund, refund_id, refunds[refund_id]
end
get_refunds(route, method_url, params, headers) click to toggle source
# File lib/stripe_mock/request_handlers/refunds.rb, line 59
def get_refunds(route, method_url, params, headers)
  params[:offset] ||= 0
  params[:limit] ||= 10

  clone = refunds.clone

  Data.mock_list_object(clone.values, params)
end
new_refund(route, method_url, params, headers) click to toggle source
# File lib/stripe_mock/request_handlers/refunds.rb, line 12
def new_refund(route, method_url, params, headers)
  if headers && headers[:idempotency_key]
    params[:idempotency_key] = headers[:idempotency_key]
    if refunds.any?
      original_refund = refunds.values.find { |c| c[:idempotency_key] == headers[:idempotency_key]}
      return refunds[original_refund[:id]] if original_refund
    end
  end

  charge = assert_existence :charge, params[:charge], charges[params[:charge]]
  params[:amount] ||= charge[:amount]
  id = new_id('re')
  bal_trans_params = {
    amount: params[:amount] * -1,
    source: id,
    type: 'refund'
  }
  balance_transaction_id = new_balance_transaction('txn', bal_trans_params)
  refund = Data.mock_refund params.merge(
    :balance_transaction => balance_transaction_id,
    :id => id,
    :charge => charge[:id],
  )
  add_refund_to_charge(refund, charge)
  refunds[id] = refund

  if params[:expand] == ['balance_transaction']
    refunds[id][:balance_transaction] =
      balance_transactions[balance_transaction_id]
  end
  refund
end
update_refund(route, method_url, params, headers) click to toggle source
# File lib/stripe_mock/request_handlers/refunds.rb, line 45
def update_refund(route, method_url, params, headers)
  route =~ method_url
  id = $1

  refund = assert_existence :refund, id, refunds[id]
  allowed = allowed_refund_params(params)
  disallowed = params.keys - allowed
  if disallowed.count > 0
    raise Stripe::InvalidRequestError.new("Received unknown parameters: #{disallowed.join(', ')}" , '', http_status: 400)
  end

  refunds[id] = Util.rmerge(refund, params)
end

Private Instance Methods

allowed_refund_params(params) click to toggle source
# File lib/stripe_mock/request_handlers/refunds.rb, line 86
def allowed_refund_params(params)
  [:metadata]
end
ensure_refund_required_params(params) click to toggle source
# File lib/stripe_mock/request_handlers/refunds.rb, line 76
def ensure_refund_required_params(params)
  if non_integer_charge_amount?(params)
    raise Stripe::InvalidRequestError.new("Invalid integer: #{params[:amount]}", 'amount', http_status: 400)
  elsif non_positive_charge_amount?(params)
    raise Stripe::InvalidRequestError.new('Invalid positive integer', 'amount', http_status: 400)
  elsif params[:charge].nil?
    raise Stripe::InvalidRequestError.new('Must provide the identifier of the charge to refund.', nil)
  end
end