module StripeMock::RequestHandlers::PaymentIntents
Constants
- ALLOWED_PARAMS
- FAILED_TRANSACTION_AMOUNT
- REQUIRES_ACTION_AMOUNT
- REQUIRES_CAPTURE_AMOUNT
Public Class Methods
included(klass)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 10 def PaymentIntents.included(klass) klass.add_handler 'post /v1/payment_intents', :new_payment_intent klass.add_handler 'get /v1/payment_intents', :get_payment_intents klass.add_handler 'get /v1/payment_intents/(.*)', :get_payment_intent klass.add_handler 'post /v1/payment_intents/(.*)/confirm', :confirm_payment_intent klass.add_handler 'post /v1/payment_intents/(.*)/capture', :capture_payment_intent klass.add_handler 'post /v1/payment_intents/(.*)/cancel', :cancel_payment_intent klass.add_handler 'post /v1/payment_intents/(.*)', :update_payment_intent end
Public Instance Methods
cancel_payment_intent(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 94 def cancel_payment_intent(route, method_url, params, headers) route =~ method_url payment_intent = assert_existence :payment_intent, $1, payment_intents[$1] payment_intent[:status] = 'canceled' payment_intent end
capture_payment_intent(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 76 def capture_payment_intent(route, method_url, params, headers) route =~ method_url payment_intent = assert_existence :payment_intent, $1, payment_intents[$1] payment_intent[:status] = payment_intent[:amount] == FAILED_TRANSACTION_AMOUNT ? 'requires_payment_method' : 'succeeded' payment_intent[:last_payment_error] = payment_intent[:status] == 'requires_payment_method' ? last_payment_error_generator(code: 'card_declined', decline_code: 'do_not_honor', message: 'Your card has been declined. Please contact your bank for more information.') : nil payment_intent end
confirm_payment_intent(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 85 def confirm_payment_intent(route, method_url, params, headers) route =~ method_url payment_intent = assert_existence :payment_intent, $1, payment_intents[$1] payment_intent[:status] = 'succeeded' payment_intent[:charges] = charges_data(payment_intent[:amount], payment_intent[:currency]) payment_intent end
get_payment_intent(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 67 def get_payment_intent(route, method_url, params, headers) route =~ method_url payment_intent_id = $1 || params[:payment_intent] payment_intent = assert_existence :payment_intent, payment_intent_id, payment_intents[payment_intent_id] payment_intent = payment_intent.clone payment_intent end
get_payment_intents(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 54 def get_payment_intents(route, method_url, params, headers) params[:offset] ||= 0 params[:limit] ||= 10 clone = payment_intents.clone if params[:customer] clone.delete_if { |k,v| v[:customer] != params[:customer] } end Data.mock_list_object(clone.values, params) end
new_payment_intent(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 20 def new_payment_intent(route, method_url, params, headers) id = new_id('pi') ensure_payment_intent_required_params(params) status = case params[:amount] when REQUIRES_ACTION_AMOUNT then 'requires_action' when FAILED_TRANSACTION_AMOUNT then 'requires_payment_method' when REQUIRES_CAPTURE_AMOUNT then 'requires_capture' else 'succeeded' end last_payment_error = params[:amount] == FAILED_TRANSACTION_AMOUNT ? last_payment_error_generator(code: 'card_declined', decline_code: 'insufficient_funds', message: 'Not enough funds.') : nil next_action = params[:amount] == REQUIRES_ACTION_AMOUNT ? { type: "use_stripe_sdk" } : nil payment_intents[id] = Data.mock_payment_intent( params.merge( id: id, status: status, last_payment_error: last_payment_error, next_action: next_action, charges: status == 'succeeded' ? charges_data(params[:amount], params[:currency]) : empty_charges ) ) payment_intents[id].clone end
update_payment_intent(route, method_url, params, headers)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 46 def update_payment_intent(route, method_url, params, headers) route =~ method_url id = $1 payment_intent = assert_existence :payment_intent, id, payment_intents[id] payment_intents[id] = Util.rmerge(payment_intent, params.select{ |k,v| ALLOWED_PARAMS.include?(k)}) end
Private Instance Methods
charges_data(amount, currency)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 124 def charges_data(amount, currency) payment_intent_charge_id = new_id('ch') payment_intent_charge = Data.mock_charge( id: payment_intent_charge_id, amount: amount, currency: currency ) charges[payment_intent_charge_id] = payment_intent_charge { :data => [payment_intent_charge], :object => 'list', has_more: false, total_count: 1, url: "/v1/charges?payment_intent=pi_1EwXFB2eZvKYlo2CggNnFBo8" } end
empty_charges()
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 141 def empty_charges() { object: "list", data: [], has_more: false, total_count: 0, url: "/v1/charges?payment_intent=pi_1EwXFB2eZvKYlo2CggNnFBo8" } end
ensure_payment_intent_required_params(params)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 104 def ensure_payment_intent_required_params(params) if params[:amount].nil? require_param(:amount) elsif params[:currency].nil? require_param(:currency) elsif 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) end end
last_payment_error_generator(code:, message:, decline_code:)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 151 def last_payment_error_generator(code:, message:, decline_code:) { code: code, doc_url: "https://stripe.com/docs/error-codes/payment-intent-authentication-failure", message: message, decline_code: decline_code, payment_method: { id: "pm_1EwXFA2eZvKYlo2C0tlY091l", object: "payment_method", billing_details: { address: { city: nil, country: nil, line1: nil, line2: nil, postal_code: nil, state: nil }, email: nil, name: "seller_08072019090000", phone: nil }, card: { brand: "visa", checks: { address_line1_check: nil, address_postal_code_check: nil, cvc_check: "unchecked" }, country: "US", exp_month: 12, exp_year: 2021, fingerprint: "LQBhEmJnItuj3mxf", funding: "credit", generated_from: nil, last4: "1629", three_d_secure_usage: { supported: true }, wallet: nil }, created: 1563208900, customer: nil, livemode: false, metadata: {}, type: "card" }, type: "invalid_request_error" } end
non_integer_charge_amount?(params)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 116 def non_integer_charge_amount?(params) params[:amount] && !params[:amount].is_a?(Integer) end
non_positive_charge_amount?(params)
click to toggle source
# File lib/stripe_mock/request_handlers/payment_intents.rb, line 120 def non_positive_charge_amount?(params) params[:amount] && params[:amount] < 1 end